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

@jst-stack/eslint-plugin-quality

v0.2.2

Published

Strict, composable TypeScript and React source-quality rules.

Readme

@jst-stack/eslint-plugin-quality

Strict, composable TypeScript and React quality rules without a required project architecture.

The preset checks correctness, React and Hooks semantics, unsafe TypeScript patterns, cognitive complexity, maintainability limits, explained suppressions, and component API smells. It does not require JST, FSD, DI, repositories, or specific directories.

Install

npm install --save-dev eslint typescript @jst-stack/eslint-plugin-quality

Recommended

import quality from '@jst-stack/eslint-plugin-quality'

export default [
	...quality.configs.recommended,
]

Type-aware

import quality from '@jst-stack/eslint-plugin-quality'

export default [
	...quality.configs.recommendedTypeChecked({
		projectService: true,
		tsconfigRootDir: import.meta.dirname,
	}),
]

Type-aware linting is explicit because it starts the TypeScript project service and costs more than syntax-only linting.

Configure

...quality.createConfig({
	limits: {
		cognitiveComplexity: 12,
		maxLineLength: 100,
		maxLinesPerFunction: 60,
		maxStatements: 24,
	},
	react: {
		booleanVariantNames: ['primary', 'danger'],
	},
})

Unknown policy keys and invalid limits fail while the ESLint config loads.

The default maintainability limits are 120 characters per line, 250 logical lines per file, 80 logical lines and 30 statements per function, 4 parameters, 3 nested blocks or callbacks, cyclomatic complexity 12, cognitive complexity 15, and expression complexity 5. The preset also rejects multiple statements per line, nested ternaries, parameter mutation, nested assignments, and unexplained ESLint suppressions.

If another preset already owns JavaScript, TypeScript, and React correctness rules, compose only JST quality rules:

export default existingConfig(
	...quality.createRulesConfig(),
)

Add architecture rules

Install the independent architecture package when the project also needs enforced layers and module boundaries:

npm install --save-dev @jst-stack/eslint-plugin-architecture
import architecture from '@jst-stack/eslint-plugin-architecture'
import quality from '@jst-stack/eslint-plugin-quality'

export default [
	...quality.configs.recommended,
	...architecture.configs.recommended,
]

Choose one quality preset: use recommended as a standalone base, recommendedTypeChecked() when type-aware rules are worth the extra lint cost, or createRulesConfig() when an existing base config already owns TypeScript and React correctness. Do not combine those three quality entry points.

Scope

Static analysis can catch deterministic code smells and likely bugs. It cannot prove business correctness, choose bounded contexts, judge semantic names, or replace review and behavioral tests.

Use @jst-stack/eslint-plugin-architecture when you also want enforceable layers, slice isolation, effect boundaries, DI rules, and workspace contracts.