Versioned KV secrets
A Vault-compatible KV v2 engine: versioned reads and writes, check-and-set, soft-delete and destroy, per-path metadata — every value sealed before it touches disk.
WSLVault is a self-hosted secrets manager built on envelope encryption and a per-tenant key hierarchy — with dynamic leases, transit encryption, PKI, a signed audit trail, and active/active replication between regions.
$ wslvault login --key wslv_… ✓ authenticated as tenant acme region=manchester $ wslvault kv put prod/db/creds password=s3cr3t ✓ sealed with dek 01a0…93a7 version=1 $ wslvault kv get prod/db/creds --region london # same secret, decrypted in the peer region password = s3cr3t replication_lag=14ms
Static and dynamic secrets, encryption-as-a-service, a private CA, and the identity and policy layer to govern them — each engine sealed by the same per-tenant key hierarchy.
A Vault-compatible KV v2 engine: versioned reads and writes, check-and-set, soft-delete and destroy, per-path metadata — every value sealed before it touches disk.
AES-256-GCM with a per-tenant key hierarchy. Data keys are wrapped under a tenant KEK, which is wrapped under a root key held only by the crypto service.
Encryption as a service: encrypt, decrypt, sign and verify without the plaintext key ever leaving the vault. Keys rotate while old ciphertext stays readable.
Issue and manage a private CA, roles and short-lived certificates. CA private keys are envelope-encrypted under their own root, never stored in the clear.
Every credential is a lease: issued, listed, renewed and revoked for real. Revoking a token stops it working immediately, not just flips a row.
Fine-grained policies over API keys and JWTs, with MFA/TOTP, SCIM, LDAP, OIDC, mTLS and cloud-workload auth. Identity comes from a signed token, never a header.
Each region is a complete, independent stack — its own database, its own services, its own public hostname. They share nothing at runtime but key material, and each region’s agent pulls the other’s changes over the public edge.
The vault fails closed. Keys are wrapped, custody can be split, and every action is signed into a chain you can verify.
Every operation joins a per-tenant hash chain signed with a dedicated key — a record cannot be altered or removed without breaking the chain.
The root key can be split into Shamir shares so no single operator can unseal the vault alone. It starts sealed and stays sealed until a quorum agrees.
A data key belongs to exactly one tenant; a cross-tenant request returns “not found” rather than another tenant’s data. Isolation holds even at the crypto service.
Secrets, transit keys and CA material are all encrypted before storage. A database dump yields ciphertext wrapped under keys the database never sees.
Ship it with the Helm chart and Kubernetes operator, drive it from GitOps, scrape it with Prometheus, and reach it from your language of choice — or from an AI agent over the built-in MCP server.
The same JSON contract across every client, generated from one set of protobuf definitions — so a secret read in Go looks like a secret read in TypeScript.
Clone the repo, install the Helm chart, and unseal. The getting-started guide takes you from an empty cluster to your first sealed secret.