# What changed in linaria

> 53 changes in linaria 1 to 8 from its official release notes, upgrade guides and advisories: 24 breaking, 12 new APIs and options. Each one cited. Sources checked 2026-11-14. HTML: https://unstale.sh/npm/linaria/

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

## linaria 8

### Breaking changes

- Babel config and Babel resolver plugins are no longer implicit module-resolution fallbacks during WyW evaluation; move build-time alias handling to WyW configuration. (8.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/linaria%408.0.0)
- Cascade ties with identical specificity may emit in a different order; make precedence explicit where order matters. (8.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/linaria%408.0.0)
- Migrate top-level evaluate configuration to eval.strategy; hybrid is the default, execute keeps evaluator-only compatibility, and static rejects evaluator fallback. (8.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/linaria%408.0.0)
- Linaria 8 requires Node.js 22.12 or newer. (8.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/linaria%408.0.0)

### Performance

- Hybrid mode moves more style computation into analytical static evaluation, reducing evaluator startup and module execution work. (8.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/linaria%408.0.0)

### Behavior and default changes

- The default hybrid mode resolves statically provable values first, then falls back to the evaluator. (8.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/linaria%408.0.0)

### Fixes and other changes

- The updated transform avoids duplicate CSS for certain same-file processor bindings and keeps mixed static/processor object-member interpolations statically resolvable. (8.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/linaria%408.0.0)

## linaria 7

### Breaking changes

- WyW 1.x can re-evaluate modules when cached exports are incomplete, so cached export values might not be reused. (7.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/linaria%407.0.0)
- Linaria 7 requires Node.js 20 or later, aligned with WyW 1.x. (7.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/linaria%407.0.0)

### Behavior and default changes

- WyW 1.x promotes fully-statically-evaluatable modules to `only: ['*']`. (7.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/linaria%407.0.0)
- WyW 1.x serializes `transform()` by default; Rollup users encountering an early exit or deadlock can set this option to `false`. (7.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/linaria%407.0.0)

### Fixes and other changes

- When importing JSON from code evaluated by WyW, add `.json` to `extensions` so JSON imports can be handled correctly. (7.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/linaria%407.0.0)
- When importing JSON from code evaluated by WyW, ensure `.json` is ignored by evaluation rules so it is parsed as JSON, not by Babel. (7.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/linaria%407.0.0)

## linaria 6

### Breaking changes

- Discontinued; its functionality is now part of @wyw-in-js/transform, installed automatically with bundler plugins. (6.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/linaria%406.0.0)
- Discontinued. (6.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/linaria%406.0.0)
- Replaces @linaria/babel-preset as part of the move of tooling to the @wyw-in-js scope. (6.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/linaria%406.0.0)
- Replaces @linaria/cli as part of the move of tooling to the @wyw-in-js scope. (6.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/linaria%406.0.0)
- Replaces @linaria/esbuild as part of the move of tooling to the @wyw-in-js scope. (6.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/linaria%406.0.0)
- Base classes for processors and most helpers have moved to this package. (6.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/linaria%406.0.0)
- Replaces @linaria/rollup as part of the move of tooling to the @wyw-in-js scope. (6.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/linaria%406.0.0)
- Replaces @linaria/vite as part of the move of tooling to the @wyw-in-js scope. (6.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/linaria%406.0.0)
- Replaces @linaria/webpack5-loader as part of the move of tooling to the @wyw-in-js scope. (6.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/linaria%406.0.0)
- Replaces linaria.config.js as the configuration file name. (6.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/linaria%406.0.0)
- Replaces linariarc as the configuration file name. (6.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/linaria%406.0.0)
- Replaces the __linaria field for storing meta information in runtime. (6.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/linaria%406.0.0)
- Replaces __linariaPreval as the export with all interpolated values. (6.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/linaria%406.0.0)

### Tooling

- Replaces linaria as the caller name in Babel. (6.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/linaria%406.0.0)
- Now includes the shaker functionality and is installed automatically with the bundler plugins. (6.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/linaria%406.0.0)

## linaria 5

### Behavior and default changes

- Dependency tree processing now supports wildcard re-exports. (5.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/linaria%405.0.0)

## linaria 4

### Breaking changes

- Babel removes CSS-related code from the runtime. (4.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/v4.0.0)
- Custom properties are no longer hyphenated. (4.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/v4.0.0)
- The Babel package was renamed to @linaria/babel-preset. (4.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/v4.0.0)

### New APIs and options

- Babel supports asynchronous resolvers. (4.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/v4.0.0)
- Atomic CSS supports at-rules, keyframes, and pseudo classes. (4.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/v4.0.0)
- Atomic CSS supports property priorities. (4.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/v4.0.0)
- Atomic CSS can be used with the styled API. (4.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/v4.0.0)
- CSS template literals can be renamed. (4.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/v4.0.0)
- CSS extraction logic from an AST is exposed for use by developers. (4.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/v4.0.0)
- An API for custom template tags was added. (4.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/v4.0.0)
- Linaria can interoperate with traditional CSS-in-JS libraries. (4.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/v4.0.0)
- A package providing an atomic version of the css API was added. (4.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/v4.0.0)
- A custom resolver option was added to support re-exporting Linaria libraries. (4.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/v4.0.0)
- Basic support was added for tags of any type. (4.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/v4.0.0)
- A new CLI flag, --transform, was added. (4.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/v4.0.0)

### Behavior and default changes

- classNameSlug resolution now includes file, name, dir, and ext. (4.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/v4.0.0)
- The shaker package became optional. (4.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/v4.0.0)
- Support for tags other than tagged templates was improved. (4.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/v4.0.0)

### Tooling

- An esbuild integration was added. (4.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/v4.0.0)
- A loader for webpack 5 was added. (4.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/v4.0.0)
- A universal webpack loader was added. (4.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/v4.0.0)

### Fixes and other changes

- Babel now supports dynamic keys in objects with css as values. (4.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/v4.0.0)

## linaria 2

### Breaking changes

- core-js has been removed from dependencies, which may affect developers relying on it being installed transitively. (2.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/v2.0.0)

## linaria 1

### Breaking changes

- Invalid interpolations now throw an error at build time to avoid mistakes. (1.0.0) — [release notes](https://github.com/callstack/linaria/releases/tag/v1.0.0)
