Skip to content
Ultracite
Esc
↑↓navigate↵open⌘Jpreview
On this page

ultracite@7.12.3

Patch Changes

  • f753c14: Add opt-in TSDoc syntax validation and public TypeScript API documentation checks to the Oxlint js-plugins preset. Selecting a plugin with --js-plugins on a config that extends the full js-plugins preset now keeps the preset’s plugins.

  • ade34d3: Update @biomejs/biome to 2.5.15. The release adds 11 nursery rules and changes no stable rules, so the Biome presets, which exclude nursery rules, are unchanged. It speeds up HTML formatting and big-file analysis, fixes Astro expression indentation and Svelte comment placement, and reports configuration errors that Biome 2.5.14 silently ignored.

  • 631e0dd: Update oxfmt to 0.71.0. The release changes no options; it bundles Prettier 3.9.9 for embedded languages and fixes comment placement around assignments, JSDoc alignment and several Markdown edge cases.

  • 08e83af: Update oxlint to 1.86.0 and enable its new type-aware rule, typescript/no-generated-empty-object-type, in the core Oxlint preset. It reports type operations such as Pick<Data, never> that resolve to the empty object type {}, matching the @typescript-eslint rule of the same name that the ESLint preset already enables. Like the other type-aware rules, it only runs with oxlint --type-aware and oxlint-tsgolint installed. Older oxlint releases fail to parse a config that names the rule, so the oxlint peer range moves to ^1.86.0.

    Requires oxlint >= 1.86.0

  • 2a9348c: Update the ESLint presets’ plugins: eslint 10.12, eslint-plugin-unicorn 77, eslint-plugin-jsdoc 65, @typescript-eslint 8.71, eslint-plugin-sonarjs 4.2.2, eslint-plugin-react-doctor and oxlint-plugin-react-doctor 0.9.16, plus patch releases of the Next.js, TanStack Query, n, Solid and Storybook plugins.

    The ESLint core preset enables every non-deprecated JavaScript rule from unicorn, so it now also runs unicorn 77’s 21 new JavaScript rules, including no-unnecessary-parameters, no-unsafe-json-serialization, prefer-promise-static-methods and a set of no-invalid-* checks for DOM, Intl, Response, Temporal and property descriptor arguments. It also enables the new type-aware @typescript-eslint/no-unsafe-enum-assignment. Unicorn 77 moves its CSS-only rules to eslint-cssicorn; the preset never enabled them for JavaScript files, so nothing is lost.

  • 864cde1: Raise the eslint peer dependency to ^10.9.0. The ESLint core preset configures no-unmodified-loop-condition with checkConditionalExpressions, an option ESLint 10.0 to 10.8 reject, so every preset except Vue failed with Key "rules": Key "no-unmodified-loop-condition" on those releases even though the old ^10.0.0 range allowed them (eslint-plugin-unicorn also needs ESLint 10.4 or later). ultracite init and ultracite upgrade now install a release that loads the presets, and ultracite doctor and your package manager flag older ones. @eslint/js, which is no longer versioned with ESLint, keeps its own ^10.0.1 range.

    Requires eslint >= 10.9.0

  • d7563b3: ultracite init now skips every prompt when you pass any of --pm, --editors, --agents, --hooks, --integrations, --frameworks or --workspace-framework, as documented. Before, the editor, agent, hook, skill and (with --frameworks) integration prompts still asked, which stalled scaffolding tools that call init without a TTY. --js-plugins with a linter other than Oxlint now stops init with an error instead of being silently ignored, and without --linter it skips the linter prompt.

  • 6c7e149: ultracite init no longer hangs on a .pre-commit-config.yaml or lefthook config with CRLF line endings and many consecutive comment lines. The check that keeps the file’s sequence indentation could backtrack exponentially on that input.

  • 3dc6431: On Windows, a linter or formatter that isn’t installed is now reported as missing instead of as “exited with code 1”. ultracite check and ultracite fix warn and skip CSS linting when the optional Stylelint is missing, as they already did on macOS and Linux, and ultracite fix --agent now skips a missing Stylelint on every platform instead of failing.

  • 7f085b2: Type jsPlugins as a non-null array on the Oxlint presets that always ship plugins (js-plugins, shadcn, anti-slop, next/js-plugins, tanstack/js-plugins) and on selectJsPlugins()’s return value, so spreading several of them into a root jsPlugins array typechecks.

  • 45e7f86: The ESLint core preset enables unicorn/prefer-combined-guards’s new checkMultiStatementBodies option, so consecutive guards whose bodies repeat the same statements before the same exit (for example, two if blocks that each log and continue) are reported and can be combined with ||. In TypeScript, the rule only combines bodies when type information shows every reference has the same type in both.

  • d5523c5: ultracite init takes --workspace-framework <path>=<framework> for monorepos whose workspaces use different frameworks. For each workspace, it writes an Oxlint, Biome or ESLint config in that directory that extends the root config and adds the workspace’s presets, so framework rules only run where they apply and editors see the same rules as ultracite check.

Last updated on October 5, 2026

Was this page helpful?