unstale

npm / ultracite

ultracite

What changed in ultracite 7 to 8, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-19.

25 breaking1 security1 deprecations13 new APIs and options16 behavior and defaults12 tooling7 fixes and other

See which of these apply to your code, ranked, in your agent:

npx @unstale/cli init

@unstale/cli on npm

ultracite 873 changes

Breaking changes 25

  • The Oxlint and ESLint React presets enable form checking with forms: true, matching Biome's behavior.

    8.0.1release notes

  • The Oxlint js-plugins preset now enables 32 SonarJS rules that run without type information, including security rules.

    8.0.1release notes

  • init now writes Ultracite's rules to AGENTS.md for every agent; it adds agent-specific imports or settings only where needed.

    8.0.0release notes

  • The Astro preset now applies ESLint core rules to component frontmatter, including TypeScript rules, with type-checked rules off.

    8.0.0release notes

  • When no browser targets are configured, Ultracite checks against Baseline Widely available browsers; explicit project targets or BROWSERSLIST remain in effect.

    8.0.0release notes

  • The ESLint core preset now treats unsupported browser APIs as errors instead of warnings.

    8.0.0release notes

  • An editor extension install taking longer than two minutes is stopped and treated as failed, prompting manual installation.

    8.0.0release notes

  • init now configures Zed to use Prettier as formatter while retaining ESLint fixes as code actions.

    8.0.0release notes

  • Init writes Devin's Claude Code-format PostToolUse hook to .devin/hooks.v1.json and removes old generated hooks while preserving user hooks.

    8.0.0release notes

  • Ultracite now requires Node.js 22.18 or later, or Bun.

    8.0.0release notes

  • The Biome core preset now treats this rule as an error instead of a warning.

    8.0.0release notes

  • The Biome core preset now enables noForIn as an error, reporting every for...in loop, including guarded ones.

    8.0.0release notes

  • The Biome core preset now treats this rule as an error instead of a warning, so ultracite check fails when it is reported.

    8.0.0release notes

  • The Biome core preset enables this rule as an error; undeclared imports are reported, including workspace dependencies declared only in the root package.json.

    8.0.0release notes

  • The Biome core preset now treats this rule as an error instead of a warning.

    8.0.0release notes

  • Ultracite now requires oxfmt >=0.71.0 and <1.0.0; init and upgrade install it within a caret range of the preset-checked version.

    8.0.0release notes

  • The ESLint core and Stylelint presets no longer run Prettier as a lint rule; standalone ESLint and Stylelint runs therefore report lint problems only.

    8.0.0release notes

  • --quiet now suppresses banners, spinners, and progress output without skipping prompts; use it with --yes to run without prompts.

    8.0.0release notes

  • Zed settings no longer request this unsupported Oxc code action on save; Oxfmt sorts imports when formatting.

    8.0.0release notes

  • Cypress lint rules are now provided by an opt-in ESLint preset rather than the core preset.

    8.0.0release notes

  • Storybook lint rules are now provided by an opt-in ESLint preset rather than the core preset.

    8.0.0release notes

  • For supported agent hooks, unfixable lint and formatting problems are returned to the agent; Devin receives them through hook context instead of exit code 2.

    8.0.0release notes

  • A patch that only deletes files now makes the hook do nothing instead of triggering a whole-project fix.

    8.0.0release notes

  • ultracite upgrade accepts --version to install a specified release; Ultracite's own -v and --version now work only before a command.

    8.0.0release notes

  • The Vue preset now applies ESLint core rules, including TypeScript rules, to component scripts; type-checked rules remain off there.

    8.0.0release notes

Security 1

  • The rules file written by init now tells agents to use rel="noopener noreferrer" on target="_blank" links.

    8.0.1release notes

Deprecations 1

  • The retired Roo Code agent ID is still accepted but now writes rules to AGENTS.md with a warning; the skill installer no longer targets .roo.

    8.0.0release notes

New APIs and options 13

  • The anti-slop preset enables a rule rejecting adjacent eager filter/map passes over arrays.

    8.0.1release notes

  • The anti-slop preset enables a rule rejecting reducers that copy their accumulator on every iteration.

    8.0.1release notes

  • The anti-slop preset enables a rule that restores blank lines around structural boundaries; its autofix only inserts whitespace.

    8.0.1release notes

  • antigravity is now an agent identifier accepted by init --agents and reads AGENTS.md.

    8.0.0release notes

  • fx is now an agent identifier accepted by init --agents and reads AGENTS.md.

    8.0.0release notes

  • init --hooks grok writes a post-edit hook here; Grok Build runs it after Write or Edit when project hooks are trusted.

    8.0.0release notes

  • Generates a Codex PostToolUse hook that runs ultracite fix --hook after apply_patch edits.

    8.0.0release notes

  • Generates a Deep Agents PostToolUse hook that runs ultracite fix --hook after Write or Edit.

    8.0.0release notes

  • An empty Biome preset makes Cypress selectable with Biome even though Biome has no Cypress rules.

    8.0.0release notes

  • An empty Biome preset makes Storybook selectable with Biome even though Biome has no Storybook rules.

    8.0.0release notes

  • Type-checked ESLint rules moved into an opt-in preset; core no longer builds a TypeScript program and can lint TypeScript without a tsconfig.

    8.0.0release notes

  • Vitest's type-checked ESLint rules are now available as an add-on preset to use after the Vitest preset.

    8.0.0release notes

  • init gains --yes (-y) to accept defaults without prompting; it does this automatically in CI or without an interactive terminal.

    8.0.0release notes

Behavior and default changes 16

  • The ESLint core preset no longer configures a node resolver; its TypeScript resolver also resolves JavaScript files.

    8.0.1release notes

  • init now writes env: core.env; generated workspace configs repeat env: root.env, and migrated .oxlintrc.json files keep their env alongside the core preset.

    8.0.1release notes

  • Init installs the Ultracite skill in AdaL's own skill folder when AdaL is selected or its folder already exists.

    8.0.0release notes

  • init merges read: AGENTS.md and a lint command into Aider's configuration, so Aider loads the rules and lints each edited file.

    8.0.0release notes

  • Init installs the Ultracite skill in IBM Bob's own skill folder when selected or when its folder already exists.

    8.0.0release notes

  • On upgrade, --claude hands applicable configuration changes to the agent CLI and checks the project afterward; it requires release 8 or later.

    8.0.0release notes

  • init asks before changing files it does not own and asks all questions before writing; it preserves legacy ESLint config files when the project uses ESLint.

    8.0.0release notes

  • Aider runs the configured Ultracite fix command on each file it edits and asks the model to fix remaining problems; an existing lint-cmd is left alone.

    8.0.0release notes

  • ESLint check and fix suppress warnings for named files without matching configuration by default; callers can override this with --warn-ignored or --no-warn-ignored.

    8.0.0release notes

  • init --type-aware now sets Oxlint's typeAware option so check, fix, and the editor extension run type-aware rules.

    8.0.0release notes

  • Pre-commit hooks configured by init now pass staged files to ultracite fix rather than fixing the whole project; supported file globs have also expanded.

    8.0.0release notes

  • The Svelte preset now applies ESLint core rules to component scripts and disables rules that misread Svelte scope or are replaced by Svelte-specific rules.

    8.0.0release notes

  • Zed's Oxlint settings now set typeAware to null so the language server follows options.typeAware in the Oxlint config instead of enabling type-aware linting unconditionally.

    8.0.0release notes

  • Installs the linter editor extension using the selected editor's own launcher instead of always invoking code.

    8.0.0release notes

  • Unknown, retired, or misspelled agent IDs now receive AGENTS.md with a warning instead of stopping initialization; renamed IDs map to their replacements.

    8.0.0release notes

  • The Biome type-aware preset no longer enables this rule, so type-aware linting no longer requires extensions on every relative import.

    8.0.0release notes

Tooling 10

  • The rules file written by init again tells agents to avoid import cycles, which the Oxlint and ESLint core presets report.

    8.0.1release notes

  • The preset enables three new rules, including whitespace-only autofix behavior that may produce a one-time whitespace diff after upgrading.

    8.0.1release notes

  • Devin Desktop replaces Windsurf as the editor and hook ID; init still accepts windsurf with a note to switch.

    8.0.0release notes

  • Init writes a .gitignore containing node_modules when there is no repository and no local ignore file.

    8.0.0release notes

  • With Oxlint, init points users to the Oxc extension and removes the unsupported organize-imports-on-save action because Oxfmt sorts imports.

    8.0.0release notes

  • Kiro CLI replaces Amazon Q CLI as the agent ID; the old ID remains accepted with a note to switch, and rules go in AGENTS.md.

    8.0.0release notes

  • Init writes an ESLint-compatible config that passes ultracite check and replaces the old one-line config on rerun, while preserving user-modified files.

    8.0.0release notes

  • init enables strictNullChecks only when type-aware linting is on and, interactively, asks before changing TypeScript configuration files.

    8.0.0release notes

  • Init writes the legacy workspace TypeScript setting for Antigravity IDE, CodeBuddy, Trae, and Void so those editors use the project's TypeScript version.

    8.0.0release notes

  • upgrade now updates project configuration as well as packages, applying applicable major-version migration guides and checking whether required changes remain.

    8.0.0release notes

Fixes and other changes 7

  • The --claude and --codex runs provide agents with configured rule names and diagnostic help, process files in path order, re-lint before handing over each file, and count deleted or unparsable files as unfixed.

    8.0.1release notes

  • Under Devin, ultracite fix --hook exits successfully and provides unresolved problems as additional hook context rather than using Devin's exit-code-2 block behavior.

    8.0.0release notes

  • With ESLint, init installs the Angular ESLint plugin version tested against the Angular preset instead of the latest release.

    8.0.0release notes

  • For npm projects, init and upgrade add package.json overrides pointing selected ESLint plugins' eslint peers at the project's ESLint, allowing later installs to succeed.

    8.0.0release notes

  • Init installs the Ultracite skill in Qoder's own skill folder when selected or when its folder already exists.

    8.0.0release notes

  • Agent hooks invoke the installed Ultracite directly rather than the project's fix script, preserving projects whose script runs another tool.

    8.0.0release notes

  • When init creates biome.jsonc without a local ignore file, it sets vcs.root to the repository root so Biome can find version-control ignores.

    8.0.0release notes

ultracite 72 changes

Tooling 2

  • Adds an opt-in ESLint preset for gdp-ts that makes authorization checks visible to the type checker and applies upstream strict-mode rules.

    7.12.4release notes

  • Adds an opt-in Oxlint preset for gdp-ts that makes authorization checks visible to the type checker and applies upstream strict-mode rules.

    7.12.4release notes