Identity as code
Every user, client, and custom claim is a YAML file you can review, version, and audit like any other code. Changes ship through pull requests, not through an admin panel.
OpenID Connect Identity Provider
Zen IdP is a declarative OpenID Connect provider for small and medium teams. Your users, clients, and claims live in YAML, one root secret drives everything cryptographic, and a single binary handles the rest. No external database, no directory to sync, no passwords to reset.
curl -fsSL https://get.varavel.com/zen-idp | sh
Written in Go, distributed as a single executable and docker image. Free and open source under the MIT license.
A standard OIDC provider your applications already know how to talk to.
See it running
Watch the Grafana example end to end: Zen IdP signs the user in,
Grafana accepts the identity, and the whole stack starts with a
single docker compose up.
Built on a few deliberate decisions that keep the whole system small and understandable.
Every user, client, and custom claim is a YAML file you can review, version, and audit like any other code. Changes ship through pull requests, not through an admin panel.
A single ZEN_IDP_SECRET derives the OIDC signing key and every user's TOTP credential. Nothing cryptographic is stored in the database, so recovery is deterministic.
Users sign in with their identifier and a code from their authenticator app. No passwords to store, no email to deliver, no SMTP to operate.
Authorization code flow with PKCE, RS256 signing, discovery, JWKS, and /userinfo. Every OIDC-capable application can connect directly.
Sessions, one-use tokens, rate limits, locks, and audit records live in an embedded SQLite file. It holds operational state only: identities and credentials always come from YAML and the root secret.
MIT-licensed and fully self-hosted. Zen IdP runs entirely on your own infrastructure, so your identities never depend on a vendor's availability or pricing.
How it works
The whole journey is visible. You declare the identity layer, and the service handles the rest.
Sessions, tokens, rate limits, and cleanup are handled internally, and restarts preserve state. The database is purely operational and never the source of truth.
Use cases
A focused identity layer for people who want to own their sign-in.
One shared sign-in for all the internal tools your team runs itself, with no third-party identity provider in the middle.
A single binary with no external services fits on any small server. Declare your users in YAML, run it behind your reverse proxy, and move on.
Everything runs locally with no external calls, so Zen IdP works in air-gapped networks where cloud identity providers are not an option.
Zen IdP stays focused so you can understand every part of it.
The things people usually ask before adopting Zen IdP.
Declare your users, choose a root secret, and give your internal tools one shared sign-in. Free, open source, and self-hosted.