Sign in

Stardust

An identity provider you run yourself — and can see all the way through.

Stardust decides who a person is, how they prove it, and what your applications are told about them. It runs on your servers, it has no screens of its own — the API is the product — and nothing in it reports to anybody.

What makes an identity provider dangerous is rarely what it lacks. It is what it does without anyone knowing: a capability switched on that nobody switched on, a door kept for its own console, a feature you did not know you had.

Stardust was written after measuring exactly that on the identity provider we used before. It has fewer features than the established products, by choice, and every one of them follows from two rules.

Signing in

  • OpenID Connect, done strictly

    Authorization code with PKCE required by default, return addresses matched exactly — never by prefix — and codes that live 60 seconds. Live discovery and JWKS; tokens signed with a key created on your machine that nobody else ever sees.

  • Passkeys and second factors

    Passkeys bound to your issuer, so they cannot be phished; authenticator apps; ten single-use recovery codes. When instance and organization policies differ, the strictest wins, and the amr claim tells applications which factors were used.

  • Passwords that hold

    Twelve characters by default, checked against some 100,000 known breached passwords — a list you can replace with your own — and a brake on repeated attempts and on sources spraying many addresses.

  • Single sign-on, without a hidden session

    One sign-in screen mints codes for your other applications. There is no server-side login cookie for anyone to steal, and a restart logs nobody out.

  • A recent proof for acts that last

    Granting powers, setting a password, adding a factor: anything that outlives the current sign-in asks for a fresh proof of identity. Credentials expire when idle and at a hard ceiling, and a revocation applies on the very next request.

Identity and data

  • Organizations, and never a “tenant”

    People belong to the instance and to any number of organizations. In organization mode a sign-in is the pair person-in-organization, and never reveals anything about anywhere else. Invitations need the person's consent.

  • An identifier per application

    A pairwise subject for each application — and for each organization, in organization mode. Applications see the same person only by declaring a correlation group, and attributes that could link them are flagged and listed.

  • Attributes released on purpose

    By default an application receives nothing beyond the identifier. Release is declared per application, organizations can withhold, and optional per-person consent lets a person refuse. Token, API and notifications give the same answer, from the same rule.

  • Powers, not administrators

    Nobody is an administrator: authority is a grant of a power, with a reach, an optional end date and the name of who gave it. Roles such as help desk, compliance or incident response expand into separate grants, and you can only grant what you hold.

  • Impersonation that shows

    Nobody holds it by default and no role contains it: it is granted on the host only, for one application at a time. The token carries the act claim, every use is audited, and it never touches the person's password or factors.

Seeing it, and running it

  • An audit log that does not lie

    Every act and every refusal, with the names as they were at the time. If an administrative event cannot be written the act is refused; sign-in never stops — its events wait in a local spool until the database takes them.

  • Signed notifications

    Sign-outs, deactivations, group and organization changes reach your applications as signed security events — only for people they already know, only to origins you allow, retried for up to seven days.

  • A contract generated from the code

    The OpenAPI description is generated, never written by hand: every route, every error code it can return, the power it needs. Breaking changes are declared by kind, and a release that breaks the contract without saying so does not ship.

  • Signed releases, signed updates

    Every image and the update feed are signed, and an image that does not verify is not ours. stardust upgrade works out the chain of steps; each costs about a second and a half of sign-in. Security advisories travel in the same signed feed.

  • stardust doctor

    Eight checks, no sign-in needed, an exit code your alerting can use — and output that contains no passwords, no personal data and no secrets, so it can be sent to whoever helps you.

  • Agents, read-only

    An MCP server, off by default. Its developer tier serves the contract and the concepts, never a person's data; the admin tier, switched on separately with short-lived personal tokens, reads and suggests — it never acts.

  • An optional panel

    A web interface for the instance, off by default and absent when off. It uses the same public API and the same powers as everything else, and leaves the recovery doors on the host where they belong.

No screenshots: Stardust has no screens of its own. This is the real output of stardust doctor in 2026.10.1 — the format as it ships; the names, address and dates are an example.

$ stardust doctor
ok     the instance                answers on http://localhost:8080
ok     this artifact               release 2026.10.1, released 2026-10-01 — signed, kid artifacts-2026.9-0fa2b10a
ok     the schema version          recorded: 2026.10.1
ok     the signing key's secret    read, and nobody else on this machine can reach it
ok     the audit spool             empty: everything has reached the database
ok     the breached-password list  97746 entries from /srv/apps/api/data/breached-passwords.txt.gz
ok     what verifiers are served   issuer https://id.example.com, key set advertised at https://id.example.com/.well-known/jwks.json, 1 key(s) served: Qm8sXn2LwT4yVb7cPz1eRA
ok     the licence                 Example S.p.A., production, until 2027-09-30; 3 organization(s), no limit; remembered

Nothing here needs you.
Delivered as
One OCI image for linux/amd64 and linux/arm64, with the command-line tool inside, and an installation kit for Docker Compose.
Needs
Docker with Compose v2 and Postgres — the kit brings one, or use yours. Nothing else.
In front
Your TLS reverse proxy, such as Caddy or nginx. Stardust listens on 127.0.0.1 only, and the database publishes no port.
Outbound
Optional: the signed update feed, and the notification origins you allow — none by default. Both can be closed.
Closed networks
Per-architecture archives for docker load, and the manual shipped inside the image, readable offline.
Backups
Database, audit spool and secrets, with the secrets kept apart — a script and a timer come with the kit.

A subscription. The licence is a small file we sign, checked offline: it says who it is for, until when, and how many organizations it opens. People and applications are not counted.

It covers the versions released while it is active. When it ends, administration stops and sign-in does not. Second factors, passkeys and recovery codes work with every licence — charging for them would pay people to stay on the weakest method they have.

An evaluation licence is issued on request: thirty days, three organizations, not for production.

Run your own identity provider, and see everything it does.