# What changed in oxlint-tailwindcss

> 164 changes in oxlint-tailwindcss 0.5 to 1 from its official release notes, upgrade guides and advisories: 28 breaking, 1 security, 28 new APIs and options. Each one cited. Sources checked 2026-10-18. HTML: https://unstale.sh/npm/oxlint-tailwindcss/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## oxlint-tailwindcss 1

### Breaking changes

- The declared Node.js range is now ^20.19.0 || >=22.12.0, matching oxlint’s requirement; older Node 20 releases are not supported. (1.14.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.14.0)
- The release requires Node.js `^20.19.0 || >=22.12.0`. (1.14.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.14.0)
- The supported minimum is now Tailwind CSS v4.1.15; versions 4.1.0–4.1.14 receive a clear `designSystemUnavailable` instead of a raw engine error. (1.14.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.14.0)
- Bounds consecutive per-entry-point worker failures: after three, failures become sticky and the run fails fast; success clears the budget and the sticky state expires after a backoff window. (1.11.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.11.0)
- Engines older than v4.1 and major-version mismatches fail as designSystemUnavailable; newer minor versions and minor build drift warn and lint best-effort. (1.9.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.9.0)
- The autofix wraps templates into the block convention, using source-line indentation and re-wrapping only over-budget lines while leaving conforming lines verbatim. (1.8.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.8.0)
- The rule measures the longest individual line instead of the raw multiline template length, so splitting a string across lines can satisfy printWidth. (1.8.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.8.0)
- The rule now reads selectors only when collecting classes declared in project CSS, so nine previously accepted false positives, including com, css, and 5rem, are reported as unknown. (1.7.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.7.0)
- Declaration-service failures now surface through no-conflicting-classes and no-unknown-classes instead of silently falling back to weaker behavior. (1.6.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.6.0)
- Reports one diagnostic per collapsible group instead of one per matching family; CI diagnostic counts may drop. (1.5.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.5.0)
- Recognizes 37 additional collapsible patterns, so patterns that were previously silent can now report. (1.5.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.5.0)
- With an entry point, checks shorthand merges against emitted declarations; without one, sizing merges only values that cannot come from a per-axis namespace. (1.5.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.5.0)
- Now reports the `(--x)` shorthand spelling of arbitrary values, as well as the bracketed form. (1.5.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.5.0)
- With an entry point configured, orders project-defined variants according to their actual selectors, moving generated-box variants innermost and treating combinators as reordering barriers. (1.4.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.4.0)
- Reports same-value class pairs as redundant, including numeric spellings that normalize to the same value; these findings can fail CI runs that previously passed. (1.4.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.4.0)
- The rule runs unconditionally without settings.tailwindcss.entryPoint; any entryPoint passed as a rule option is ignored. (1.3.5) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.3.5)
- Flags @container and @container-size together as conflicting container-type markers. (1.3.1) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.3.1)
- The rule now converts negative physical utilities, which may produce new reports for projects using them. (1.3.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.3.0)
- The rule now converts negative logical utilities, which may produce new reports for projects using them. (1.3.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.3.0)
- The no-op entryPoint option was dropped; configurations that set it should remove it. (1.3.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.3.0)
- Strict mode now sorts prefixed groups stably instead of collapsing them to the same priority. (1.2.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.2.0)
- Under a project prefix, correctly prefixed utilities are valid; unprefixed utilities are reported with a missingPrefix message and a quick-fix that adds the prefix. Component classes remain valid without a prefix. (1.2.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.2.0)
- Merges utilities with the same variant prefix, including stacked and arbitrary variants, while leaving different-variant and mixed-importance pairs untouched. Same-variant stacks now report and autofix. (1.1.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.1.0)
- DS-dependent rules now report one actionable designSystemUnavailable diagnostic per file for fatal design-system failures instead of silently skipping. (1.0.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.0.0)
- Filesystem auto-detection and the global last-loaded-path fallback are gone; configurations must declare entryPoint explicitly. (1.0.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.0.0)
- An explicit entryPoint is now required. Use a string for a single project or an array of { files, use } mappings for monorepos; the legacy string-array shape is removed. (1.0.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.0.0)
- Default worker timeouts increase to 60 seconds for initialization and 30 seconds per request, reducing failures on slow CI. (1.0.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.0.0)

### Security

- The cache is namespaced per user, created with mode 0o700, and schema-validates reads; corrupt or poisoned files are removed and recomputed. (1.3.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.3.0)

### New APIs and options

- When enabled, reports canonical forms that also set variables other utilities read, with an editor-applicable suggestion and no autofix; it is off by default. (1.15.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.15.0)
- The new jsx value wraps JSX attribute strings in place; the default never preserves the previous behavior, and JavaScript strings still only report. (1.15.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.15.0)
- The new sizing option converts widths and heights, including min/max forms and size utilities, when enabled; it is off by default. (1.15.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.15.0)
- Adds tailwindcss() for registering the plugin and its recommended rules through extends in oxlint.config.ts or a published shared config. (1.15.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.15.0)
- The new option reports canonical forms that mean something different in the project, naming both variants and providing no fix; it is off by default. (1.14.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.14.0)
- Adds `allowVariables: 'none' | 'runtime' | 'all'` to allow pure CSS-variable references; the default remains `'none'`, and runtime mode consults the design system. (1.14.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.14.0)
- Adds an experimental, opt-in rule that reports native elements whose classes rebuild a configured component; it has no autofix. (1.14.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.14.0)
- Adds an opt-in rule that reports Tailwind default-palette colors in projects with their own theme colors, naming the project's colors as alternatives. (1.14.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.14.0)
- Adds an opt-in rule that reports runtime-built classes Tailwind will not generate; the recommended README config enables it as an error. (1.14.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.14.0)
- Accepts a per-rule `entryPoint`; with a theme that defines its own colors, reports name those colors as replacements. Without an entry point or on stock Tailwind, the message is unchanged. (1.14.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.14.0)
- Map a custom callee to a structured extractor such as tv, cva, classed, or flat so wrapped configuration receives deep extraction across all 24 rules. (1.13.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.13.0)
- Adds a group option for wrapLines: all, with newLine as the default; emptyLine separates variant runs with blank lines, and never skips grouping. (1.11.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.11.0)
- Adds opt-in width-based autofixing for template literals: overWidth wraps only lines exceeding printWidth, while all normalizes multiline or over-width templates. (1.11.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.11.0)
- Overrides the design-system disk-cache location so developers can pin it to a controlled path in CI or sandboxed builds. (1.11.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.11.0)
- Overrides sort, canonicalize, and declaration worker services' per-request timeout, allowing slow but functional machines or CI runners more time to complete requests. (1.11.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.11.0)
- Adds regex patterns matched against JSX attribute names, additive to the exact attributes list; invalid regex sources are skipped. (1.11.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.11.0)
- Set this to true to downgrade future-major and major-drift fatal errors to a warning and lint against an untested engine; engines older than v4.1 remain fatal. (1.9.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.9.0)
- Adds the float-left/float-start, clear-left/clear-start, and text-left/text-start pairs; verifies suggested classes exist when a design system is available. (1.5.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.5.0)
- Adds allow patterns to silence every pair involving a matching class or a specific two-class combination. (1.4.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.4.0)
- Adds reportRedundant: false to opt out of findings for class pairs that declare the same property with the same value. (1.4.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.4.0)
- Adds an allowlist option; it defaults to no-op behavior, so existing configurations keep working. (1.0.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.0.0)
- Adds a direction option; it defaults to no-op behavior, so existing configurations keep working. (1.0.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.0.0)
- Adds an allowlist option; it defaults to no-op behavior, so existing configurations keep working. (1.0.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.0.0)
- Adds a direction option; it defaults to no-op behavior, so existing configurations keep working. (1.0.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.0.0)

### Performance

- After precomputing, the plugin removes its own cache files unused for 30 days; cache hits refresh file dates at most once a day, and other directory files are left alone. (1.14.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.14.0)
- Persists canonicalization results to disk across oxlint runs, reducing repeated worker round-trips for dynamic classes. (1.4.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.4.0)
- Keeps an LRU-bounded warm worker for each CSS entry point in monorepos, avoiding repeated design-system warmups when linting files from different packages. (1.4.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.4.0)

### Behavior and default changes

- With the default direction of both, the rule now converts block-axis utilities using Tailwind 4.2 logical utilities; without an entry point, these are suggested but never autofixed. (1.15.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.15.0)
- The rule now converts block-axis utilities back to physical utilities and converts sizes when sizing is enabled; it does not touch display utilities. (1.15.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.15.0)
- String operands in `+` concatenations are now linted; complete classes receive rules and fixes, while glued fragments stay unchanged and runtime classes can be reported by `no-dynamic-classes`. (1.14.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.14.0)
- With an entry point and project-defined colors, the diagnostic now names the theme colors developers can use instead of a hardcoded value. (1.14.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.14.0)
- Typo suggestions use an edit allowance scaled to class length, reducing wrong quick-fixes on short classes while retaining close suggestions such as `flxe` to `flex`. (1.14.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.14.0)
- The first rule linting each file now reports unknown setting keys, wrong value types, invalid regular-expression patterns, and unknown callee extractor kinds once per file. (1.14.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.14.0)
- The autofixer no longer inserts whitespace that splits a class glued to a template interpolation; such cases are warn-only. (1.11.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.11.0)
- Becomes design-system optional; when entryPoint is configured, the all-mode newLine and emptyLine fixers consult it to strip the project prefix before grouping variants. (1.11.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.11.0)
- The plugin resolves the Tailwind engine per CSS entry point from the consumer's project, so monorepo packages can use their own pinned versions and avoid version-drift lint results. (1.9.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.9.0)
- Derives deprecated v3 renames from the design system and owns those diagnostics, including renames absent from the former hardcoded table. (1.5.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.5.0)
- Scans arbitrary values for color literals, including shorthands, inset utilities, and arbitrary properties; quoted strings and url() contents are excluded. (1.5.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.5.0)
- Compiles variant chains to detect invalid variants and off-scale values that produce no CSS; suggestions are checked against the design system. (1.5.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.5.0)
- Autofix rewrites v3 background and object-position spellings to their v4 axis-first form. (1.3.1) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.3.1)
- Tailwind v4 project prefixes are detected automatically from entryPoint and validated in the correct position, with no extra configuration. (1.2.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.2.0)

### Tooling

- Adds a plugin that starts the project's `oxlint --lsp` language server and checks edited files for errors before Claude finishes, sending Claude back once if errors are found. (1.14.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.14.0)
- Adds an opt-in rule that reports hardcoded values numerically equal to named design-system tokens and suggests the token; it is report-only and has no autofix. (1.6.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.6.0)
- Now suggests full shorthands for axis pairs: `px-* py-*` to `p-*` and `mx-* my-*` to `m-*`. (1.1.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.1.0)
- Rules that take options now declare meta.defaultOptions, allowing tooling such as IDEs and doc generators to read rule defaults without running the rule. (1.0.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.0.0)

### Fixes and other changes

- The rule now finds a class wherever its selector puts it, allowing canonicalization reports and autofixes for variants such as in-*, *:, **:, and divide-* while still avoiding changes that alter the selector. (1.15.1) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.15.1)
- Relative components paths for no-borrowed-component-styles now resolve against each discovered oxlint config's directory. (1.15.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.15.0)
- Relative entryPoint values now resolve against each discovered oxlint config's directory, including JSONC and TypeScript configs. (1.15.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.15.0)
- Style declaration keys in style objects are skipped rather than read as Tailwind classes, preventing invalid-class reports for framework style objects. (1.15.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.15.0)
- When enabled with an engine lacking `canonicalizeCandidates`, canonical and v3-rename maps stay empty while other rules continue working instead of failing the whole precompute. (1.14.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.14.0)
- Uses one outermost-first variant ordering with or without an entry point; the ordering change can rewrite chains once when `--fix` is run. (1.14.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.14.0)
- Cache keys now include local `@plugin` and `@config` files and imported or plugin-loaded package versions, avoiding stale class lists after edits or upgrades. (1.14.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.14.0)
- Counts a template literal across its `${}` parts as one class string and reports once; long templates can now exceed the configured maximum. (1.14.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.14.0)
- Classes and custom properties from local stylesheets imported up to four levels deep are now recognized, including classes in `@layer components`. (1.14.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.14.0)
- Only dark-variant classes that set a color require a light-mode base; non-color filters, display, border width, and opacity are no longer reported for lacking one. (1.14.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.14.0)
- Named group and peer markers remain valid when a custom variant selector names `.group` or `.peer`; only component classes Tailwind does not generate are refused. (1.14.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.14.0)
- Each file now uses its own config's rule options and settings, so `overrides` and nested configs apply to the intended files without leaking across files. (1.14.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.14.0)
- Insiders versions are treated as untested newer engines rather than rejected as too old, with a one-time notice before linting continues. (1.14.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.14.0)
- Rules and autofixes now leave text glued to `${}` out of class checks and rewrites, preventing fixes from splitting runtime classes or moving fragments away from expressions. (1.14.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.14.0)
- Autofixes arbitrary values under variants, such as dark:bg-white/[.08] to dark:bg-white/8, while retaining the value-preserving check. (1.13.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.13.0)
- Canonicalizes arbitrary variants such as data-[open]: and min-[40rem]: when the rewrite preserves the value; selector-changing rewrites remain unchanged. (1.13.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.13.0)
- No longer reports a plain CSS-variable shorthand swap, leaving that change to enforce-consistent-variable-syntax and preventing duplicate diagnostics and autofix oscillation. (1.12.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.12.0)
- The rule no longer flags a responsive class that restores a property overridden by an intermediate class, preventing regressions in responsive layouts. (1.11.1) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.11.1)
- No longer reports tooLong when a line's single class alone exceeds printWidth, avoiding an unactionable warning. (1.11.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.11.0)
- Malformed classes are resolved one at a time, so one bad class no longer masks a real typo in the same batch. (1.10.2) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.10.2)
- Malformed classes are resolved one at a time, so one bad class no longer masks a real typo in the same batch. (1.10.2) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.10.2)
- Request failures are no longer cached as sticky errors; the next keystroke re-spawns and retries the worker. (1.10.2) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.10.2)
- The rule checks the base token before rewriting classes with modifiers, preventing destructive autofixes when the color has no named token while preserving legitimate rewrites. (1.10.1) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.10.1)
- Skips composition fragments and only evaluates strings it can identify as the final class list on a native host element, avoiding false-positive reports. (1.10.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.10.0)
- Skips composition fragments and only evaluates strings it can identify as the final class list on a native host element, avoiding false-positive reports. (1.10.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.10.0)
- The cache key now includes the engine version per entry point, preventing packages with identical CSS but different engines from poisoning each other's cache entries. (1.9.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.9.0)
- The rule checks the class count on each line independently instead of counting classes across the whole multiline block. (1.8.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.8.0)
- The fixer preserves each surviving line's class grouping when collapsing a shorthand pair, transferring a line break forward when needed. (1.8.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.8.0)
- The fixer preserves each surviving line's class grouping when removing duplicates, transferring a line break forward when the class that opened a line is removed. (1.8.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.8.0)
- Whitespace-only lines before an indented closing backtick are preserved, while a genuine single-line trailing space is still stripped. (1.8.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.8.0)
- In strict mode, off-scale percentage classes now receive order information instead of being pushed to the front of the attribute. (1.7.1) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.7.1)
- Custom utilities with open value types are no longer reported when Tailwind accepts their classes, while values the type refuses still report. (1.7.1) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.7.1)
- Off-scale percentages accepted by Tailwind are no longer reported as typos; percentages unsupported by a prefix, such as p-4%, still report. (1.7.1) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.7.1)
- A prefix quick-fix is no longer offered when adding the prefix cannot make a class valid; the class reports as unknown with a spelling suggestion instead. (1.7.1) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.7.1)
- Named markers under a project prefix now report as needing the prefix rather than receiving a spelling suggestion that could delete the marker name. (1.7.1) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.7.1)
- The rule recognizes named group and peer markers as required classes, preventing false diagnostics and quick-fixes that drop marker names. (1.7.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.7.0)
- The rule now scans resolved CSS imports when checking whether a variable is defined, preventing token suggestions that could change the design. (1.6.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.6.0)
- Skips v3 renames handled by no-deprecated-classes, avoiding duplicate diagnostics; keep both rules enabled to report those renames. (1.5.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.5.0)
- Adds the shipped logical/physical pairs, verifies suggested classes exist when a design system is available, and converts inset-s-* and inset-e-* spellings. (1.5.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.5.0)
- With an entry point, matches base and dark variants by declared CSS property, reducing false positives for pairs that use different spellings. (1.5.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.5.0)
- Only reports canonicalizations that emit byte-identical CSS, preventing literal arbitrary values from being rewritten to variable-backed tokens that can resolve differently. (1.4.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.4.0)
- Determines conflicts from emitted CSS declarations and cascade order, avoiding composition false positives and recognizing conflicts in classes with user-written values or previously missing precomputed properties. (1.4.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.4.0)
- With an entry point configured, classifies project-defined variants by their actual selectors, avoiding incorrect redundancy reports for variants targeting generated boxes. (1.4.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.4.0)
- Recognizes Tailwind v4 typed CSS-variable shorthand classes instead of flagging them as unknown. (1.4.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.4.0)
- Only proposes or autofixes a token rewrite when the token resolves back to the variable written, or that variable is undefined, preventing design-changing rewrites. (1.4.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.4.0)
- Bundled into the published package instead of being a peer dependency, so installing oxlint-tailwindcss no longer requires installing @oxlint/plugins separately. (1.3.3) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.3.4), [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.3.3)
- Relative string entryPoint values now resolve from the nearest enclosing .oxlintrc.json directory instead of the current working directory, so CLI and editor use the same package-local CSS. (1.3.2) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.3.2)
- Valid Tailwind v4 classes that getClassList() does not enumerate are no longer reported as typos. (1.3.1) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.3.1)
- Variants that change the selector target, including * and **, are now reordering barriers. (1.3.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.3.0)
- Prefix and variant order are now resolved per entry point, fixing monorepos with differing package settings. (1.3.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.3.0)
- Failed design-system loads are retried once per process instead of paying the initialization cost on every call. (1.3.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.3.0)
- The worker path now rounds rem/em/px floats so autofixes do not write imprecise values into source. (1.3.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.3.0)
- Autofixes now negate only plain numeric dimensions, avoiding invalid rewrites of calc() and var() values. (1.3.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.3.0)
- The rule no longer treats attribute order as determining CSS precedence or flags an exact duplicate as conflicting with itself. (1.3.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.3.0)
- The rule no longer reports idiomatic display or position pairs that set the same property under different names. (1.3.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.3.0)
- Invalid user regexes in patterns are skipped instead of crashing lint with a raw SyntaxError. (1.3.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.3.0)
- Suggestions now preserve the ! modifier and work behind variants. (1.3.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.3.0)
- Cache keys now include locally imported CSS so changes to an @import file do not serve a stale design system. (1.3.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.3.0)
- Stale precompute locks are reclaimed by exclusive rename to avoid a coordination race. (1.3.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.3.0)
- Synchronous worker failures now report their real cause instead of a misleading timeout. (1.3.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.3.0)
- Invalid user regexes are skipped instead of crashing lint with a raw SyntaxError. (1.3.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.3.0)
- Workers now propagate load-failure causes and guard against oversized responses. (1.3.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.3.0)
- The rule no longer reorders the project prefix out of first position, which could produce no CSS. (1.2.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.2.0)
- Precompute runs in a worker thread instead of forking the oxlint host, avoiding cold-cache ENOMEM failures on memory-constrained CI runners. (1.0.1) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.0.1)
- Design-system load failures are memoized, so repeated rule attempts no longer produce thousands of errors; failures are invalidated when the CSS changes. (1.0.1) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.0.1)
- Memory-related load errors now receive a memory-specific hint pointing to memory pressure, oxlint concurrency, or runner memory. (1.0.1) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.0.1)
- Class extraction now scans array values in tv(), cva(), and cn(), including nested arrays, strings, and ternaries, so rules no longer ignore those classes. (1.0.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.0.0)
- A content-hash-scoped file lock serializes cold-cache precomputation across parallel isolates, avoiding simultaneous Node forks that could exhaust memory. (1.0.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v1.0.0)

## oxlint-tailwindcss 0.8

### Behavior and default changes

- Utilities from this plugin are recognized across all DS-dependent rules when the plugin is imported into the CSS entry point. (0.8.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v0.8.0)
- Utilities from this plugin are recognized across all DS-dependent rules when the plugin is imported into the CSS entry point. (0.8.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v0.8.0)

### Fixes and other changes

- Same-prefix class pairs such as duration-300 and duration-500 now correctly report instead of silently passing. (0.8.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v0.8.0)
- Recognizes later classes that refine one property of a shorthand as composition, while preserving direction-sensitive conflicts. (0.8.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v0.8.0)
- Mask gradient combinations now compose correctly, while conflicts in the same gradient slot still report. (0.8.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v0.8.0)
- Stops flagging arbitrary color values that wrap CSS variables in color functions or fallbacks. (0.8.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v0.8.0)
- Handles multi-segment utilities so values such as bg-[var(--color-red-500)] autofix to bg-red-500. (0.8.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v0.8.0)

## oxlint-tailwindcss 0.7

### Breaking changes

- The rule now checks legacy v3 class spellings that produce valid CSS in v4 and canonicalizes them instead of silently skipping them. (0.7.1) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v0.7.1)

### Fixes and other changes

- Legacy v3 class spellings that produce valid CSS in v4 are added to the valid set, so this rule no longer flags them. (0.7.1) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v0.7.1)
- Autofix rules preserve whitespace separators when rebuilding multiline class strings, avoiding collapsing indentation into a single space. (0.7.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v0.7.0)
- When collapsing whitespace, the rule now preserves newlines and following indentation, preventing autofix oscillation with enforce-consistent-line-wrapping. (0.7.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v0.7.0)
- Fixes precompute child-process module resolution under pnpm strict hoisting by resolving the module from the plugin's install location. (0.7.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v0.7.0)

## oxlint-tailwindcss 0.6

### New APIs and options

- Adds a setting, defaulting to 16, that controls px→named class conversion in enforce-canonical. (0.6.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v0.6.0)

### Performance

- Linting is about 5x faster: named classes avoid a worker-thread round-trip, and remaining worker requests are deduplicated. (0.6.3) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v0.6.3)

### Behavior and default changes

- enforce-canonical now dynamically canonicalizes arbitrary user classes using Tailwind's API, falling back to the precomputed cache if the worker is unavailable. (0.6.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v0.6.0)

### Fixes and other changes

- Canonicalization now processes each class separately, preserving output order and length when inputs contain duplicate classes. (0.6.3) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v0.6.3)
- The plugin no longer emits this warning when running in multiple oxlint worker threads because the redundant exit listener was removed. (0.6.2) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v0.6.2)
- The rule now keeps pseudo-element variants innermost in both static and design system ordering modes, preventing broken CSS in Tailwind v4. (0.6.1) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v0.6.1)

## oxlint-tailwindcss 0.5

### New APIs and options

- Set to oxlint-tailwindcss to see which design system is loaded for each file. (0.5.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v0.5.0)
- Set to true to log which design system is loaded for each file; logging is disabled by default. (0.5.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v0.5.0)
- Accepts an array of entry points; for each file, the plugin selects the entry point whose directory is closest in the filesystem tree, enabling monorepo configuration. (0.5.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v0.5.0)

### Tooling

- Six rules now declare their default options in the rule schema, making defaults visible to tooling. (0.5.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v0.5.0)
- Ten rules now provide IDE quick-fixes for additional errors, including replacing unknown classes with a Levenshtein suggestion. (0.5.0) — [release notes](https://github.com/sergioazoc/oxlint-tailwindcss/releases/tag/v0.5.0)
