Import / Export
fnox can import secrets from various formats and export them for use in other tools.
Import from Files
From .env Files
bash
# Import from .env file
fnox import -i .env
# Import and specify provider
fnox import -i .env --provider ageExample .env file:
bash
DATABASE_URL=postgresql://localhost/mydb
API_KEY=sk_test_abc123
JWT_SECRET=super-secret-jwt-keyFrom stdin
bash
# Pipe from another source
cat .env | fnox import
# Using here-doc
fnox import << 'EOF'
DATABASE_URL=postgresql://localhost/mydb
API_KEY=sk_test_abc123
EOFFrom Different Formats
bash
# JSON
fnox import -i secrets.json json
# YAML
fnox import -i secrets.yaml yaml
# TOML
fnox import -i secrets.toml tomlExample secrets.json:
json
{
"DATABASE_URL": "postgresql://localhost/mydb",
"API_KEY": "sk_test_abc123"
}Example secrets.yaml:
yaml
DATABASE_URL: postgresql://localhost/mydb
API_KEY: sk_test_abc123Import Options
With Provider
Encrypt secrets during import:
bash
# Import and encrypt with age
fnox import -i .env --provider age
# Import and store in AWS Secrets Manager
fnox import -i .env --provider awsWith Filters
Import only specific secrets:
bash
# Import only secrets starting with "DATABASE_"
fnox import -i .env --filter "^DATABASE_"
# Import only API keys
fnox import -i .env --filter "^API_"With Prefix
Add a prefix to all imported secrets:
bash
# Add "MYAPP_" prefix to all secrets
fnox import -i .env --prefix "MYAPP_"
# DATABASE_URL becomes MYAPP_DATABASE_URL
# API_KEY becomes MYAPP_API_KEYCombining Options
bash
# Import DB secrets with encryption and prefix
fnox import -i .env \
--filter "^DATABASE_" \
--prefix "PROD_" \
--provider age
# DATABASE_URL → PROD_DATABASE_URL (encrypted with age)
# DATABASE_PASSWORD → PROD_DATABASE_PASSWORD (encrypted with age)Export Secrets
Export Formats
bash
# Export as .env format (default)
fnox export
# Export as JSON
fnox export --format json
# Export as YAML
fnox export --format yaml
# Export as TOML
fnox export --format tomlSave to File
bash
# Export to file
fnox export > .env
fnox export --format json > secrets.json
fnox export --format yaml > secrets.yaml
fnox export --format toml > secrets.tomlExport with Profile
bash
# Export production secrets
fnox export --profile production > .env.production
# Export staging secrets as JSON
fnox export --profile staging --format json > staging.jsonMigration Workflows
From .env to fnox with Encryption
bash
# 1. Set up age provider
cat >> fnox.toml << 'EOF'
[providers.age]
type = "age"
recipients = ["age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p"]
EOF
# 2. Import and encrypt all secrets
fnox import -i .env --provider age
# 3. Remove .env file (secrets now encrypted in fnox.toml)
rm .envFrom fnox to .env (for legacy tools)
bash
# Export current secrets to .env
fnox exec env | grep -v '^_' > .env
# Or use export command
fnox export > .envBetween Providers
bash
# 1. Export from AWS Secrets Manager
fnox export --profile production --format json > prod-secrets.json
# 2. Switch to age provider
cat >> fnox.toml << 'EOF'
[providers.age]
type = "age"
recipients = ["age1..."]
EOF
# 3. Re-import with new provider
fnox import -i prod-secrets.json json --provider age
# 4. Verify
fnox listTeam Onboarding
bash
# 1. Export example secrets (with dummy values)
fnox export --format json > secrets.example.json
# 2. Team member fills in real values
cp secrets.example.json secrets.json
# Edit secrets.json with real credentials
# 3. Import with encryption
fnox import -i secrets.json json --provider age
# 4. Delete plaintext file
rm secrets.jsonCI/CD Integration
GitHub Actions Secrets → fnox
yaml
# .github/workflows/setup-secrets.yml
jobs:
setup:
runs-on: ubuntu-latest
steps:
- name: Create secrets file
env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
API_KEY: ${{ secrets.API_KEY }}
run: |
cat > secrets.env << EOF
DATABASE_URL=$DATABASE_URL
API_KEY=$API_KEY
EOF
- name: Import to fnox
run: fnox import -i secrets.env --provider agefnox → Docker Compose
bash
# Export for docker-compose
fnox export > .env
# Use in docker-compose.yml
# env_file:
# - .envfnox → Kubernetes Secrets
bash
# Export as YAML
fnox export --format yaml > secrets.yaml
# Create Kubernetes secret
kubectl create secret generic app-secrets \
--from-env-file=<(fnox export)Best Practices
Always use providers when importing sensitive data:
bashfnox import -i .env --provider age # Good fnox import -i .env # Bad (stores as plaintext)Delete plaintext files after import:
bashfnox import -i .env --provider age rm .env # Remove plaintextUse filters for selective import:
bash# Import only production secrets fnox import -i all-secrets.env --filter "^PROD_"Verify imports:
bashfnox import -i .env --provider age fnox list # Check imported secretsExport to non-version-controlled files:
bashecho ".env" >> .gitignore fnox export > .env
Example: Migrating from direnv
bash
# 1. Export from direnv .envrc
cat .envrc | grep '^export' | sed 's/^export //' > .env
# 2. Import to fnox with encryption
fnox import -i .env --provider age
# 3. Verify
fnox list
# 4. Update .envrc to use fnox
cat > .envrc << 'EOF'
eval "$(fnox activate bash)"
EOF
# 5. Clean up
rm .envNext Steps
- Providers - Choose providers for your secrets
- Profiles - Organize secrets by environment
- Real-World Example - Complete project setup