Type-Safe Environment Variables in Node.js with Zod
The Problem: Runtime Surprises const apiKey = process.env.STRIPE_SECRET_KEY; apiKey.startsWith('sk_'); // TypeError: Cannot read properties of undefined You deployed to production. A required env v...
Source: dev.to
The Problem: Runtime Surprises const apiKey = process.env.STRIPE_SECRET_KEY; apiKey.startsWith('sk_'); // TypeError: Cannot read properties of undefined You deployed to production. A required env var wasn't set. Your app crashes at the worst possible moment. The Solution: Validate at Startup Parse and validate environment variables when the process starts. Fail fast with clear errors instead of mysterious crashes later. import { z } from 'zod'; const envSchema = z.object({ // Required strings DATABASE_URL: z.string().url(), STRIPE_SECRET_KEY: z.string().startsWith('sk_'), NEXTAUTH_SECRET: z.string().min(32), // Optional with defaults NODE_ENV: z.enum(['development', 'test', 'production']).default('development'), PORT: z.coerce.number().default(3000), LOG_LEVEL: z.enum(['debug', 'info', 'warn', 'error']).default('info'), // Optional fields SENTRY_DSN: z.string().url().optional(), REDIS_URL: z.string().url().optional(), // Booleans from strings ENABLE_FEATURE_FLAGS: z.string().transform(