home / skills / ehtbanton / claudeskillsrepo / env-file-generator

env-file-generator skill

/env-file-generator

This skill generates complete .env files and examples with structured sections, placeholders, and clear guidance for secrets across environments.

npx playbooks add skill ehtbanton/claudeskillsrepo --skill env-file-generator

Review the files below or copy the command above to add this skill to your agents.

Files (2)
SKILL.md
8.3 KB
---
name: env-file-generator
description: Generate properly structured .env environment files with common variables, documentation comments, and secure placeholder patterns. Triggers on "create .env file", "generate environment variables", "env file for", "dotenv template".
---

# Environment File Generator

Generate properly structured `.env` files with documented variables, secure placeholders, and environment-specific configurations.

## Output Requirements

**File Output:** `.env`, `.env.example`, `.env.local`, `.env.production`
**Naming Convention:** `.env.{environment}` for specific environments
**Format:** KEY=value pairs, one per line

## When Invoked

Immediately generate a complete `.env.example` file (safe to commit) with placeholder values and documentation. Note which values need real secrets.

## Env File Syntax Rules

### Basic Format
```bash
# Comment explaining the variable
VARIABLE_NAME=value
```

### Conventions
- SCREAMING_SNAKE_CASE for variable names
- No spaces around `=`
- Quote values with spaces: `APP_NAME="My Application"`
- No quotes needed for simple values: `PORT=3000`
- Comments with `#` at start of line
- Group related variables with blank lines and section headers

### Value Types
```bash
# Strings (quote if contains spaces or special chars)
APP_NAME="My App Name"
SIMPLE_STRING=myvalue

# Numbers (no quotes needed)
PORT=3000
TIMEOUT=30

# Booleans (lowercase strings)
DEBUG=true
ENABLE_FEATURE=false

# URLs (quote recommended)
DATABASE_URL="postgresql://user:pass@localhost:5432/db"
API_ENDPOINT="https://api.example.com/v1"

# Secrets (use placeholder in .env.example)
API_KEY=your_api_key_here
SECRET_KEY=generate_a_secure_key_here
```

## Standard Templates

### Web Application (Node.js/React)
```bash
# ===========================================
# Application Configuration
# ===========================================

# Application
NODE_ENV=development
APP_NAME="My Application"
APP_URL=http://localhost:3000
PORT=3000

# Debug & Logging
DEBUG=true
LOG_LEVEL=debug

# ===========================================
# Database Configuration
# ===========================================

# PostgreSQL
DATABASE_URL="postgresql://postgres:postgres@localhost:5432/myapp_dev"
DB_HOST=localhost
DB_PORT=5432
DB_NAME=myapp_dev
DB_USER=postgres
DB_PASSWORD=postgres

# Connection Pool
DB_POOL_MIN=2
DB_POOL_MAX=10

# ===========================================
# Redis / Cache
# ===========================================

REDIS_URL="redis://localhost:6379"
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=

CACHE_TTL=3600

# ===========================================
# Authentication
# ===========================================

# JWT
JWT_SECRET=your_jwt_secret_here_min_32_chars
JWT_EXPIRES_IN=7d
JWT_REFRESH_EXPIRES_IN=30d

# Session
SESSION_SECRET=your_session_secret_here

# ===========================================
# External Services
# ===========================================

# AWS
AWS_ACCESS_KEY_ID=your_aws_access_key
AWS_SECRET_ACCESS_KEY=your_aws_secret_key
AWS_REGION=us-east-1
AWS_S3_BUCKET=my-app-bucket

# Email (SMTP)
SMTP_HOST=smtp.mailtrap.io
SMTP_PORT=587
SMTP_USER=your_smtp_user
SMTP_PASSWORD=your_smtp_password
EMAIL_FROM="[email protected]"

# ===========================================
# Third-Party APIs
# ===========================================

# Stripe
STRIPE_PUBLIC_KEY=pk_test_xxxxxxxxxxxx
STRIPE_SECRET_KEY=sk_test_xxxxxxxxxxxx
STRIPE_WEBHOOK_SECRET=whsec_xxxxxxxxxxxx

# OAuth Providers
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
GITHUB_CLIENT_ID=your_github_client_id
GITHUB_CLIENT_SECRET=your_github_client_secret

# ===========================================
# Feature Flags
# ===========================================

FEATURE_NEW_UI=false
FEATURE_BETA_FEATURES=false
```

### Python/Django Application
```bash
# ===========================================
# Django Configuration
# ===========================================

# Core Settings
SECRET_KEY=your-secret-key-here-make-it-long
DEBUG=True
ALLOWED_HOSTS=localhost,127.0.0.1

# Application
DJANGO_SETTINGS_MODULE=config.settings.development
WSGI_APPLICATION=config.wsgi.application

# ===========================================
# Database
# ===========================================

DATABASE_URL="postgres://postgres:postgres@localhost:5432/django_dev"

# Or individual settings
DB_ENGINE=django.db.backends.postgresql
DB_NAME=django_dev
DB_USER=postgres
DB_PASSWORD=postgres
DB_HOST=localhost
DB_PORT=5432

# ===========================================
# Cache & Sessions
# ===========================================

REDIS_URL="redis://localhost:6379/0"
CACHE_BACKEND=django.core.cache.backends.redis.RedisCache

SESSION_ENGINE=django.contrib.sessions.backends.cache

# ===========================================
# Email
# ===========================================

EMAIL_BACKEND=django.core.mail.backends.smtp.EmailBackend
EMAIL_HOST=smtp.mailtrap.io
EMAIL_PORT=587
EMAIL_USE_TLS=True
EMAIL_HOST_USER=your_username
EMAIL_HOST_PASSWORD=your_password
DEFAULT_FROM_EMAIL="[email protected]"

# ===========================================
# Static & Media Files
# ===========================================

STATIC_URL=/static/
MEDIA_URL=/media/

# AWS S3 (for production)
AWS_ACCESS_KEY_ID=your_access_key
AWS_SECRET_ACCESS_KEY=your_secret_key
AWS_STORAGE_BUCKET_NAME=my-bucket
AWS_S3_REGION_NAME=us-east-1

# ===========================================
# Security
# ===========================================

CORS_ALLOWED_ORIGINS="http://localhost:3000,http://127.0.0.1:3000"
CSRF_TRUSTED_ORIGINS="http://localhost:3000"

# ===========================================
# Celery
# ===========================================

CELERY_BROKER_URL="redis://localhost:6379/1"
CELERY_RESULT_BACKEND="redis://localhost:6379/2"
```

### Docker / Microservices
```bash
# ===========================================
# Container Configuration
# ===========================================

# Docker
COMPOSE_PROJECT_NAME=myproject
DOCKER_BUILDKIT=1

# Registry
REGISTRY_URL=ghcr.io
IMAGE_TAG=latest

# ===========================================
# Service Ports
# ===========================================

API_PORT=8080
WEB_PORT=3000
DB_PORT=5432
REDIS_PORT=6379
RABBITMQ_PORT=5672
RABBITMQ_MANAGEMENT_PORT=15672

# ===========================================
# Service Configuration
# ===========================================

# API Service
API_HOST=0.0.0.0
API_WORKERS=4
API_TIMEOUT=30

# Database
POSTGRES_DB=appdb
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres_password_here

# Redis
REDIS_PASSWORD=

# RabbitMQ
RABBITMQ_DEFAULT_USER=rabbit
RABBITMQ_DEFAULT_PASS=rabbit_password_here

# ===========================================
# Observability
# ===========================================

# Logging
LOG_LEVEL=info
LOG_FORMAT=json

# Metrics
PROMETHEUS_PORT=9090
GRAFANA_PORT=3001

# Tracing
JAEGER_AGENT_HOST=jaeger
JAEGER_AGENT_PORT=6831
```

## Security Guidelines

### In .env.example (safe to commit)
```bash
# Use placeholder values that are clearly not real
API_KEY=your_api_key_here
SECRET_KEY=replace_with_secure_random_string
DATABASE_PASSWORD=change_this_password
```

### Never Commit
```bash
# Real secrets - add to .gitignore
.env
.env.local
.env.*.local
```

### Secret Generation Notes
Include comments for generating secrets:
```bash
# Generate with: openssl rand -hex 32
JWT_SECRET=your_secret_here

# Generate with: python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"
DJANGO_SECRET_KEY=your_secret_here
```

## Validation Checklist

Before outputting, verify:
- [ ] All variable names are SCREAMING_SNAKE_CASE
- [ ] No real secrets in .env.example
- [ ] Placeholder values are obvious (contain "your_", "_here", etc.)
- [ ] Related variables are grouped with section headers
- [ ] Comments explain non-obvious variables
- [ ] URLs are properly quoted
- [ ] Boolean values are lowercase strings

## Example Invocations

**Prompt:** "Create .env.example for a Next.js app with Prisma and Stripe"
**Output:** Complete `.env.example` with database, auth, and Stripe sections.

**Prompt:** "Generate env file for Django REST API"
**Output:** Complete `.env.example` with Django-specific settings and security config.

**Prompt:** "Environment variables for docker-compose microservices setup"
**Output:** Complete `.env` with service ports, database credentials, and container config.

Overview

This skill generates properly structured .env files, including .env.example, .env.local, and environment-specific .env.{environment} variants. It produces safe-to-commit examples with obvious placeholders, grouped sections, and documentation comments. The output follows common conventions (SCREAMING_SNAKE_CASE, quoted URLs, lowercase boolean strings) and highlights which values require real secrets.

How this skill works

When triggered by prompts like "create .env file" or "env file for <stack>", the skill emits a complete .env.example template tailored to the target stack (Node.js, Django, Docker, etc.). It inserts documented variables, secure placeholder patterns for secrets, environment-specific files, and comments with secret-generation tips. The generator validates naming conventions, groups related variables with headers, and flags values that must be replaced with real secrets.

When to use it

  • Bootstrapping a new project and needing a ready-to-use .env.example
  • Creating environment-specific config files for local, staging, and production
  • Preparing secure placeholder values and documentation for team onboarding
  • Generating dotenv templates for Node.js, Django, or microservice stacks
  • Producing .env variants for docker-compose and CI environments

Best practices

  • Keep .env.example safe to commit: use obvious placeholders like your_ or _here
  • Use SCREAMING_SNAKE_CASE for all variable names and no spaces around =
  • Quote values with spaces or URLs; leave simple numbers and booleans unquoted
  • Group related variables with section headers and blank lines for readability
  • Never commit real secrets—add .env and *.local to .gitignore and use secret stores

Example use cases

  • Create .env.example for a Next.js app with Prisma and Stripe (DB, auth, Stripe keys)
  • Generate Django REST API environment template with SECRET_KEY, DB, Celery, and Redis
  • Produce docker-compose .env with service ports, image tags, and registry credentials
  • Output .env.local for development and .env.production with production placeholders
  • Provide comments showing how to generate secrets (openssl, Django utilities)

FAQ

Will the example contain real secrets?

No. .env.example uses clear placeholder values and guidance; real secrets are never included.

How are boolean and numeric values formatted?

Numbers are unquoted (PORT=3000). Booleans are lowercase strings (DEBUG=true).

Can I request a template for a specific stack?

Yes. Request templates like "Next.js with Prisma", "Django REST API", or "docker-compose microservices" and the generator will tailor sections accordingly.