Quickstart
A Guardian running on your machine in under 60 seconds, with one command to confirm it's alive.
This is the fast path. For depth (Postgres, EVM, feature flags, examples)
read docs/LOCAL_DEV.md. For the why before the how,
read docs/CONCEPTS.md. For production readiness, start
with docs/PRODUCTION.md.
The compose file sets the container paths it needs, but you must choose a
network explicitly — GUARDIAN_NETWORK_TYPE has no default and the server
refuses to start without it (there is no fallback network). Set it in a
local .env file or export it in your shell; accepted values are
MidenLocal, MidenTestnet, and MidenDevnet. The same requirement
applies when you run the server directly with cargo run; see
LOCAL_DEV.md.
Run
echo "GUARDIAN_NETWORK_TYPE=MidenTestnet" > .env
docker compose up --build -d
This launches the server with the filesystem backend. HTTP binds on
:3000, gRPC on :50051.
Verify
curl http://localhost:3000/ # liveness — same body as /status, expect 200 OK
curl http://localhost:3000/pubkey # expect { "commitment": "0x..." }
If both succeed, Guardian is running. The commitment you see is the ACK key commitment clients will pin.
Stop
docker compose down
What you just got
- A filesystem-backed Guardian server (no Postgres, no EVM).
- Auto-generated ACK keypair persisted in the container's keystore.
- HTTP + gRPC on default ports.
- No operator dashboard (allowlist is empty by default).
This is enough to point an example SDK at:
# Rust TUI demo against your local Guardian
cd examples/demo && cargo run --release
The demo also needs a Miden RPC endpoint (Devnet works out of the box
and runs the Miden 0.16 node this workspace targets). If you upgraded
from an older checkout, wipe stale local state first (store.sqlite3,
~/.guardian) — Miden 0.15 state does not load under 0.16 (see
MIDEN_COMPATIBILITY.md). See
docs/LOCAL_DEV.md if your network
choice differs.
Where to next
| Goal | Read |
|---|---|
| Understand what Guardian is before going further | CONCEPTS.md |
| Switch to Postgres, enable EVM, run without Docker | LOCAL_DEV.md |
| Set every available env var deliberately | CONFIGURATION.md |
| Enable the operator dashboard locally | DASHBOARD.md |
| Deploy or operate in production | PRODUCTION.md |
| Something broke | TROUBLESHOOTING.md |