Official Tailwind CSS linting with tailwind-lint — validates class usage, detects conflicts, and suggests canonical v4 class names.

Quick Start

Run the Tailwind linter:
This scans all files in apps/panel/src and reports Tailwind CSS issues.

What It Checks

1. Conflicting Classes

Detects when multiple classes apply the same CSS properties:

2. Non-Canonical Class Names (v4 Style)

Suggests v4-preferred canonical names:

3. Invalid Custom Classes

Reports classes that don’t exist in your Tailwind config.

4. CSS Conflicts

Flags when multiple utilities produce conflicting styles.

Running the Linter

Check for issues

Returns exit code 0 if clean, 1 if issues found.

Auto-fix issues

Automatically corrects most fixable issues.

Verbose mode for debugging

Shows detailed information about each issue.

JSON output

Useful for CI/CD integration and parsing results programmatically.

CI/CD Integration

Add to your deployment pipeline:
This ensures code quality standards before merging.

Why tailwind-lint?

  • Official Tailwind CSS linting tool
  • Version support — Works with Tailwind v3 & v4
  • Smart detection — Catches conflicting classes, not just syntax
  • Canonical names — Suggests v4-preferred class names
  • Auto-fix — Can automatically resolve many issues
  • Monorepo-friendly — Better path resolution than ESLint plugins

Installation & Configuration

Already Configured

The SolidStart admin panel has tailwind-lint pre-configured:
The --config flag points to the CSS entry file (app.css), which references the Tailwind config via @config.

Manual Installation

If setting up in another app:
Then configure in package.json:

Configuration File

tailwind-lint reads settings from:
  1. .vscode/settings.json — IDE-level Tailwind settings
  2. tailwind.config.ts/js — Referenced in your CSS file via @config
Example .vscode/settings.json:

Example Issues & Fixes

Conflicting Classes

Non-Canonical Names

Important Modifier Order

Notes

  • Style preferences — Some warnings suggest style preferences (e.g., canonical names). You can ignore if intentional.
  • Workspace settings — The tool reads your IDE settings from .vscode/settings.json if available.
  • Auto-fix limitations — Some complex conflicts require manual fixing.
  • Performance — Linting is fast even on large codebases; safe to run frequently.