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

@josepderiu/npm-minimum-age-validation

v1.0.1

Published

npm package age validator for supply chain security

Readme

npm-minimum-age-validation

Validate npm package age to protect your supply chain from very-new or unvetted packages.

Lightweight, fast, and configurable validator that can be used as a CLI (git/hooks / CI) or programmatically in Node.js projects.

[!NOTE] This repository provides a library and CLI to enforce a minimum age (hours) for npm packages. It's intended for build/CI and pre-commit hooks to raise an early warning when recently published packages appear in your dependency set.

Key features

  • Detect changed/added packages from git diffs or lockfiles
  • Query npm registry with caching and concurrency controls
  • Configurable minimum age requirement (default: 24h)
  • Trusted package patterns (supports wildcards like @org/*)
  • Programmatic API and standalone CLI (validate-packages)
  • Fast, async logging with Pino

Requirements

  • Node.js: >=20.0.0
  • npm: >=9.0.0

This package requires Node.js 20 or higher to run. If you need support for older Node.js versions, please open an issue.

Install

Install from npm (scoped package):

npm install @josepderiu/npm-minimum-age-validation --save-dev

You can also use the CLI without installing by running it with npx:

npx validate-packages validate

Quick CLI usage

The package installs a bin named validate-packages.

  • Validate with defaults (24h minimum age):
npx validate-packages validate
  • Validate with custom minimum age (48 hours):
npx validate-packages validate --min-age 48
  • Generate a default configuration file:
npx validate-packages config --output .npm-minimum-age-validation.json

CLI options (summary):

  • -c, --config <file> — load configuration from file
  • -a, --min-age <hours> — minimum package age in hours
  • -t, --trusted <packages> — comma-separated trusted package patterns
  • -f, --format <format> — output format (console | json)
  • --no-cache — disable registry response caching
  • --dry-run — run validation without blocking (useful for CI)
  • --registry <url> — override npm registry URL

Programmatic API

Use the library inside your Node.js scripts or CI helpers.

import { validatePackages, createDefaultConfig } from '@josepderiu/npm-minimum-age-validation';

const config = createDefaultConfig();
config.minimumAgeHours = 48; // 48h minimum age
config.trustedPackages = ['@my-org/*', '@types/*'];

const result = await validatePackages(config);
if (!result.success) {
  console.error(`${result.violations.length} packages too new`);
  process.exit(1);
}

Configuration

You can generate a default configuration with the config CLI command or programmatically via createDefaultConfig().

Common configuration options (high level):

  • minimumAgeHours (number) – minimum allowed age in hours for packages (defaults to 24)
  • trustedPackages (string[]) – package name patterns that are exempt from the age check
  • registry – registry configuration (url, concurrency, cacheEnabled)
  • output – output settings (format: console|json, verbose, logLevel)

[!TIP] Use --dry-run in CI to surface warnings without failing a pipeline while you tune rules.

Output

Supported formats: console (default) and json.

  • Console: human readable messages and per-violation lines when failures occur
  • JSON: machine-consumable object including summary and violations[] for easier automation

Development

Scripts are available via package.json:

  • npm run build — compile TypeScript to dist/
  • npm test — run unit tests with Jest
  • npm run lint — run ESLint
  • npm run format — run Prettier

Example:

# install deps
npm ci

# build and test
npm run build
npm test

Contributing & Support

Contributions and bug reports are welcome. Please open issues or PRs on the repository.

[!WARNING] This tool performs network requests to the npm registry. When used in CI, consider enabling or providing a registry cache and limiting concurrency to avoid throttling.

Security

This project is focused on supply-chain safety. It favors pinned dependencies and recommends running the security:check-versions npm script in CI to ensure devDependencies and dependencies are pinned.

Author

Josep Deriu ([email protected])