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 🙏

© 2026 – Pkg Stats / Ryan Hefner

@navnathgunjal/envcheck

v1.0.0

Published

Zero-dependency, strongly typed environment variable validator for TypeScript

Downloads

11

Readme

envcheck 🛡️

A zero-dependency, tree-shakeable, strongly typed environment variable validator for TypeScript.

envcheck allows you to define a schema for your environment variables and guarantees that your app only starts if all variables are correct. It infers types automatically, returning a 100% type-safe config object context.

Features

  • Zero dependencies (lightweight)
  • Aggregated Error Reporting (shows all missing/invalid variables at once)
  • TypeScript First (perfect type inference)
  • ESM + CJS Support
  • Tree-shakeable

Installation

npm install @navnathgunjal/envcheck

Basic Usage

import { createEnv, string, number, boolean, enumType } from "envcheck";

// Define your schema and load variables from process.env
const env = createEnv({
  PORT: number(),
  DATABASE_URL: string(),
  NODE_ENV: enumType(["development", "production", "test"] as const),
  DEBUG: boolean(),
});

// `env` is now fully typed!
//
// const env: {
//   PORT: number;
//   DATABASE_URL: string;
//   NODE_ENV: "development" | "production" | "test";
//   DEBUG: boolean;
// }

console.log(`Server running on port ${env.PORT}`);

How It Works

createEnv checks process.env against your schema on startup. If any keys are missing or invalid, it throws an EnvValidationError containing a list of all validation failures, preventing your application from starting in a broken and unpredictable state.

Example error output if variables are missing:

EnvValidationError: Environment validation failed:
  - PORT: Missing value (Received: undefined)
  - DATABASE_URL: Missing or empty string (Received: undefined)
  - NODE_ENV: Invalid enum value. Expected one of: development, production, test (Received: staging)

Validators

  • string(): Ensures the variable exists and is a non-empty string.
  • number(): Parses the variable into a JavaScript Number. Throws if invalid.
  • boolean(): Parses "true", "1", "false", or "0" into a boolean.
  • enumType(values): Acts as an exact string literal matcher. Must pass a readonly array (as const) for correct type inference.

Note on standard JS module exports: If you prefer, enumType is also exported as enum using named exports, allowing you to use it conditionally or via alias, although enum is a reserved word in strict TS block scope.