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

pnyx

v0.3.0

Published

A lightweight, zero-dependency configuration loader for Node.js applications, written in TypeScript.

Readme

🛠️ Pnyx - Type-Safe Configuration Loader

A lightweight, zero-dependency configuration loader for Node.js applications, written in TypeScript.

Load your configuration from environment variables based on a predefined schema, with type validation and parsing, into a strongly-typed, immutable configuration object.

Built with modern JavaScript and packaged in both CommonJS and ES Modules formats for seamless integration.

Fun fact: Made in under 3 hours, based on the premise of my existing configuration loader snippet from NiceBadge.

Why Pnyx? Just as the ancient Athenians gathered on the Pnyx hill to debate, establish laws, and bring order to their city, this library serves as the assembly point for your application's configuration. Define your essential settings and rules – the "laws" – within a clear schema, and pnyx ensures they are correctly gathered, validated, and assembled into the stable, foundational configuration your application needs to operate decisively.

Features

  • 🪶 Super Tiny — Runtime size of ~4.7KB, 17.5KB total artifact size.
  • 🗺️ Schema-Based Loading — Define the structure, types, and requirements of your config using a TypeScript object.
  • Validation & Parsing — Automatically parses environment variables into desired types and validates type consistency.
  • 🔀️ Default Values — Provide fallback values for missing environment variables.
  • 🤝 Static Constants — Merge your predefined constants alongside dynamically loaded environment variables.
  • ⚠️ Customizable Error Handling — Callbacks (onWarn and onError) to customize how errors and warnings are handled.
  • 🧊 Immutability — Frozen final configuration object prevents accidental modifications.
  • 💎 Zero External Dependencies — Written in TypeScript, without external libraries.

How to use?

1. Install

npm install pnyx

2. Define your schema and constants

With TypeScript:

// config.ts
import {Pnyx, ConfigSchema, PnyxConfig} from "pnyx";

// Your configuration, loaded and built from environment variables
const schema = {
	app: {
		port: {type: 'number', required: true},
		host: {default: 'localhost'},
	},
	database: {
		host: {varName: "DB_HOST", default: "localhost"},
		user: {varName: "DB_USER", required: true},
		pass: {varName: "DB_PASS", required: true},
	},
} as const satisfies ConfigSchema;

// Your own properties that will be attached to the config
const constants = {
	serviceName: "MyCoolService",
	apiVersion: 1,
} as const;

export const config: PnyxConfig<typeof schema, typeof constants> = Pnyx(schema, {constants});

Without TypeScript (CommonJS)

// config.ts
const {Pnyx} = require("pnyx")

// Your configuration, loaded and built from environment variables
const schema = {
	app: {
		port: {type: 'number', required: true},
		host: {default: 'localhost'},
	},
	database: {
		host: {varName: "DB_HOST", default: "localhost"},
		user: {varName: "DB_USER", required: true},
		pass: {varName: "DB_PASS", required: true},
    },
};

// Your own properties that will be attached to the config
const constants = {
    serviceName: "MyCoolService",
    apiVersion: 1,
};

module.exports = Pnyx(schema, {constans});

3. Use in your code

// todo