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

peer-ai-eslint-config

v1.0.0-next.19

Published

ESLint settings for the stack profiles a project lists in peer-ai.config.json

Readme

peer-ai-eslint-config

The ESLint settings for the stack profiles a project lists in peer-ai.config.json (RFC 0006).

// eslint.config.js
import peerAi from "peer-ai-eslint-config";

export default [...peerAi(), /* your own settings */];

For each part of the project, peerAi() turns on the automatic rules its profiles enforce with ESLint: at the project's stage, with its traits and architecture, and with any value it changed in standards.overrides. Rules set aside in standards.exceptions are left out. While standards.enforcement is report, or a rule is in standards.deferred, its rules are warnings instead of errors (RFC 0011). Your own settings come after, so they win where both set the same rule.

  • Peer AI's rules run under Peer AI's names, such as peer-ai/max-depth or peer-ai-jsx-a11y/alt-text. So they sit beside the plugins and settings your project has, whatever they are: your own jsx-a11y or no-restricted-syntax neither clashes with them nor replaces them. To leave a line alone, name Peer AI's rule and say why: // eslint-disable-next-line peer-ai/max-depth -- the booking rules nest one level deeper.
  • Install it beside ESLint and the plugins your profiles use. eslint and typescript-eslint are peer dependencies, and the other plugins are optional ones. ESLint 9.30 or later works, and ESLint 10. An Expo app can stay on ESLint 9, which Expo's own lint settings (eslint-config-expo) still target; its plugins crash on ESLint 10.
  • It's an ES module. Import it from eslint.config.mjs, or from eslint.config.js in a package whose package.json has "type": "module". In a CommonJS package, such as an Expo app, importing it from a .js file works, but Node warns on every lint run, so name the file eslint.config.mjs.
  • It finds peer-ai.config.json from the folder ESLint runs in, or above it, and every file pattern is relative to that folder. So an eslint.config.js at the root and one inside a part both work, and linting from a part's folder works too.
  • Each part gets its own rules. A part nested inside another is left to its own settings.
  • Rules that need type information run on TypeScript files only, through the project's tsconfig files. Each TypeScript file must be in one: a file outside every tsconfig, such as a loose script, fails to lint. Add it to a tsconfig, or ignore it in your own settings.

peer-ai doctor checks your ESLint config uses these settings, and says what to add when it doesn't.

The plugins each profile needs

Install eslint and typescript-eslint always, and the plugins for the profiles you list. A profile needs the plugins of the profiles it builds on too.

| Profile | Plugins | |---------|---------| | typescript, node, express, nestjs, fastify | none beyond typescript-eslint | | react | eslint-plugin-react-hooks, eslint-plugin-react-dom, eslint-plugin-jsx-a11y-x | | react-native | the React plugins | | next | the React plugins, and @next/eslint-plugin-next |

If a plugin is missing, peerAi() says which one to install.

Proven against ESLint

Every rule these settings turn on has an example that must fail and one that must pass. The tests run ESLint on both, through the same settings a project gets, and again with a changed value where the rule has one. A setting that can't fail can't ship.