CLI reference
The Community Edition’s sidecar is edssa-server-ce. The
workspace also builds edssa-client (a token-minting load client,
useful for smoke-testing a CE sidecar) and edssa-admin (an
operator CLI oriented at the Enterprise edssa-proxy). All three
are source-built today (cargo build --release -p <crate>) and
will publish to Cargo / Homebrew alongside the v1.0.0-ce
release.
edssa-server-ce
The CE verifier sidecar. Reads its config from environment
variables (Config reference) and a
single TOML manifest at the path EDSSA_CE_MANIFEST points to.
edssa-server-ce
There are no positional arguments and no flags — every behaviour is driven by env / manifest so the binary works equivalently in a container, a systemd unit, a Helm chart, or a bare-shell launch.
Exit codes
| Code | Meaning |
|---|---|
| 0 | Clean shutdown (SIGTERM received) |
| !=0 | Config invalid (env var unset / manifest fails the validation gate / seed unreadable) |
The first 401 in the error stream names the violated CE constraint
- a
https://docs.edssa.io/ce#...pointer.
Endpoints
| Path | Method | Auth | Behaviour |
|---|---|---|---|
/healthz | GET | none | 200 OK “ok”; for kube liveness / readiness probes |
* | * | required X-EdSSA-Token header | forwards to EDSSA_BACKEND_URL; 401 (empty body) on reject |
Per ADR-006, production 401 bodies are intentionally empty so the verifier doesn’t leak which check failed.
edssa-client (token-minting load client)
Source-built today (cargo run -p edssa-client); ships as a
released binary via Homebrew tap + GitHub Releases in the
operator-side Phase-8 publication step.
edssa-client is a traffic client, not a one-shot minter: it
constructs --count tokens against a fleet seed, POSTs each to
--target with the X-EdSSA-Token header, records per-request
latency in an HdrHistogram, and prints a summary. It exits non-zero
if any request was rejected (unless --fail-fast stopped the run
on the first reject). Use it to smoke-test a running sidecar.
edssa-client \
--target http://127.0.0.1:8080/ \
--fleet c1b2-demo \
--seed secrets/fleet-c1b2-demo.seed \
--shape phase2 \
--width-n 64 --chaff-c 16 --threshold-t 33 \
--count 100
Flags
| Flag | Required? | Default | Meaning |
|---|---|---|---|
--target <url> | yes | — | Full URL of the upstream behind the sidecar |
--fleet <id> | yes | — | Fleet ID (ADR-004 format); must match the sidecar |
--seed <path> | yes | — | Raw seed bytes |
--shape <s> | no | phase2 | Wire shape: phase2 (ratchet derivation, manifest-driven proxy) or phase1 (legacy single-fleet) |
--width-n <n> | no | 32 | Token width; 32 or 64 for phase2. For CE set --width-n 64 |
--chaff-c <n> | no | 0 | Leading chaff slots; match the fleet’s chaff_C |
--threshold-t <n> | no | 0 | Verifier threshold; 0 means “max R_eff for the chosen width/chaff” |
--ratchet-step <n> | no | 0 | Ratchet ticks the proxy is ahead (CE never ratchets, so 0) |
--sub-id <n> | no | 1 | Sub-ID claim; range-checked against the fleet’s sub_id_range |
--count <n> | no | 1 | Number of requests to send |
--fail-fast | no | off | Stop after the first reject (negative tests) |
--json | no | off | Emit one JSON object per request + a JSON summary |
--auto-tick | no | off | Drift-correct the ratchet step from the proxy’s /api/fleets/<fleet>/ratchet-step endpoint (Enterprise proxy; incompatible with --shape phase1) |
CE note. The CE binary pins
width_N = 64and ships static (un-ratcheted) state, so the CE-matching invocation is--shape phase2 --width-n 64 --ratchet-step 0with--chaff-c/--threshold-tmatching your manifest preset (e.g.balanced→--chaff-c 16 --threshold-t 33). The header is assembled by the client as<fleet>-<hex>per ADR-012; there is no separate “print the token” mode.
edssa-admin (operator CLI)
The operator CLI for managing fleets and inspecting on-box state.
It is part of the same source tree but is oriented at the
Enterprise edssa-proxy deployment: it edits a multi-fleet
fleets.toml manifest (preserving operator comments and key
order), validates it, and signals the running proxy with SIGHUP.
In CE the manifest (EDSSA_CE_MANIFEST) is loaded once at
boot and edssa-server-ce does not handle SIGHUP, so the
manifest-mutation and reload subcommands do not apply to a CE
sidecar — to change a CE fleet you edit ce.toml and restart the
binary (see the Operator runbook). The
read-only inspection subcommands (verify-anchor,
verify-inclusion, trigger, tenants, usage,
compute-fingerprint, compliance-export, transparency-publish)
operate on Enterprise audit / multi-tenant state and are documented
in full on the Enterprise docs; they are listed here for
completeness so the surface matches the shipped binary.
Source-built today (cargo run -p edssa-admin -- <args>); ships
as a released binary alongside the Phase-8 publication step.
Global flags
| Flag | Env | Default | Meaning |
|---|---|---|---|
--manifest <path> | EDSSA_FLEETS_TOML | /opt/p1/secrets/fleets.toml | Manifest the fleet / compliance-export commands read/write |
--proxy-pidfile <path> | EDSSA_PROXY_PIDFILE | /var/run/edssa-proxy.pid | Pidfile SIGHUP is sent to after mutating commands |
--no-signal | — | off | Skip the SIGHUP after a mutating command |
Subcommands (as shipped)
| Command | Mutates? | Purpose |
|---|---|---|
fleet list | no | List fleets in the manifest |
fleet add --id … --seed-path … [--preset …] | yes | Register a fleet, then SIGHUP the proxy |
fleet remove --id … | yes | Remove a fleet, then SIGHUP the proxy |
fleet reload [--fleet …] | signals only | Re-validate the manifest and SIGHUP the proxy (does not edit it) |
schema rotate --fleet … | n/a | Deferred stub — exits with a message pointing at the Phase-5 panel |
verify-anchor --fleet … [--tenant …] [--against-witness rekor --pubkey …] | no | Walk the Tier-4 Merkle anchor chain for a fleet (Enterprise audit DB) |
verify-inclusion --fleet … --anchor … (--event-json … | --leaf-hex …) | no | Per-event Merkle inclusion proof |
trigger list|lookup|validate | no | Inspect the F-26 trigger registry |
tenants list|show|validate | no | Inspect the Phase-9 multi-tenant seed |
usage report|verify|export | no | Per-tenant metering rollups (Phase-10) |
compute-fingerprint --cert … | no | SHA-256 of a TLS leaf cert for swarm peer pinning |
compliance-export --regime … --out … | no | Regulator-ready evidence archive |
transparency-publish | no | Emit the public transparency-roots JSON (requires --features rekor) |
rotate apply --fleet … --seed … | yes | Stage a new seed and SIGHUP the proxy (cooperative seed rotation) |
The
verify-anchor --against-witness rekorandtransparency-publishpaths require the binary to be built with--features rekor; without it they exit with a “rebuild with--features rekor” hint. None of these inspect or mutate CE sidecar state — they read Enterprise audit / tenant stores.