In active development
Sign-in for your apps, without the surveillance.
epass is an identity provider you can run yourself. Passkeys, one-time codes and OAuth 2.1 for every application you build — and an architecture that keeps epass from knowing which of your users are the same person, or how to reach them.
Self-hosted: one binary and a PostgreSQL database. No agent, no phone-home.
What it does
One authorization server for all of your applications, with the sign-in methods people already have on their devices.
-
Passkeys, first
WebAuthn sign-in with the platform authenticator people already unlock their device with. Nothing to remember, nothing to phish.
-
OAuth 2.1, properly
Authorization code with PKCE, the device grant for TVs and CLIs, and token introspection for your own services. Standard clients work unmodified.
-
Codes and links
One-time codes and magic links over email or Telegram, for the people and the devices that passkeys do not reach yet.
-
Second factors that recover
TOTP with single-use recovery codes, and lockout after repeated failures — so a lost phone is an inconvenience, not a support ticket you cannot close.
-
Realms, not tenants-in-a-column
Each realm is its own population of users, its own clients, its own policy. Isolation is enforced in every query, not by a filter someone has to remember.
-
Headless when you need it
A JSON API for the whole sign-in ceremony, so you can build the screens yourself and still get the security work for free.
We can't lose what we never hold.
That is a statement about how epass is built, not a promise about how it is run. Four properties, each one a thing the code does rather than a policy someone maintains:
- Pairwise identities
- Every application sees a different identifier for the same person. Two of your apps comparing notes learn nothing, and neither does epass.
- Contact details encrypted at rest
- Email addresses and phone numbers are stored encrypted. A copy of the database is not a mailing list.
- Secrets stored as hashes
- Tokens, one-time codes and client secrets exist in the database only as SHA-256 hashes. The plaintext never lands there at all.
- Self-hosting as the default
- Run it on your own infrastructure against your own PostgreSQL. The strongest proof that a vendor is not harvesting your users is that the vendor is not in the path.
What epass is, and is not
The second list matters as much as the first. epass holds credentials for signing in to your applications — it is not a place to keep your own secrets, and it is not trying to become one.
It is
- An OAuth 2.1 authorization server
- A passkey and second-factor registry
- User management, scoped per realm
- A device-approval authenticator for your desktop
- Software you can read, run and keep
It is not
- A password vault for the rest of your life
- An autofill extension with access to every site you visit
- A place to share secrets with other people
- An analytics product wearing a login page
- A profile of your users, assembled across your apps
Built on the standards, not beside them
Nothing here is a proprietary handshake. If your client library speaks these, it speaks epass.
- OAuth 2.1
- PKCE · RFC 7636
- Device Authorization Grant · RFC 8628
- Token Introspection · RFC 7662
- WebAuthn · FIDO2
- TOTP · RFC 6238