-
Notifications
You must be signed in to change notification settings - Fork 59
Environment Variables
Drift analyzes how your code accesses environment variables, classifies their sensitivity, and helps prevent security issues.
Drift scans your codebase to find:
-
All environment variable access β Every
process.env,os.environ, etc. - Sensitivity classification β Secrets, credentials, config
- Required vs optional β Variables with/without defaults
- Access patterns β Which code accesses which variables
drift env scanOutput:
π Scanning for environment variable access...
β Scan complete
Files scanned: 234
Variables found: 47
Access points: 156
Secrets detected: 8
Duration: 1234ms
β οΈ 8 secret variables detected
Run 'drift env secrets' to see details
drift envShows a summary of all discovered environment variables with sensitivity breakdown.
drift env listOutput:
π Environment Variables
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
DATABASE_URL (required)
8 access points in 3 files
JWT_SECRET (required)
4 access points in 2 files
PORT
2 access points in 1 files
# Only secrets
drift env list -s secret
# Only credentials
drift env list -s credential
# Only config
drift env list -s configdrift env secretsOutput:
π΄ Secret Environment Variables
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β οΈ These variables contain sensitive data. Ensure they are:
β’ Never committed to git
β’ Stored securely (vault, secrets manager)
β’ Rotated regularly
Variable Accessed By Classification
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
DATABASE_URL src/db/connection.ts:12 database-credential
JWT_SECRET src/auth/jwt.ts:8 auth-secret
STRIPE_SECRET_KEY src/payments/stripe.ts:15 api-key
AWS_SECRET_ACCESS_KEY src/storage/s3.ts:23 cloud-credential
SENDGRID_API_KEY src/email/sendgrid.ts:10 api-key
ENCRYPTION_KEY src/crypto/encrypt.ts:5 encryption-key
GITHUB_TOKEN src/integrations/github.ts:5 api-token
SLACK_WEBHOOK_SECRET src/webhooks/slack.ts:8 webhook-secret
drift env requiredShows variables that have no default and will crash if missing.
drift env var DATABASE_URLOutput:
π Variable: DATABASE_URL
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Sensitivity: secret
Has Default: no
Required: yes
Access Points: 3
Access Points:
src/db/connection.ts
Line 12: process.env
src/db/migrations.ts
Line 5: requireEnv (has default)
drift env file src/config.tsOutput:
π Environment Access: src/config.ts
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
src/config.ts
Variables: NODE_ENV, PORT, DATABASE_URL, REDIS_URL
β Sensitive: DATABASE_URL, REDIS_URL
Line 3: NODE_ENV via process.env
Line 5: PORT via process.env
Line 8: DATABASE_URL via process.env
drift env requiredShows variables that have no default and will crash if missing.
Drift automatically classifies variables by sensitivity:
Variables that could cause immediate security breach if exposed:
| Pattern | Examples |
|---|---|
*_SECRET* |
JWT_SECRET, CLIENT_SECRET |
*_KEY |
API_KEY, ENCRYPTION_KEY |
*_TOKEN |
ACCESS_TOKEN, GITHUB_TOKEN |
*PASSWORD* |
DB_PASSWORD, SMTP_PASSWORD |
*_PRIVATE* |
PRIVATE_KEY |
Variables that provide access to services:
| Pattern | Examples |
|---|---|
*_URL (with auth) |
DATABASE_URL, REDIS_URL |
*_CONNECTION* |
CONNECTION_STRING |
*_ACCOUNT* |
SERVICE_ACCOUNT |
*_CREDENTIAL* |
AWS_CREDENTIAL |
Configuration that doesn't provide access:
| Pattern | Examples |
|---|---|
PORT, HOST
|
PORT, API_HOST |
*_ENV |
NODE_ENV, APP_ENV |
*_LEVEL |
LOG_LEVEL |
FEATURE_* |
FEATURE_NEW_UI |
*_ENABLED |
DEBUG_ENABLED |
Drift detects environment variable access in all supported languages:
process.env.DATABASE_URL
process.env['API_KEY']
const { PORT } = process.envos.environ['DATABASE_URL']
os.environ.get('API_KEY')
os.getenv('PORT', '3000')System.getenv("DATABASE_URL")
System.getProperty("api.key")os.Getenv("DATABASE_URL")
os.LookupEnv("API_KEY")Environment.GetEnvironmentVariable("DATABASE_URL")
Configuration["ApiKey"]$_ENV['DATABASE_URL']
getenv('API_KEY')
env('PORT', 3000)std::env::var("DATABASE_URL")
std::env::var_os("API_KEY")drift_env({
action: "overview" | "list" | "secrets" | "required" | "variable" | "file",
variable?: string, // For action="variable"
file?: string, // For action="file"
sensitivity?: "secret" | "credential" | "config", // For action="list"
limit?: number // Max items to return
})Actions:
-
overviewβ Summary of all variables (default) -
listβ List all variables with optional sensitivity filter -
secretsβ Show only secret and credential variables -
requiredβ Show required variables without defaults -
variableβ Details for specific variable (requiresvariableparameter) -
fileβ Variables accessed by file pattern (requiresfileparameter)
drift env secrets --format jsonUse in CI to detect sensitive environment variables and ensure they're properly managed.
drift env list --format json
drift env secrets --format json
drift env required --format jsonAll commands support --format json for CI/CD integration.
Add to .gitignore:
.env
.env.local
.env.*.localCommit a template without values:
drift env export --format env-example > .env.example
git add .env.exampleCheck all required variables exist at startup:
// Drift detects this pattern
function requireEnv(name: string): string {
const value = process.env[name];
if (!value) throw new Error(`Missing required env: ${name}`);
return value;
}For production, use a secrets manager:
- AWS Secrets Manager
- HashiCorp Vault
- Google Secret Manager
- Azure Key Vault
Track when secrets were last rotated and set reminders.
- Check file is being scanned (not in
.driftignore) - Check language is supported
- Run
drift env scan --verbose
Add custom patterns in .drift/config.json:
{
"environment": {
"sensitivePatterns": {
"secret": ["*_PRIVATE_*", "MY_SECRET_*"],
"credential": ["*_CONN_*"],
"config": ["*_SETTING"]
}
}
}- Security Analysis β Sensitive data tracking
- Configuration β Drift configuration
- Quality Gates β Enforce security in CI
- Cortex V2 Overview
- Memory Setup Wizard
- Memory CLI
- Universal Memory Types
- Learning System
- Token Efficiency
- Causal Graphs
- Code Generation
- Predictive Retrieval
- Architecture
- Call Graph Analysis
- Impact Analysis
- Security Analysis
- Data Boundaries
- Test Topology
- Coupling Analysis
- Error Handling Analysis
- Wrappers Detection
- Environment Variables
- Constants Analysis
- Styling DNA
- Constraints
- Contracts
- Decision Mining
- Speculative Execution
- Watch Mode
- Trends Analysis
- Projects Management
- Package Context
- Monorepo Support
- Reports & Export
- Dashboard
- 10 Languages
- 21 Frameworks
- 16 ORMs
- 400+ Detectors
- 50+ MCP Tools
- 60+ CLI Commands
- 23 Memory Types