Troubleshooting

September 14, 2026 ยท View on GitHub

Lint results did not change after an edit

Run lint without ESLint's --cache after changing a component, variant, theme, or dependency. That cache can skip unchanged files that use the changed code, leaving both errors and clean results stale.

npx eslint .

If you lint through a script, check that the script does not add --cache.

For a long-running editor integration, restart its lint process if results still look stale. The linter keeps project information in memory and checks file modification times during linting. Some checks are reused for about one second; theme discovery without components.json refreshes about every five seconds. There is no background watcher.

Changes inside a Tailwind plugin or config

After editing a JavaScript module imported by your Tailwind plugin or config, restart the linter or touch that plugin or config's entry file.

The Tailwind worker checks stylesheets and @plugin/@config entry files about once a second. It does not track JavaScript modules imported by those entries. Touching the entry rebuilds the theme in a fresh worker.

A component is not being checked

Check that components.json points to your UI directory and that the component's import resolves. For a different directory or package, set settings.shadcn.ui:

settings: {
  shadcn: {
    ui: "@/ds",
  },
}

This recognizes @/ds and @/ds/button. Also check that the file is included in your lint command and that a config override has not disabled the rule for it. See Settings and component discovery.

The linter cannot load the theme

Check the stylesheet path in components.json, its imports, and any @plugin or @config entries named in the warning. Without components.json, the linter looks for a stylesheet that imports Tailwind.

no-unknown-classes needs the project's Tailwind v4 and a readable theme for its full check. If loading fails, it uses a grammar fallback that checks less and provides no spelling suggestions. Fix the warning before relying on a clean result. Failed builds are retried on a later lint after five seconds; restarting the linter also clears the cached failure.

See theme discovery and fallback limits.