encrypted/remote secret manager
See the codeFort Knox for your secrets.
fnox loads secrets into your commands from encrypted files, password managers, and cloud services. Keep the configuration in fnox.toml, choose where each secret lives, and use the same command in development and CI:
fnox exec -- npm start
Documentation · Quick start · Providers · CLI reference
Install with mise:
mise use -g fnox
Or with Rust: cargo install fnox --locked. See installation for other methods and updates.
In your project, run the setup wizard and configure a provider before storing a secret:
fnox init
# Use the default provider selected in the wizard; the value is prompted
fnox set DATABASE_URL
# Check access, then run your application
fnox check --all
fnox exec -- npm start
The provider determines where the value is stored. Without a provider, fnox set writes a plaintext default. Follow the age quick start for a complete encrypted setup, or connect an existing vault.
With a remote provider, value is a reference. This example reads an existing 1Password item:
# fnox.toml
[providers.op]
type = "1password"
vault = "Engineering"
[secrets]
DATABASE_URL = { provider = "op", value = "Database/url" }
LOG_LEVEL = { default = "info" } # Non-sensitive configuration
[profiles.production.providers.aws]
type = "aws-sm"
region = "us-east-1"
prefix = "myapp/"
[profiles.production.secrets]
DATABASE_URL = { provider = "aws", value = "database-url", if_missing = "error" }
fnox exec -- npm start
fnox exec --profile production -- ./deploy.sh
With an encryption provider, fnox set writes ciphertext into fnox.toml. Commit the ciphertext and public recipients; keep private keys outside the repository. Teammates need a matching private key or access to the configured vault.
fnox sync encrypts a personal cache for offline use with a local provider such as age. Refresh it when vault values change.fnox.local.toml.Mix providers in the same project. Each provider guide covers authentication, configuration, and reference formats.
| Where values live | Providers |
|---|---|
| Encrypted in your config | age, FIDO2, YubiKey, AWS KMS, Azure KMS, GCP KMS |
| Cloud and hosted stores | AWS Secrets Manager, AWS Parameter Store, Azure Key Vault, Azure App Configuration, GCP Secret Manager, Kubernetes Secrets, Vault, Doppler, FOKS, Bitwarden Secrets Manager, Keeper Secrets Manager |
| Password managers and secret services | 1Password, Bitwarden, Enpass, Infisical, Passwordstate, Proton Pass |
| Local stores | OS keychain, KeePass, password-store |
| Non-sensitive configuration | Plaintext defaults |
See the provider comparison to choose a storage model. Cloud KMS providers require network access even though their ciphertext lives locally.
Start with CONTRIBUTING.md for development setup, tests, and documentation changes. Report bugs in the issue tracker.
Sponsored by
View all sponsors
(top 24 of 83)
929 followers · starred Sep 2026
153 followers · starred Jan 2026
401 followers · starred Dec 2025
959 followers · starred Feb 2026
encrypted/remote secret manager
See the codeFort Knox for your secrets.
fnox loads secrets into your commands from encrypted files, password managers, and cloud services. Keep the configuration in fnox.toml, choose where each secret lives, and use the same command in development and CI:
fnox exec -- npm start
Documentation · Quick start · Providers · CLI reference
Install with mise:
mise use -g fnox
Or with Rust: cargo install fnox --locked. See installation for other methods and updates.
In your project, run the setup wizard and configure a provider before storing a secret:
fnox init
# Use the default provider selected in the wizard; the value is prompted
fnox set DATABASE_URL
# Check access, then run your application
fnox check --all
fnox exec -- npm start
The provider determines where the value is stored. Without a provider, fnox set writes a plaintext default. Follow the age quick start for a complete encrypted setup, or connect an existing vault.
With a remote provider, value is a reference. This example reads an existing 1Password item:
# fnox.toml
[providers.op]
type = "1password"
vault = "Engineering"
[secrets]
DATABASE_URL = { provider = "op", value = "Database/url" }
LOG_LEVEL = { default = "info" } # Non-sensitive configuration
[profiles.production.providers.aws]
type = "aws-sm"
region = "us-east-1"
prefix = "myapp/"
[profiles.production.secrets]
DATABASE_URL = { provider = "aws", value = "database-url", if_missing = "error" }
fnox exec -- npm start
fnox exec --profile production -- ./deploy.sh
With an encryption provider, fnox set writes ciphertext into fnox.toml. Commit the ciphertext and public recipients; keep private keys outside the repository. Teammates need a matching private key or access to the configured vault.
fnox sync encrypts a personal cache for offline use with a local provider such as age. Refresh it when vault values change.fnox.local.toml.Mix providers in the same project. Each provider guide covers authentication, configuration, and reference formats.
| Where values live | Providers |
|---|---|
| Encrypted in your config | age, FIDO2, YubiKey, AWS KMS, Azure KMS, GCP KMS |
| Cloud and hosted stores | AWS Secrets Manager, AWS Parameter Store, Azure Key Vault, Azure App Configuration, GCP Secret Manager, Kubernetes Secrets, Vault, Doppler, FOKS, Bitwarden Secrets Manager, Keeper Secrets Manager |
| Password managers and secret services | 1Password, Bitwarden, Enpass, Infisical, Passwordstate, Proton Pass |
| Local stores | OS keychain, KeePass, password-store |
| Non-sensitive configuration | Plaintext defaults |
See the provider comparison to choose a storage model. Cloud KMS providers require network access even though their ciphertext lives locally.
Start with CONTRIBUTING.md for development setup, tests, and documentation changes. Report bugs in the issue tracker.
Sponsored by
View all sponsors
(top 24 of 83)
929 followers · starred Sep 2026
153 followers · starred Jan 2026
401 followers · starred Dec 2025
959 followers · starred Feb 2026