Encrypted and versioned
AES-256-GCM with a nonce generated per write and every version retained. Reads are audited, so there is no quiet path to a value.
Secrets, feature flags and runtime config in one library. AES-256-GCM at rest with a new version archived on every write, flags with tenant, user, percentage-rollout and schedule targeting, and config entries that fire Watch callbacks when they change. Rotation runs in the background with a per-key callback.
AES-256-GCM with a generated nonce per write, every version kept, and a full audit trail behind each read.
A policy per secret and a custom rotator function, so the lifecycle is the manager’s job.
The registry discovers what a plugin implements by type switch, so a plugin declares capability by satisfying it.
Secrets, flags and runtime configuration in one place, which is convenient and blurs a boundary worth watching.
AES-256-GCM with a nonce generated per write and every version retained. Reads are audited, so there is no quiet path to a value.
Targeting rules, tenant overrides, percentage rollouts and schedule-based activation, all type-safe at the call site.
Duration and JSON types with a watch API, and an override chain that resolves sources in a declared order with per-tenant overrides on top.
A policy per secret and a custom rotator function, so rotation is something the manager performs on a schedule.
Every operation carries tenant and app on the context, which makes cross-tenant access impossible at the store layer.
The registry works out what a plugin can do with a type switch, so implementing an interface is the whole registration step.
Versioned, access-controlled, never logged.
Evaluated per tenant with a declared default.
Values that change without a deploy.
Vault unifies three things that are usually three libraries: encrypted secrets, rule-based feature flags, and hot-reloadable runtime configuration. It is a library: you bring the database and the encryption key, and you control the process lifecycle.
AES-256-GCM at rest with transparent decryption on read. Every Set archives the previous value, so any historical version is fetchable by number. The key provider reads from the environment with hex or base64 auto-detection, and secrets carry optional metadata including expiry.
Five value types (bool, string, int, float, JSON) and six targeting rules: by tenant, by tenant tag, by user, deterministic percentage rollout, a time-window schedule, and a custom rule evaluated by a plugin. Rules evaluate in priority order with per-tenant overrides, behind an LRU cache with a 30-second default TTL. Typed accessors return a default rather than an error, because a flag lookup failing should not take down a request path.
Typed entries with duration parsing, per-tenant overrides resolved ahead of the app-level value, version tracking, and Watch callbacks fired on mutation. Sources compose: memory, environment, database, or a priority chain across all three.
Tenant isolation propagates through context.Context, so a cross-tenant read is structurally impossible rather than merely filtered. Secret rotation runs as a background manager with per-key rotator callbacks, automatic versioning and record-keeping. Every action lands in an append-only audit trail with full scope context, optionally forwarded to an external system.
Shipping something on Vault? Nobody is listed here yet. Tell me what you built and you will be the first.
Get listed →