Zod Environment Variables Startup Validation
Parse and validate process.env at boot with a Zod schema so missing or malformed configuration fails fast before any request is served.
Code
import { z } from 'zod';
const EnvSchema = z.object({
NODE_ENV: z.enum(['development', 'test', 'production']).default('development'),
PORT: z.coerce.number().int().min(1).max(65535).default(3000),
DATABASE_URL: z.string().url(),
JWT_SECRET: z.string().min(32),
LOG_LEVEL: z.enum(['debug', 'info', 'warn', 'error']).default('info'),
});
function loadEnv() {
const parsed = EnvSchema.safeParse(process.env);
if (!parsed.success) {
for (const issue of parsed.error.issues) {
console.error('invalid env:', issue.path.join('.'), '-', issue.message);
}
process.exit(1);
}
return parsed.data;
}
export const env = loadEnv();
console.log('listening on port', env.PORT, 'in', env.NODE_ENV);Report a problem with this exampleOpens a pre-filled issue on GitHub.