Sign-in without the dread.
A self-hosted, multi-tenant, passkey-first identity server. One static binary and a Postgres database. The people who sign in touch their device and they are in, with no password to forget and no one else holding the keys.
What your users feel. What you keep.
No passwords to lose
Passkeys first, with multi-factor and consent screens when you want them. Sign-in becomes the easiest part of your product.
Everyone's own corner
Multi-tenant from the first migration. Each tenant gets its own branding, managed from an admin console or through the management API.
Meet people where they are
Federate with upstream OpenID providers, Google and GitHub, or let people sign in with a Web3 wallet.
Boring where it matters.
Identity is the one place you want no surprises. So the choices are written down, and the dependencies are few.
Everything sign-in needs, in one place.
Nothing here is an add-on. It is all in the one binary you install.
Passkeys first
Quietly defensive
Speaks to your apps
People and roles
A record you can trust
Your brand, your domain
Bring it home.
Linux, amd64. The installer picks Docker if it finds it, or you can choose.
ids needs a Postgres database. Checksums are verified on every download, and signatures too when GPG is available.
From install to first sign-in.
About ten minutes, once ids is installed (see above) and Postgres is reachable. Commands below use the systemd install; with Docker the file is /opt/ids/.env instead.
ids needs an empty Postgres database and a user that owns it.
Open the environment file and fill in the database address and a secret key. Back the key up somewhere other than this server; without it the stored secrets cannot be read.
One command prepares the database. Running it again is harmless.
Point a name such as id.example.com at the server and put your usual reverse proxy with HTTPS in front. Tell ids which proxy to trust.
Set these once, start ids, and open the address. When the first admin exists you can remove them.
Open your address, continue as the administrator, and add a passkey. From then on you sign in with a touch. The admin console lives at /admin/.
To send invitations and verification codes, give ids any mail service on port 587.
Connect an app.
The admin console has a quickstart for each of these. Pick one, copy the values, and paste them into the app.
Good questions.
Is it really free?
Yes. You install it and run it on your own server, with no account with us and no sign-up.
Where does my data live?
In your Postgres database, on your server. Nothing is stored with us.
Can I read the source?
The source is not published. The installer and releases are on GitHub, and the design notes are written up on this site.
What do I need to run it?
A Linux server (amd64), a Postgres database, and a web address with HTTPS in front.
Can many companies share one install?
Yes. Each tenant has its own address, branding, people and admin console.
How do I update it?
Install the new release, run ids migrate again, then restart the service. Migrations are safe to re-run.
I am stuck.
Write to me. I read every message.
Need it to speak to a system you already run? Let's make it fit.