Skip to content
PluginStats

@pandacss/eslint-plugin weekly downloads statistics

By pandacss · npm · ESLint plugins

ESLint rules for Panda CSS

View on npm Fresh · Oct 17, 2026

@pandacss/eslint-plugin has 21,137 recorded weekly downloads on npm, a decrease of 4.5% over the past 30 days.

It ranks #740 of 2,251 tracked npm listings by weekly downloads.

Over 90 days, weekly downloads changed by +13.3%.

PluginStats has 121 daily observations since Jun 19, 2026; the latest is from Oct 17, 2026.

Weekly downloads
21,137
Official API · Oct 17, 2026
7-day growth
-38.9%
-13.5K weekly downloads
30-day growth
-4.5%
-1K weekly downloads
90-day growth
+13.3%
+2.5K weekly downloads
Rank
#740
Among tracked npm listings

About @pandacss/eslint-plugin

@pandacss/eslint-plugin

ESLint rules for Panda CSS that read your actual config. They know your tokens, recipes, patterns, and utilities — so they catch a typo'd token, a deprecated recipe, or a hardcoded color that should be a token. 🐼

There's no JSON to generate first. The plugin loads your panda.config.ts once and lints against it.

Beta. ESLint v9 flat config only. Most rules are report-only; a few add fixes/suggestions (noted below).

Install

You need ESLint 9 or later.

Setup

Add the recommended config to eslint.config.mjs. Loading your Panda config is async, and ESLint supports a flat config that resolves to a Promise, so await it (top-level await works in flat config):

That's it. The rules now run against your project's tokens, recipes, and utilities.

Top-level await works in eslint.config.mjs (or .js with "type": "module") and in eslint.config.ts (jiti ≥2 / Node ≥22.13 / Deno / Bun). In a CommonJS eslint.config.cjs, export a Promise instead — ESLint resolves it:

The recommended config scopes itself to JS/TS/JSX files and does not set a parser — use your project's existing parser. Most TS setups already have one via typescript-eslint, and framework projects via their ESLint preset (eslint-plugin-vue, astro-eslint-parser, etc.). Panda's rules read source text directly, so any parser that produces a Program works.

To lint framework files (.vue, .svelte, .astro), opt them in via files once their parser is configured:

Enabling opt-in rules / changing severities

recommended binds every rule under the @pandacss plugin, so add opt-in rules (or tweak severities) in your own rules block after it:

Monorepos

Call recommended once per Panda config and scope each to its package via files:

The Panda config is loaded once and cached; a long-running editor session won't pick up panda.config edits until ESLint restarts.

oxlint

The same rules run under oxlint via its ESLint-compatible JS plugins (alpha — needs oxlint + @oxlint/plugins). Point jsPlugins at the @pandacss/eslint-plugin/oxlint entry and enable the rules in .oxlintrc.json:

The entry auto-discovers panda.config.* from the working directory; set PANDA_CONFIG_PATH to point at a config in a non-standard location.

Single config per run. Unlike the ESLint flat config (where you compose several recommended({ configPath }) entries), oxlint loads a JS plugin once and binds one Panda project. For a custom path or a monorepo with several configs, write a tiny local plugin instead of using the entry, hardcoding the configPath:

oxlint.config.ts (via defineConfig from oxlint, Node ≥22.18) works the same way — plugins are still referenced by path, so the setup is identical.

Rules

These rules are on in recommended:

• no-invalid-token-paths (error) — a token reference that doesn't exist, e.g. token('colors.ghost'). • no-invalid-nesting (error) — a nested selector missing & (':hover' instead of '&:hover'), which Panda silently ignores. Suggests prefixing &. • file-not-included (error) — a file uses Panda but sits outside your config include, so its styles never get generated. • no-deprecated (warn) — use of a deprecated token, utility, recipe, or pattern. If you set deprecated: 'use X instead' in config, that message shows up in the lint error. • prefer-token (warn) — a raw value where a token exists, with the token to use. In recommended it's scoped to colors (the old no-hardcoded-color); widen it with categories (see below). • no-debug (warn) — a leftover debug: true. • extraction-diagnostics (warn) — parse or extraction problems Panda hit in the file.

The rest are off by default. Turn them on per project:

• no-important — !important in styles. • no-margin-properties — margin props; nudges you toward gap and layout patterns. • no-physical-properties — physical props that have logical equivalents (left → insetInlineStart). • no-shorthand-longhand-mix — a shorthand and one of its longhands in the same block (margin + marginLeft); the longhand wins regardless of source order. Takes ignore (groups to allow). • consistent-property-style — enforce one property style: Panda shorthand aliases (ml) or longhand canonical names (marginLeft). Autofixable. Takes style: 'shorthand' | 'longhand' (default longhand) and ignore. • prefer-text-style — a style object setting two or more typography properties that should be one textStyle token. • no-primitive-token — a primitive/core token where a semantic token exists for that category. Takes categories and allow.

Enable an opt-in rule like any other:

Options

no-deprecated takes a kinds option to narrow what it checks:

Valid kinds: tokens, utilities, recipes, patterns. All are checked by default.

prefer-token takes categories (which token categories to enforce; defaults to all) and allow (raw values to permit):

It lists the tokens that carry the value and offers each as an editor quick-fix, so you pick — semantic and primitive both shown (semantic first), themed tokens marked (themed). It matches equivalent forms (#FFF == #ffffff, 16px == 1rem):

Quick-fixes apply to each offending leaf — flat literals (color: '#f00'), values nested in conditions (color: { base: '#f00' }), and responsive-array elements (color: ['#f00', ...]). Coverage spans css(), style props, and recipe styles in cva() / sva() / styled('div', { ... }) (base, variants, compoundVariants).

no-primitive-token takes categories (which token categories to enforce; defaults to categories with semantic tokens) and allow (primitive token paths to permit):

This complements prefer-token: prefer-token maps hardcoded CSS values to tokens; no-primitive-token maps primitive tokens to semantic tokens. Categories without semantic tokens are skipped, so spacing primitives are allowed unless you define semantic spacing tokens.

Migrating from no-hardcoded-color

no-hardcoded-color is now prefer-token scoped to colors. Replace it with:

recommended already does this, so if you use configs.recommended there's nothing to change.

Settings…

Description from the npm listing.

  • eslint
  • eslintplugin
  • eslint-plugin
  • panda
  • pandacss
  • css-in-js

Where @pandacss/eslint-plugin sits in the listing

Each band is one page of 20. Weekly downloads on a log scale. Placement is projected from weekly downloads, so it can differ from the marketplace's own sort order. Hover a dot to see the listing.

All npm2,248 listings · 113 pages · page 37, #20 (overall #740)
All npm: every listing in weekly downloads order
PNG SVG
ESLint plugins252 listings · 13 pages · page 10, #1 (overall #181)
ESLint plugins: every listing in weekly downloads order
PNG SVG

Charts

Images: 30d · 1y · all time · 1600×900 dark

Adoption over time

@pandacss/eslint-plugin weekly downloads on npm, last 90 days: 21,137 weekly downloads as of Oct 17, 2026, +13.3% over 90 days.@pandacss/eslint-pluginWeekly downloads on npm · Last 90 days21,137downloads / week+13.3% over 90 days05K10K15K20K25K30K35K40KJul 19Aug 3Aug 18Sep 2Sep 17Oct 2Oct 17downloads / weekobservedarchived (Internet Archive)no observationsJul 20, 2026 – Oct 17, 2026 · 90 observations · Updated Oc…pluginstats.com
@pandacss/eslint-plugin weekly downloads on npm, last 90 days: 21,137 weekly downloads as of Oct 17, 2026, +13.3% over 90 days.
PNG SVG

7/30/90-day growth

@pandacss/eslint-plugin weekly downloads growth on npm: -38.9% over 7 days, -4.5% over 30 days, +13.3% over 90 days.@pandacss/eslint-pluginWeekly downloads growth on npm21,137downloads / week now7-day growth-13,461 weekly downloads-38.9%30-day growth-1,002 weekly downloads-4.5%90-day growth+2,479 weekly downloads+13.3%Growth vs. nearest observation to each baseline date · Updated Oct 17, 2026pluginstats.com
@pandacss/eslint-plugin weekly downloads growth on npm: -38.9% over 7 days, -4.5% over 30 days, +13.3% over 90 days.
PNG SVG

Ranking history

@pandacss/eslint-plugin npm ranking history: currently #740 (by weekly downloads).@pandacss/eslint-pluginnpm ranking · by weekly downloads · Last 90 days#740current rank#738#739#740#741#742Jul 20Aug 4Aug 19Sep 3Sep 18Oct 3Oct 18rankOct 18, 2026 – Oct 18, 2026 · 1 observations · Updated Oct 17, 2026pluginstats.com
@pandacss/eslint-plugin npm ranking history: currently #740 (by weekly downloads).
PNG SVG

Filled points are observed values; hollow points come from Internet Archive snapshots of the listing page. Dashed segments span periods with no observations — values between points are not interpolated.

Recent observations

Full history (121)
Recent weekly downloads observations for @pandacss/eslint-plugin
Date (UTC)Weekly downloadsChange vs. previous
21,137-1.6K
22,699+3.9K
18,755-8.6K
27,341-8.6K
35,9150
35,915+759
35,156+558
34,598-106
34,704+2.3K
32,392+1.4K
30,955+2.3K
28,673-6.7K
35,378+467
34,911—

Similar npm ESLint plugins plugins

Data source

Weekly downloads (trailing 7 complete days) come from the official npm downloads API. Downloads include CI and mirrors and are not equivalent to installs or users. npm publishes no ratings.

Listing: https://www.npmjs.com/package/@pandacss/eslint-plugin. First seen Oct 16, 2026; last successful collection Oct 18, 2026. See the methodology.