npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

validation-env

v2.0.3

Published

Manages the environment variables necessary for the application. Loads environment variables from the .env file and checks that all required variables are defined.

Readme

validation-env

A powerful and type-safe environment variable manager for Node.js applications with validation, type conversion, and comprehensive error handling.

Requirements

  • Node.js >= 20
  • ESM enabled (this package is ESM)

Installation

npm i validation-env
# ou
yarn add validation-env

Concept

You define a schema of environment variables (name and type) and call loadEnv(schema). The function loads .env (via dotenv), validates, coerces types, and returns a strongly-typed object based on the schema using TypeScript inference.

Supported types

  • string
  • number
  • boolean (only "true"/"false", case-insensitive)
  • email
  • url

Optional fields: set optional: true. For empty strings, use allowEmpty: true.

Quick start

Optionally create an env.schema.ts file in your project:

// env.schema.ts
import { EnvSchema } from 'validation-env';

export const envSchema:EnvSchema = [
  { name: 'PORT', type: 'number' },
  { name: 'NODE_ENV', type: 'string' },
  { name: 'DATABASE_URL', type: 'url' },
  { name: 'API_KEY', type: 'string' },
  { name: 'DEBUG', type: 'boolean', optional: true },
] 

In your code:

import { loadEnv } from 'validation-env';
import { envSchema } from './env.schema';

const env = loadEnv(envSchema);

// Types inferred from schema
// env.PORT: number
// env.NODE_ENV: string
// env.DATABASE_URL: string
// env.API_KEY: string
// env.DEBUG?: boolean

Or define the schema inline:

import { loadEnv } from 'validation-env';

const env = loadEnv([
  { name: 'PORT', type: 'number' },
  { name: 'NODE_ENV', type: 'string' },
  { name: 'DATABASE_URL', type: 'url' },
  { name: 'API_KEY', type: 'string' },
  { name: 'DEBUG', type: 'boolean', optional: true },
] as const);

Example .env

PORT=3000
NODE_ENV=production
DATABASE_URL=https://db.example.com
API_KEY=super-secret
DEBUG=false

Validation rules

  • boolean: only "true" or "false" (case-insensitive). Any other value throws.
  • number: numeric values (integer or decimal). Infinite/NaN will throw.
  • email: simple RFC5322-lite validation.
  • url: validated using new URL(value).
  • string: by default empty strings are not allowed; use allowEmpty: true to allow.
  • optional: true: variable can be absent; when present, it is still validated.

Options

loadEnv(schema, {
  dotenvPath: '.env', // custom path
  override: false     // whether to override already-set process variables
});

Errors and messages

If validation fails, an AggregateError is thrown containing all issues found:

Environment validation failed:
- PORT must be a valid number (received: "abc")
- DEBUG must be "true" or "false" (received: "1")
- Missing required env var: API_KEY

Handle the error in your app bootstrap:

try {
  const env = loadEnv(envSchema);
  // start app…
} catch (e) {
  console.error(String(e));
  process.exit(1);
}
type SupportedKind = 'string' | 'number' | 'boolean' | 'email' | 'url'

License

MIT © Dhmeson Noronha Araujo