Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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

CodeMeaning
0Clean shutdown (SIGTERM received)
!=0Config invalid (env var unset / manifest fails the validation gate / seed unreadable)

The first 401 in the error stream names the violated CE constraint

Endpoints

PathMethodAuthBehaviour
/healthzGETnone200 OK “ok”; for kube liveness / readiness probes
**required X-EdSSA-Token headerforwards 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

FlagRequired?DefaultMeaning
--target <url>yesFull URL of the upstream behind the sidecar
--fleet <id>yesFleet ID (ADR-004 format); must match the sidecar
--seed <path>yesRaw seed bytes
--shape <s>nophase2Wire shape: phase2 (ratchet derivation, manifest-driven proxy) or phase1 (legacy single-fleet)
--width-n <n>no32Token width; 32 or 64 for phase2. For CE set --width-n 64
--chaff-c <n>no0Leading chaff slots; match the fleet’s chaff_C
--threshold-t <n>no0Verifier threshold; 0 means “max R_eff for the chosen width/chaff”
--ratchet-step <n>no0Ratchet ticks the proxy is ahead (CE never ratchets, so 0)
--sub-id <n>no1Sub-ID claim; range-checked against the fleet’s sub_id_range
--count <n>no1Number of requests to send
--fail-fastnooffStop after the first reject (negative tests)
--jsonnooffEmit one JSON object per request + a JSON summary
--auto-ticknooffDrift-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 = 64 and ships static (un-ratcheted) state, so the CE-matching invocation is --shape phase2 --width-n 64 --ratchet-step 0 with --chaff-c / --threshold-t matching 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

FlagEnvDefaultMeaning
--manifest <path>EDSSA_FLEETS_TOML/opt/p1/secrets/fleets.tomlManifest the fleet / compliance-export commands read/write
--proxy-pidfile <path>EDSSA_PROXY_PIDFILE/var/run/edssa-proxy.pidPidfile SIGHUP is sent to after mutating commands
--no-signaloffSkip the SIGHUP after a mutating command

Subcommands (as shipped)

CommandMutates?Purpose
fleet listnoList fleets in the manifest
fleet add --id … --seed-path … [--preset …]yesRegister a fleet, then SIGHUP the proxy
fleet remove --id …yesRemove a fleet, then SIGHUP the proxy
fleet reload [--fleet …]signals onlyRe-validate the manifest and SIGHUP the proxy (does not edit it)
schema rotate --fleet …n/aDeferred stub — exits with a message pointing at the Phase-5 panel
verify-anchor --fleet … [--tenant …] [--against-witness rekor --pubkey …]noWalk the Tier-4 Merkle anchor chain for a fleet (Enterprise audit DB)
verify-inclusion --fleet … --anchor … (--event-json … | --leaf-hex …)noPer-event Merkle inclusion proof
trigger list|lookup|validatenoInspect the F-26 trigger registry
tenants list|show|validatenoInspect the Phase-9 multi-tenant seed
usage report|verify|exportnoPer-tenant metering rollups (Phase-10)
compute-fingerprint --cert …noSHA-256 of a TLS leaf cert for swarm peer pinning
compliance-export --regime … --out …noRegulator-ready evidence archive
transparency-publishnoEmit the public transparency-roots JSON (requires --features rekor)
rotate apply --fleet … --seed …yesStage a new seed and SIGHUP the proxy (cooperative seed rotation)

The verify-anchor --against-witness rekor and transparency-publish paths 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.