Fail-fast environment variable validation for Node.js applications.
@axshat.co.in/env-safe validates required environment variables at application startup, preventing silent runtime failures and misconfigurations.
- Fail-fast on missing or invalid environment variables
- Runtime validation with clear error messages
- TypeScript-first with strong typing
- Zero dependencies
- Lightweight and fast
- Works with Node.js, Next.js, Vite, Express
npm install @axshat.co.in/env-safeor
yarn add @axshat.co.in/env-safeimport { envSafe } from "@axshat.co.in/env-safe";
const env = envSafe({
DATABASE_URL: "string",
PORT: "number",
DEBUG: "boolean",
});const env = envSafe({
PORT: { type: "number", default: 3000 },
});const env = envSafe({
LOG_LEVEL: { type: "string", optional: true },
});const env = envSafe({
NODE_ENV: {
type: "enum",
values: ["development", "production"],
},
});const env = envSafe({
JWT_SECRET: {
type: "string",
validate: (value) => value.length >= 16,
},
});const env = envSafe({
DATABASE_URL: "string",
PORT: { type: "number", default: 3000 },
NODE_ENV: {
type: "enum",
values: ["development", "production"],
},
JWT_SECRET: {
type: "string",
validate: (v) => v.length >= 16,
},
});export type EnvType = "string" | "number" | "boolean" | "enum";export interface EnvRule<T = unknown> {
type: EnvType;
default?: T;
optional?: boolean;
values?: readonly string[];
validate?: (value: T) => boolean;
}export type EnvSchema = Record<string, EnvType | EnvRule>;export function envSafe<T extends EnvSchema>(
schema: T
): {
[K in keyof T]: any;
};Missing variable:
❌ Missing environment variable: DATABASE_URLInvalid value:
❌ Validation failed for: JWT_SECRETAccessing environment variables directly is unsafe:
process.env.API_KEY! // unsafeThis can lead to runtime crashes, silent bugs, and broken deployments.
@axshat.co.in/env-safe validates once, early, and clearly.
MIT © Akshat Singh
Issues and pull requests are welcome. Please keep the package simple, lightweight, and dependency-free.