mrkeyoor.com_
Wed 23 Sept 00:36 UTC
Self-Hostedevaluationupdated 26 Aug 2026

pocket-id review

Pocket ID is a self-hosted OpenID Connect and OAuth 2.0 provider that signs users into applications with passkeys. It replaces separate passwords for home-lab and small-team services with one identity service, and it deliberately does not offer password authentication.

+41stars / 7d
Verdict

Our Pocket ID build passed in 38 seconds, but its Playwright run stopped with 2 failures and left 182 tests unrun, so test the complete sign-in path before moving real accounts. It is a good choice for a home lab or small team that has already decided on passkeys and wants less identity machinery than Keycloak. Choose a broader provider when password fallback, multi-node operation, or complex federation is mandatory.

We ran it

Lab card: what happened when we ran pocket-idScreenshot of pocket-id (pocket-id.org)
Install✓ · 28s487 packages · 778 MB
Build✓ · 38s
Tests✗ · 10sran, no count parsed
Repo1199 files~85,721 lines of source · 5.8 MB · 8 CI workflows · tests dir

Answers from our run

Does pocket-id build from source?

Dependencies installed in 28 seconds (487 packages), and the build succeeded in 38 seconds. We cloned commit 29a6fd6 into a clean Debian container with 3 CPUs and no project-specific setup.

Do pocket-id's tests pass?

The test command failed in our container, and its output did not report a pass or fail count.

Who should not use pocket-id?

Organizations that must retain passwords as a fallback: the README says Pocket ID supports only passkey authentication.

What are the alternatives to pocket-id?

Keycloak, ZITADEL, Ory Hydra. Our Pocket ID build passed in 38 seconds, but its Playwright run stopped with 2 failures and left 182 tests unrun, so test the complete sign-in path before moving real accounts.

Setup4/5Compose is short; public HTTPS and an encryption secret are still required
Docs4/5Clear deployment docs, with a very brief repository README
Community5/59,029 stars and active August 2026 issue discussion
Maturity4/5OIDC certified and actively released; scaling work remains open

Discussed on

  1. hnAuthentication with Pocket ID3 points

Who it’s for

Home-lab operators who want one passkey login across OIDC-compatible services.
Small teams willing to make passkeys the only user authentication method.
Administrators who need group restrictions, LDAP sync, SCIM provisioning, audit logs, and an administrative API.
Developers protecting web apps or MCP servers with a self-hosted OAuth provider.

Who it’s NOT for

Organizations that must retain passwords as a fallback: the README says Pocket ID supports only passkey authentication.
Operators who need proven horizontal scaling today: issue 1549 is still the tracking issue for high availability and horizontal scaling.
Teams that need a hosted identity service with no server ownership: Pocket ID stores identity data locally and its recommended path is a Docker deployment.
Buyers expecting every OAuth client behavior to be settled: issue 1718 requests private_key_jwt support for Client ID Metadata Document clients, and issue 1710 reports an API endpoint removed without a deprecation warning.

Setup reality

Our sandbox installed 487 pnpm packages in 28 seconds and used 778 MB. The build passed in 38 seconds. Tests failed after 10 seconds: Playwright reported 2 failures, in the CLI export and authentication setup specs, and 182 tests did not run.

A normal deployment needs a public APP_URL, a generated encryption secret or secret file, persistent storage, and TLS in front of port 1411. LDAP, SCIM, email, and MaxMind features add their own service details or credentials.

The README recommends Docker and the repository supplies Compose, though our source scan found no root Dockerfile. Passkeys also make domain and HTTPS stability important. The current public tracker still has a high-availability scaling issue open, so multi-node requirements deserve a separate trial.

Pocket ID v2 makes passkeys the whole login policy

Pocket ID v2.14.0 is an OpenID Connect and OAuth 2.0 provider built around one firm choice: every user signs in with a passkey. There is no password database to migrate and no password fallback to manage. Applications see a normal identity provider, while users approve sign-in with a platform authenticator or a hardware token such as a YubiKey. That narrow policy is the appeal. It is also the first reason to reject the project if an organization cannot make passkeys universal.

The product covers more than a bare login screen. Pocket ID can restrict an application to selected groups, synchronize users and groups from LDAP, provision accounts through SCIM, record audit events, and expose an administrative REST API. OAuth resource indicators let a client request access for a named API and its scopes. The project also advertises metadata-based clients, which can reduce manual client registration for compatible software. This is enough identity machinery for many home labs and small internal fleets without inheriting every Keycloak concept.

A 778 MB source install is separate from the short Compose deployment

Our sandbox cloned commit 29a6fd6, installed 487 pnpm packages in 28 seconds, and occupied 778 MB after installation. The checkout itself contained 1,199 files, about 85,721 source lines, and used 5.8 MB. That source workflow is for building the frontend and running the Playwright suite. An operator following the README would usually start the published v2 container through the supplied Compose file instead.

The Compose example maps port 1411, mounts ./data at /app/data, reads an environment file, and includes an optional health check. Two values carry most of the initial responsibility: APP_URL must be the public Pocket ID address, and the encryption material must be generated and stored safely. The example accepts the secret directly or through a file. A reverse proxy and trusted HTTPS name still belong to the operator, and changing that public origin later can disrupt passkey assumptions tied to the site.

What happened when we ran it

Our run installed 487 packages in 28 seconds and built successfully in 38 seconds. The repository is a pnpm workspace containing the frontend and a separate tests package. We found 8 CI workflow files, a tests directory, and a Compose file. The scan found no root Dockerfile, even though Pocket ID publishes container images and keeps Docker-related material elsewhere in the tree. Those signals describe the commit we tested rather than the contents of every release artifact.

The test command failed after 10 seconds. Playwright named 2 failed specs: CLI export and the authentication setup fixture. It then reported that 182 tests did not run, and pnpm stopped at the tests workspace with exit status 1. The log tail does not show the underlying exception for either failure, so it cannot support a claim about missing browsers, services, or credentials. The defensible finding is that the full suite did not complete in our fresh unprivileged container.

That result matters more for an identity provider than it would for a static utility. Before adoption, run a complete browser flow on the intended domain: enroll a passkey, sign in to an OIDC client, recover administrative access, rotate a client secret, and verify logout. Our 38-second build says the code compiled. It says nothing about whether a particular reverse proxy, authenticator, or relying party behaves correctly with the deployed origin.

Passkey simplicity trades away password fallback

Pocket ID only supports passwordless authentication. That removes password reset mail, password hashing policy, and credential stuffing against a password form. It also means account onboarding and recovery depend on users having suitable authenticators and administrators having a practiced recovery route. A competent team may prefer that trade. Another may be unable to accept it because contractors, shared terminals, recovery policy, or regulated support procedures still assume a second login method.

The project supports signing in from another device by scanning a QR code and approving the request where the passkey lives. That helps when the service is open on a device without the right authenticator. It does not turn passkeys into an optional layer. Compare the operating policy with the actual user population before migrating applications, especially when losing access to Pocket ID would also block access to the tools used to repair it.

Horizontal scaling is still an open requirement

GitHub showed 91 open issues and pull requests and a last push on August 26, 2026. Release v2.14.0 arrived on August 18 with multiple client secrets, RFC 8414 authorization metadata, API grants for metadata-based clients, and several fixes. The repository is plainly active. The combined open count is not a count of bugs, so health is better judged by that recent release work plus current issue discussion.

Issue 1549 remains the tracking item for high availability and horizontal scaling. That gives a clear boundary for buyers: a single Pocket ID deployment can be entirely reasonable for a home lab or a small company, but teams demanding multi-node failover should verify the current architecture instead of inferring it from OIDC certification. Keycloak or ZITADEL fits a wider identity program. Pocket ID fits the operator who values a passkey-only policy enough to keep the deployment deliberately small.

Alternatives

ProjectWhat it isPick it when
Keycloak gh↗A broad identity and access platform with many login methods and federation options.pick this instead when password fallback, enterprise federation, or detailed identity policy matters more than a small passkey-only setup.
ZITADEL gh↗An identity platform for self-hosted or managed deployments with multi-tenant controls.pick this instead when organizations, projects, multiple authentication methods, and a hosted option belong in the same system.
Ory HydraAn OAuth 2.0 and OpenID Connect server that delegates the login user interface.pick this instead when you want protocol infrastructure and intend to build or connect the identity screens yourself.

What people are saying

  1. [github-trending] pocket-id/pocket-id

Sources

  1. Pocket ID repository and README
  2. Pocket ID documentation
  3. Pocket ID v2.14.0 release
  4. High availability and horizontal scaling issue
  5. Client metadata private_key_jwt request

More self-hosted reviews

radar · sftpgo · mailcow-dockerized · openGym · BackPack · PanWatch · the whole board →