Skip to main content

Import & Export

zopp makes it easy to work with .env files and migrate secrets between environments. This guide covers importing, exporting, and common workflows.

Exporting Secrets

Export all secrets from an environment to a .env file:

# Export to file
zopp secret export -o .env

# Export to stdout
zopp secret export

# Export from specific environment
zopp secret export -w myworkspace -p myproject -e production -o prod.env

The output format is standard .env:

# .env
DATABASE_URL=postgresql://user:pass@localhost/db
API_KEY=sk_live_abc123
REDIS_URL=redis://localhost:6379
danger

Exported files contain plaintext secrets. Keep them secure and never commit them to version control.

Export Options

# Export all secrets (default)
zopp secret export -o .env

# Secrets are sorted alphabetically by key

Importing Secrets

Import secrets from a .env file:

# Import from file
zopp secret import -i .env

# Import from stdin
cat .env | zopp secret import

# Import to specific environment
zopp secret import -w myworkspace -p myproject -e production -i prod.env

Supported Formats

zopp supports standard .env format:

# Comments are ignored
# Blank lines are ignored

SIMPLE_KEY=value
QUOTED_VALUE="value with spaces"
SINGLE_QUOTED='value with spaces'
MULTILINE="line1\nline2"

# No interpolation - ${VAR} is stored literally
LITERAL=${OTHER_VAR}

Import Behavior

  • Existing keys are updated - If a key already exists, its value is replaced
  • New keys are created - Keys that don't exist are added
  • Keys not in file are preserved - Import doesn't delete existing secrets

Common Workflows

Copy Secrets Between Environments

# Export from staging
zopp secret export -e staging -o staging.env

# Import to production
zopp secret import -e production -i staging.env

Migrate from .env Files

Moving from file-based secrets to zopp:

# 1. Create the environment
zopp environment create development -w myworkspace -p myproject

# 2. Import existing .env file
zopp secret import -w myworkspace -p myproject -e development -i .env

# 3. Verify
zopp secret list -w myworkspace -p myproject -e development

Seed New Environment

# Export template from development
zopp secret export -e development -o template.env

# Edit template with production values
vim template.env

# Import to production
zopp secret import -e production -i template.env

Sync Local Development

# Pull latest secrets from zopp
zopp secret export -e development -o .env

# Start your application
npm start # or docker-compose up, etc.

Backup Secrets

# Export all environments
zopp secret export -e development -o backup/dev.env
zopp secret export -e staging -o backup/staging.env
zopp secret export -e production -o backup/prod.env

# Encrypt the backup
tar -czf secrets-backup.tar.gz backup/
gpg -c secrets-backup.tar.gz
rm -rf backup/ secrets-backup.tar.gz

Using zopp run

Instead of exporting to a file, inject secrets directly into a command:

# Run with secrets as environment variables
zopp run -- npm start

# Override environment
zopp run -e production -- npm start

# One-off commands
zopp run -- printenv DATABASE_URL

This is more secure than exporting because secrets never touch the filesystem.

Best Practices

1. Use zopp run When Possible

# Preferred: secrets never written to disk
zopp run -- npm start

# Avoid if possible: creates file with plaintext secrets
zopp secret export -o .env && npm start

2. Add .env to .gitignore

# .gitignore
.env
.env.*
*.env

3. Use Environment-Specific Files

# Good
zopp secret export -e development -o .env.development
zopp secret export -e production -o .env.production

# Then source the right one
source .env.development

4. Clean Up After Use

# Export, use, delete
zopp secret export -o .env
./my-script.sh
rm .env

Or use a subshell:

(zopp secret export -o .env && ./my-script.sh; rm -f .env)

5. Validate Before Import

# Preview what would be imported
cat .env | head -20

# Check for sensitive values you might not want to store
grep -E "TOKEN|SECRET|KEY" .env

Troubleshooting

Import Fails Silently

Make sure the file format is correct:

# Check for BOM or weird characters
file .env
hexdump -C .env | head

# Convert from Windows line endings if needed
dos2unix .env

Special Characters in Values

Use quotes for values with special characters:

# Good
PASSWORD="p@ss!word#123"

# May cause issues
PASSWORD=p@ss!word#123

Environment Variables Not Set

When using zopp run, ensure secrets are actually exported:

# Debug: print all environment variables
zopp run -- env

# Check specific variable
zopp run -- printenv DATABASE_URL

Next Steps