No plaintext at rest
Every value is encrypted (XChaCha20-Poly1305) in a single SQLite file. The vault key is protected by your OS credential store and/or an Argon2id passphrase.
Open source · Rust-native · Local-first
SourceOrrery replaces the plaintext .env file with an encrypted local vault, an Azure Key Vault–style lifecycle API and a manifest that declares which secrets a project needs without ever holding their values.
We give coding agents access to repositories, terminals and build pipelines while still distributing credentials through plaintext files that sit in the working tree, get indexed, get pasted into prompts and get committed. SourceOrrery takes a different line.
No plaintext at rest
Every value is encrypted (XChaCha20-Poly1305) in a single SQLite file. The vault key is protected by your OS credential store and/or an Argon2id passphrase.
References, not values
sourceorrery://development/database-password is safe to commit, log and
paste. It resolves only inside an authorised runtime.
A manifest that cannot leak
sourceorrery.toml declares the secrets a project needs. A value = ...
key is a parse error.
Metadata by default
list, versions, get and audit never print a value. Disclosure is a
deliberate get --reveal.
Versioned and recoverable
Every set creates an immutable version. Deletes are soft, recoverable
and audited. Expiry and activation times are enforced, not advisory.
One implementation
The Rust core owns every semantic. Backends and language bindings pass the conformance suite or they are not SourceOrrery.
Three different guarantees, kept separate on purpose. The threat model spells out each one.
| Guarantee | Today |
|---|---|
| At-rest protection — no plaintext secrets on disk, in the repo or in agent context | Yes |
| Access control — which identities may retrieve which secret | Local only: whoever can unlock the vault |
| Agent isolation — an untrusted agent running as your user cannot impersonate your application | No. Requires the authenticated broker and OS isolation (milestone 3) |
Removing .env closes the accidental-exposure routes. It does not stop code
running with your privileges from calling the same API you can. SourceOrrery
says so rather than promising otherwise.
# 1. Create a vault (key protected by the OS credential store when available)sourceorrery vault create development
# 2. Store a secret — interactively, from stdin or a file; never as an argumentsourceorrery secret set database-password --vault development
# 3. Inspect without revealingsourceorrery secret list --vault developmentsourceorrery secret get database-password --vault development
# 4. Declare what your project needs and run it with secrets injectedsourceorrery initsourceorrery checksourceorrery run -- npm start # DATABASE_PASSWORD is set in the child onlyThe getting started page walks through each step, starting with installing the release.
SourceOrrery has no cookie banner because I’m not interested in stalking you around the internet. SourceOrrery takes privacy so seriously that I even refused to build an auto-updater because phoning home once was already one call too many.