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

Providers

One standard, three engines

Ultracite is a preset, not a linter. It sets up the toolchain you pick with the same strict rules, editor settings and agent instructions, and you can switch engines with one command.

Side by side

The same project, the same machine, each engine through Ultracite’s core preset.

PropertyOxlint + OxfmtBiomeESLint + Prettier + Stylelint
Runs onNative Rust binariesOne native Rust binaryNode.js
Rules on in the core preset474331918
ultracite check, 42 files340 ms257 ms3.91 s
ultracite check, 420 files344 ms379 ms15.5 s
Rules that read types56, opt-in at setup7 project-wide rules, opt-in at setup132, opt-in at setup
ESLint pluginsOpt-in, through JS pluginsNoAny of them
FormatterOxfmtBiomePrettier, with its plugins
Files init writesoxlint.config.ts, oxfmt.config.tsbiome.jsonceslint.config.mjs, prettier.config.mjs, stylelint.config.mjs
Pick it forSpeed and breadth together: the default for new projectsOne tool and one config file that lints, formats and sortsTemplate linting in Vue and Svelte, Prettier plugins, niche ESLint plugins

Ultracite 8.0.0. Times are medians of five runs of ultracite check on an Apple M1 Pro over the repo’s benchmark fixture, withOxlint 1.87.0 and Oxfmt 0.71.0; Biome 2.5.15; andESLint 10.12.0, Prettier 3.9.10 and Stylelint 17.16.0. They include starting Node and the CLI.

Choosing an engine

Which engine should I pick?
Start with Oxlint. It’s what init recommends: native speed, 474 rules in the core preset, ESLint’s rule names and type-aware rules on typescript-go. Pick Biome if you want one tool and one config file that lints, formats and sorts. Pick ESLint if you depend on an ESLint or Prettier plugin, or need Vue and Svelte templates linted.
Can I switch engines later?
Yes. Run npx ultracite init --linter biome (or oxlint, or eslint). init removes the packages and config files it installed for the old engine, writes the new engine’s config, and merges into your .vscode/settings.json instead of replacing it.
Do all three enforce the same rules?
They aim at the same standard: type safety, React and hooks, accessibility, async code and imports. Names differ by engine (noExplicitAny in Biome, no-explicit-any in Oxlint and ESLint), and ESLint turns on the most rules because the most plugins exist for it.
Is Biome faster than Oxlint?
On a small project, yes: Biome checked 42 files in 257 ms and Oxlint with Oxfmt in 340 ms, because Biome lints and formats in one process while ultracite check on Oxlint runs Oxlint and then Oxfmt. At 420 files Oxlint was slightly ahead, 344 ms to Biome’s 379 ms. The ESLint toolchain went from 3.91 s to 15.5 s.

Ship less slop

One command sets up your linter, formatter, editor and agents. Works with Oxlint, Biome and ESLint.