Fort Knox for your secrets.
fnox reads secrets from encrypted files, password managers, and cloud secret stores, and hands them to your program as environment variables. One fnox.toml says where each secret lives, and the same command works on your laptop and in CI:
fnox exec -- npm startDocumentation · Quick start · Providers · CLI reference
# fnox.toml — safe to commit
[providers.age]
type = "age"
recipients = ["age1..."] # public keys of everyone who may decrypt
[providers.op]
type = "1password"
vault = "Engineering"
[secrets]
DATABASE_URL = { provider = "age", value = "YWdl..." } # ciphertext written by `fnox set`
STRIPE_KEY = { provider = "op", value = "Stripe/secret-key" } # a 1Password item
LOG_LEVEL = { default = "info" } # plain, non-sensitive setting
[profiles.production.providers.aws]
type = "aws-sm"
region = "us-east-1"
prefix = "myapp/"
[profiles.production.secrets]
DATABASE_URL = { provider = "aws", value = "database-url" } # AWS Secrets Manager in productionfnox exec -- npm start # development values
fnox exec --profile production -- ./deploy # production valuesYour program just reads DATABASE_URL. Nothing sensitive is in git: encrypted values need a private key to read, and vault references need access to the vault.
mise use -g fnoxOr cargo install fnox --locked, nix profile install github:jdx/fnox, or a binary from GitHub Releases. See installation.
- No vault yet? The quick start encrypts your first secret with age in about five minutes.
- Already use 1Password, Bitwarden, AWS, Vault, …? Use an existing vault: commit references and optionally cache values locally.
- Mix providers per secret: encrypted in git, password managers, cloud secret stores, local keychains.
- Profiles for development, staging, and production, plus layered config files for monorepos and personal overrides.
- Shell integration loads secrets when you
cdinto a project (Bash, Zsh, Fish, Nushell, PowerShell). - Offline cache of vault secrets, encrypted to your own key, optionally behind Touch ID or a YubiKey; or an in-memory daemon.
- Short-lived credentials from AWS STS, GCP, Azure, GitHub Apps, Vault, Cloudflare, or your own command.
- Safe for AI agents: a credential proxy injects real keys only into approved requests, and an MCP server exposes only the secrets you allow.
- CI-ready: one credential for the runner, the same
fnox execcommand, log masking on GitHub Actions.
| Where values live | Providers |
|---|---|
Encrypted in fnox.toml |
age, FIDO2, YubiKey, AWS KMS, Azure Key Vault keys, Google Cloud KMS |
| Cloud and hosted stores | AWS Secrets Manager, AWS Parameter Store, Azure Key Vault, Azure App Configuration, Google Secret Manager, Kubernetes, HashiCorp Vault, Doppler, FOKS, Bitwarden Secrets Manager, Keeper |
| Password managers | 1Password, Bitwarden, Enpass, Infisical, Passwordstate, Proton Pass |
| Local stores | OS keychain, KeePass, password-store, gopass |
| Your own | Lua plugins |
See CONTRIBUTING.md for development setup and tests. Report bugs in the issue tracker; ask questions in Discussions.
Sponsored by
View all sponsors