A directory that can explain itself.

Who can reach what, and why, for web applications and Linux machines. One policy set decides, and every answer names the rule that made it.

v0.7.0 · pre-1.0 · not yet auditedWhat that means
OpenID ConnectSCIM 2.0WebAuthn passkeysACMEShared SignalsCedar policySSH certificatesPostgreSQL 18

One directory, three jobs

Not three products glued together

Web access, machine access and the directory that governs both read the same people and groups, and one policy set decides all of them. So “who can reach what, and why?” has one answer, in one place.

Web access

Sign people in to every web application with a passkey, and decide which ones they may open. Applications with their own login use OpenID Connect; the ones without one sit behind your proxy and need no code at all.

  • No password for any person, ever
  • Refused? A page says why, and what would change it
  • Scoped access tokens for scripts and pipelines

Linux machines

Decide who may log in to which host, as whom, and with what sudo rights, from the same policy. The decision is made when a short-lived SSH certificate is issued, so a login never waits on the directory.

  • Certificates that last minutes, nothing to revoke
  • Users, groups and sudo served by a small agent
  • Internal TLS certificates over ACME

The directory, governed

People and groups with memberships that end on a date, a policy you version and roll back like code, and a record of every decision and every change that you can check has not been rewritten.

  • Every decision logged with the rule that made it
  • A hash-chained journal of every change
  • Accounts from your identity provider over SCIM

Explainable by design

“Why was I refused?” has an answer

Most identity systems can say yes or no. Cardinal keeps the reason: which rule allowed it, which rule forbade it, or that nothing granted it at all. Pick a request and watch it decided.

alexbrowser
grafanaforwardAuth
pointforwardAuth
principalalex
actionAccessURL
resourcegrafana.example.com
resultALLOWED
policystaff-web-access

Allowed by policy staff-web-access.

Example requests. The explanations use the wording Cardinal computes on the server (explain in the decision API), so the console, the CLI and the API all say the same thing.

Console and command line

The same answers, two ways in

A console for the questions that want a screen, and a CLI for the ones asked while something is broken. Both go through the same API, so neither can drift into being the real one. Every screen and every transcript below came off a running Cardinal.

Why was this denied?

Every decision is recorded with the rule that produced it, including the refusals where nothing matched, which are the ones hardest to explain and the ones most systems drop.

The decision explorer listing authorization decisions, each with the policy rule that produced it
Allowed and denied, the decision point, the rule, and how long evaluation took.

Before you rely on it

A working pre-1.0, not finished software

Everything on this site runs, and an end-to-end suite drives it against a real stack on every change. That does not make it finished, and this page says so as loudly as it says the rest.

Runs end to end

Driven against a real stack on every change

yes
External security review

Required before 1.0, not done yet

not yet
Stable API and upgrade path

Each release’s notes say what to do

pre-1.0
Licence

Not yet decided, and no warranty

undecided
Good for today

A pilot on services nobody would miss for an afternoon

pilot
A project byLonder

Developed by Londer, run in-house first

Cardinal is developed by Londer and is not distributed yet. The documentation describes everything that runs today, the limits included, so you can judge the design before there is anything to deploy.