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 initultracite 873 changes
Breaking changes 25
The Oxlint and ESLint React presets enable form checking with
forms: true, matching Biome's behavior.The Oxlint js-plugins preset now enables 32 SonarJS rules that run without type information, including security rules.
init now writes Ultracite's rules to AGENTS.md for every agent; it adds agent-specific imports or settings only where needed.
The Astro preset now applies ESLint core rules to component frontmatter, including TypeScript rules, with type-checked rules off.
When no browser targets are configured, Ultracite checks against Baseline Widely available browsers; explicit project targets or BROWSERSLIST remain in effect.
The ESLint core preset now treats unsupported browser APIs as errors instead of warnings.
An editor extension install taking longer than two minutes is stopped and treated as failed, prompting manual installation.
init now configures Zed to use Prettier as formatter while retaining ESLint fixes as code actions.
Init writes Devin's Claude Code-format PostToolUse hook to .devin/hooks.v1.json and removes old generated hooks while preserving user hooks.
Ultracite now requires Node.js 22.18 or later, or Bun.
The Biome core preset now treats this rule as an error instead of a warning.
The Biome core preset now enables noForIn as an error, reporting every for...in loop, including guarded ones.
The Biome core preset now treats this rule as an error instead of a warning, so ultracite check fails when it is reported.
The Biome core preset enables this rule as an error; undeclared imports are reported, including workspace dependencies declared only in the root package.json.
The Biome core preset now treats this rule as an error instead of a warning.
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.
The ESLint core and Stylelint presets no longer run Prettier as a lint rule; standalone ESLint and Stylelint runs therefore report lint problems only.
--quiet now suppresses banners, spinners, and progress output without skipping prompts; use it with --yes to run without prompts.
Zed settings no longer request this unsupported Oxc code action on save; Oxfmt sorts imports when formatting.
Cypress lint rules are now provided by an opt-in ESLint preset rather than the core preset.
Storybook lint rules are now provided by an opt-in ESLint preset rather than the core preset.
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.
A patch that only deletes files now makes the hook do nothing instead of triggering a whole-project fix.
ultracite upgrade accepts --version to install a specified release; Ultracite's own -v and --version now work only before a command.
The Vue preset now applies ESLint core rules, including TypeScript rules, to component scripts; type-checked rules remain off there.
Security 1
The rules file written by
initnow tells agents to userel="noopener noreferrer"ontarget="_blank"links.
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.
New APIs and options 13
The anti-slop preset enables a rule rejecting adjacent eager
filter/mappasses over arrays.The anti-slop preset enables a rule rejecting reducers that copy their accumulator on every iteration.
The anti-slop preset enables a rule that restores blank lines around structural boundaries; its autofix only inserts whitespace.
antigravity is now an agent identifier accepted by init --agents and reads AGENTS.md.
fx is now an agent identifier accepted by init --agents and reads AGENTS.md.
init --hooks grok writes a post-edit hook here; Grok Build runs it after Write or Edit when project hooks are trusted.
Generates a Codex PostToolUse hook that runs ultracite fix --hook after apply_patch edits.
Generates a Deep Agents PostToolUse hook that runs ultracite fix --hook after Write or Edit.
An empty Biome preset makes Cypress selectable with Biome even though Biome has no Cypress rules.
An empty Biome preset makes Storybook selectable with Biome even though Biome has no Storybook rules.
Type-checked ESLint rules moved into an opt-in preset; core no longer builds a TypeScript program and can lint TypeScript without a tsconfig.
Vitest's type-checked ESLint rules are now available as an add-on preset to use after the Vitest preset.
init gains --yes (-y) to accept defaults without prompting; it does this automatically in CI or without an interactive terminal.
Behavior and default changes 16
The ESLint core preset no longer configures a
noderesolver; its TypeScript resolver also resolves JavaScript files.initnow writesenv: core.env; generated workspace configs repeatenv: root.env, and migrated.oxlintrc.jsonfiles keep theirenvalongside the core preset.Init installs the Ultracite skill in AdaL's own skill folder when AdaL is selected or its folder already exists.
init merges
read: AGENTS.mdand a lint command into Aider's configuration, so Aider loads the rules and lints each edited file.Init installs the Ultracite skill in IBM Bob's own skill folder when selected or when its folder already exists.
On upgrade, --claude hands applicable configuration changes to the agent CLI and checks the project afterward; it requires release 8 or later.
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.
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.
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.
init --type-aware now sets Oxlint's typeAware option so check, fix, and the editor extension run type-aware rules.
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.
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.
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.
Installs the linter editor extension using the selected editor's own launcher instead of always invoking code.
Unknown, retired, or misspelled agent IDs now receive AGENTS.md with a warning instead of stopping initialization; renamed IDs map to their replacements.
The Biome type-aware preset no longer enables this rule, so type-aware linting no longer requires extensions on every relative import.
Tooling 10
The rules file written by
initagain tells agents to avoid import cycles, which the Oxlint and ESLint core presets report.The preset enables three new rules, including whitespace-only autofix behavior that may produce a one-time whitespace diff after upgrading.
Devin Desktop replaces Windsurf as the editor and hook ID; init still accepts windsurf with a note to switch.
Init writes a .gitignore containing node_modules when there is no repository and no local ignore file.
With Oxlint, init points users to the Oxc extension and removes the unsupported organize-imports-on-save action because Oxfmt sorts imports.
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.
Init writes an ESLint-compatible config that passes ultracite check and replaces the old one-line config on rerun, while preserving user-modified files.
init enables strictNullChecks only when type-aware linting is on and, interactively, asks before changing TypeScript configuration files.
Init writes the legacy workspace TypeScript setting for Antigravity IDE, CodeBuddy, Trae, and Void so those editors use the project's TypeScript version.
upgrade now updates project configuration as well as packages, applying applicable major-version migration guides and checking whether required changes remain.
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.
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.
With ESLint, init installs the Angular ESLint plugin version tested against the Angular preset instead of the latest release.
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.
Init installs the Ultracite skill in Qoder's own skill folder when selected or when its folder already exists.
Agent hooks invoke the installed Ultracite directly rather than the project's fix script, preserving projects whose script runs another tool.
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.
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.
Adds an opt-in Oxlint preset for gdp-ts that makes authorization checks visible to the type checker and applies upstream strict-mode rules.