Quickstart
Running, with a policy approved and a first signed decision, in about 15
minutes.
Offline verification
Prove that enforcement works with no internet connection.
When to self host
What runs
docker compose up -d --build --wait starts five services, in this order:
The
api service starts only after the other four have finished without error. Full details, including every file and setting: Configuration reference.
What stays inside your deployment
- Decisions. Policy evaluation runs in the
apicontainer against policies stored in your Postgres. - Signing keys. Two Ed25519 key pairs, generated on your machine, stored in
./parmana-local/keys. Parmana never sees them. - Records. Trust Records, Refusal Records, Execution Intents, the caller audit trail and policy approvals are stored in your Postgres.
- Verification. A record verifies with only your public keys, on any machine, with no network call.
Production rules are not relaxed
The self hosted server enforces every rule the hosted API enforces:- Every request needs an API key, and a key acts only for its own caller ID unless it lists others.
- A policy authorizes nothing until two different people have approved it, one of them with a signed step up authorization. See Approve a policy.
- Before an action is released, the server signs and stores an Execution Intent. If it cannot, nothing is released.
- A connector must be reached over HTTPS.
Requirements
Limits
- One server, one database. No replicas and no failover are set up.
- Signing keys are files. They sit in
./parmana-local/keyson the host. Protect and back up that directory. See Operations. - Approvers sign on their own machine. With either SDK 1.3.0 (
signPolicyChangeStepUp()from npm,sign_policy_change_step_up()from PyPI), or with the repository’s script. See Approve a policy. - Where it is verified. On Docker Desktop 29.8.0 on Windows 11, and on every change in CI on Linux (
.github/workflows/docker-image.yml, jobself-hosted).