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

@peerigon/configs

v12.0.0

Published

Configs for ESLint, Prettier, TypeScript & friends

Readme

configs

Best practice configs for ESLint, Prettier, TypeScript & friends. By Peerigon.

Version on NPM Version on JSR Semantically released Monthly downloads on NPM License

Installation

npm install @peerigon/configs  --save-dev

Also checkout the instructions for each respective config:

AI

Furthermore, this package also contains rules and instructions for AI coding agents that are based on the configurations.

If you want your AI coding agent to stick to our configs and coding principles, put this in your project-specific rules file (like CLAUDE.md, .cursor/rules.mdc, etc.):

**Important**: You **must** follow [these rules](./node_modules/@peerigon/configs/ai/rules.mdc) and its language-specific rules referenced in that file.

Philosophy

Linting, formatting and type-checking rules are always a balance between:

  • ease of reading
  • ease of refactoring
  • ease of writing.

We think that:

  • code is read more often than refactored
  • and refactored more often than written from scratch.

Our configs have been designed with these assumptions in mind.

Formatting

Formatting should follow the community standard. Our config is therefore based on Prettier's default config. Besides that it also:

  • sorts import statements
  • formats JSDoc comments
  • formats and sorts package.json fields
  • formats and sorts CSS properties
  • sorts Tailwind CSS class names

This makes git diffs smaller and reviewing them more focussed.

Linting

Linting should mostly catch bugs in the control flow and prevent security issues. Furthermore, it should enforce a modern, idiomatic and consistent code style that is easy to read and to refactor.

However, it should not nit-pick on formatting or favor certain language features where other options are equally ok. Every rule must be legitimized by objective criteria. A simple “I find it easier to read” is not enough.

Our linting rules:

  • are mostly based on recommended sets
  • use type information to catch logic bugs
  • highlight a11y problems
  • are less strict in tests

Type-checking

Type-checking should be rather strict because it is the foundation for safe and sound refactorings. If type-checking is too loose, it may lull the developer into a false sense of security. It should also prevent out-of-bounds errors when accessing arrays or objects.

For highly dynamic code or incompatible types, local exceptions to type safety and escape hatches need to be possible.

License

MIT

Sponsors