Skip to main content
The backend is one daemon, airlockd — HTTP API, embedded console, and schema migrations in a single binary — running from a Compose bundle in deploy/: airlockd is the only thing that talks to Postgres. airlock publish and push-ingestion agents ship events to it, decision flagging runs inside it, and it migrates its own database at startup — there is no SQL to run, ever.

Start it

Any machine with Docker: a laptop for a demo, a VM in your VPC for a pilot. Sign in to the console at http://localhost:4747 with the admin account configured at deploy time, then manage everything else from the console.

Accounts and tokens

Auth is built in — Airlock’s own user table, no external IdP to stand up:
  • Users — created by an admin in the console (or POST /api/v1/admin/users): email, password, and a role, admin or user. Disable rather than delete; history stays attributed.
  • CLI identityairlock login once per machine exchanges email + password for an ingest-scoped token. Sessions and published events carry that identity from then on.
  • Push-ingestion tokens — an admin mints a named token per external agent ("market-resolver-7") reporting decision events. Scoped, revocable, with a last-used time.
Passwords, tokens, and session cookies are all stored as hashes; a raw token is shown once at mint and never again.

Backup

Upgrade

Migrations are forward-only. To roll back, deploy the previous image and restore the pre-upgrade dump.

Teardown

Security notes

  • No outbound connections. Events come to the backend; it makes no calls out. Postgres is not published outside the compose network.
  • A dump leaks no credentials. Tokens and sessions verify against hashes.
  • Reads are per-account. Admins see everything, user accounts see only their own activity, and every account is revocable — there is no shared read-everything key.
  • Bind scope. The bundle publishes airlockd on every interface so laptop-to-laptop demos work. On a network you do not control, bind it to 127.0.0.1 or front it with your reverse proxy for TLS.
This is the single-node reference deployment. Production adds TLS termination, signed images, and your own runbooks on top.