Skip to content
Documentation

Documentation

valiss is offline tenant authentication for services, built on a three-level chain of Ed25519 keys: operator, account, user. Verification is offline against a single pinned public key, so there is no auth service to run, no token introspection endpoint to call, and issuing credentials never touches production.

Most multi-tenant services grow a central auth dependency: an OAuth provider, a session store, a per-tenant key registry, something every request consults and every deployment keeps alive. valiss inverts that. Trust is one operator public key baked into the server, and everything a request carries is a self-contained signed credential that verifies against that key with no network call.

The model is small. An operator key signs account (tenant) tokens, an account key signs user tokens, so every credential is signed by the key one level up. Each request is signed by the subject’s own key; the server walks the chain back to the pinned operator key, checks the account token against a revocation allowlist that fails closed, and hands the tenant and user identity to the handler. Proof of possession is the default, so a captured token is inert without the seed that signs requests. Bearer user tokens are the deliberate exception, for clients that can hold a short-lived token but not a key.

valiss fits multi-tenant APIs, where each customer is an account that mints its own scoped-down user and service credentials without asking you; machine-to-machine auth, where services carry keys and per-request signatures rather than shared secrets; and edge or on-prem deployments, where a verifier needs only the operator public key, so isolated installs authenticate exactly like connected ones. It is a poorer fit elsewhere. If you want one central switch to invalidate every credential at once, that is epoch rotation, not the per-request path. If a client cannot hold or protect any credential at all, custody has a real gap today and there is no custodian server yet. And if a conventional session or OAuth stack already serves a single-tenant app, valiss buys you little.

Start with the quickstart for the shortest working path. The rest builds in reading order: the concepts one page at a time, the language guides for wiring valiss into real code, and operations for running it in production. The security model sets out the threat model and its limits, versioning the wire and library compatibility rules, and troubleshooting maps each rejection back to its cause. Project status records where valiss stands and how to report a security issue, the comparison places it against other auth models, and the reference points to the authoritative material underneath: the Go API, the wire specification, and the conformance vectors.

Explore the documentation

Quickstart
The shortest working path in Go: create an operator, account, and user, issue a token, and verify it server-side against the allowlist.
Concepts
The valiss model, one concept per page: the operator/account/user key hierarchy, tokens, the fail-closed allowlist, rotation, extensions, messages, creds, custody, and its NATS lineage.
Guides
Integration guides for valiss: issuing credentials and verifying offline in Go, Python, and TypeScript, plus the language-neutral recipe.
Operations
Running valiss in production: the pre-production hardening checklist, what to monitor and why, and the operator runbooks for rotation, the operator token lifecycle, emergency revocation, allowlist distribution, credential renewal, and seed custody.
Security model
What the offline model protects and where the protection ends: the pinned trust anchor, proof of possession, and the limits you own.
Versioning and compatibility
The wire-spec and library version axes, and how cross-language interoperability is gated by the conformance vectors.
Troubleshooting
Every verification rejection mapped from the symptom you see back to the cause the verifier decided, and what to check.
Project status and support
Where valiss stands in its lifecycle: what each implementation ships today, what is planned, and how support works.
Why valiss, and why not
When to choose valiss and when not to: an honest comparison against OAuth2/OIDC, mTLS, SPIFFE/SPIRE, SSH certificates, and Biscuit/macaroons, plus how to adopt it alongside an existing identity provider and how to leave.
Reference
The map to the Go API docs, the wire specification, and the conformance vectors.
Specification
The normative wire format and conformance model, SPEC-1.