fnox 1.16.1

A flexible secret management tool supporting multiple providers and encryption methods
Documentation
---
layout: home

hero:
  name: fnox
  text: Fort Knox for your secrets
  tagline: Manage secrets with encryption or cloud providers - or both!
  image:
    src: /logo.svg
    alt: fnox
  actions:
    - theme: brand
      text: Get Started
      link: /guide/what-is-fnox
    - theme: alt
      text: View on GitHub
      link: https://github.com/jdx/fnox

features:
  - icon: 🔐
    title: Multiple Provider Support
    details: Works with age, AWS KMS/SM, Azure, GCP, 1Password, Bitwarden, Bitwarden Secrets Manager, Infisical, password-store, HashiCorp Vault, and more.
  - icon: 📝
    title: Secrets in Git (Encrypted)
    details: Store encrypted secrets in version control with age, AWS KMS, Azure KMS, or GCP KMS.
  - icon: ☁️
    title: Cloud Secret Storage
    details: Reference secrets stored in AWS Secrets Manager, AWS Parameter Store, Azure Key Vault, GCP Secret Manager, or Vault.
  - icon: 🔄
    title: Shell Integration
    details: Automatically load secrets when you cd into a directory with a fnox.toml file.
  - icon: 🎯
    title: Multi-Environment Support
    details: Use profiles to manage different secrets for dev, staging, and production.
  - icon: 🛠️
    title: Developer Friendly
    details: Simple TOML config, easy CLI, and smooth integration with your existing workflow.
---

## Quick Example

```bash
# Initialize fnox in your project
fnox init

# Set a secret (stores it encrypted in fnox.toml)
fnox set DATABASE_URL "postgresql://localhost/mydb"

# Get a secret
fnox get DATABASE_URL

# Run commands with secrets loaded as env vars
fnox exec -- npm start

# Enable shell integration (auto-load secrets on cd)
eval "$(fnox activate bash)"  # or zsh, fish — see docs for Nushell
```

## How It Works

fnox uses a simple TOML config file (`fnox.toml`) that you check into git. Secrets are either:

1. **Encrypted inline** - The encrypted ciphertext lives in the config file
2. **Remote references** - The config contains a reference (like "my-db-password") that points to a secret in AWS/1Password/etc.

You configure providers (encryption methods or cloud services), then assign each secret to a provider. fnox handles the rest.

```toml
# fnox.toml
[providers]
age = { type = "age", recipients = ["age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p"] }

[secrets]
DATABASE_URL = { provider = "age", value = "YWdlLWVuY3J5cHRpb24uLi4=" }  # ← encrypted ciphertext, safe to commit
API_KEY = { default = "dev-key-12345" }  # ← plain default value for local dev
```

## Supported Providers

### 🔐 Encryption (secrets in git, encrypted)

- **age** - Modern encryption (works with SSH keys!)
- **aws-kms** - AWS Key Management Service
- **azure-kms** - Azure Key Vault encryption
- **gcp-kms** - Google Cloud KMS

### ☁️ Cloud Secret Storage (remote, centralized)

- **aws-ps** - AWS Parameter Store
- **aws-sm** - AWS Secrets Manager
- **azure-sm** - Azure Key Vault Secrets
- **gcp-sm** - Google Cloud Secret Manager
- **bitwarden-sm** - Bitwarden Secrets Manager
- **vault** - HashiCorp Vault

### 🔑 Password Managers & Secret Services

- **1password** - 1Password CLI
- **bitwarden** - Bitwarden/Vaultwarden
- **infisical** - Infisical secrets management

### 💻 Local Storage

- **keychain** - OS Keychain (macOS/Windows/Linux)
- **password-store** - GPG-encrypted password store (Unix pass)
- **plain** - Plain text (for defaults only!)