Introduction
Learn what Ultracite is, which linting toolchains it supports, and how its zero-config presets help teams and AI write cleaner code.
Ultracite is a highly opinionated, zero-configuration preset for JavaScript and TypeScript linting and formatting. It supports three major toolchains:
- Oxlint + Oxfmt — The fastest linter available, 50-100x faster than ESLint (recommended)
- Biome — The modern, all-in-one toolchain written in Rust
- ESLint + Prettier + Stylelint — The most mature and comprehensive linting ecosystem
Install Ultracite quickly by running:
npx ultracite initpnpm dlx ultracite inityarn dlx ultracite initbunx ultracite initnubx ultracite initaube dlx ultracite initThen follow the Usage guide to get started, or check out Setup for more granular control.
Coming from your own ESLint, Prettier, Stylelint, Biome or Oxlint setup? Migrate covers moving it onto Ultracite’s presets with your coding agent, all at once or progressively.
How does Ultracite work?
Once set up, Ultracite runs mostly in the background — automatically formatting your code and applying fixes every time you save your files. Because the underlying tools are highly optimized (especially the Rust-based Biome and Oxlint), running Ultracite’s checks is extremely fast and can comfortably run on every save without lag. This means you can focus on building and shipping instead of manually correcting style issues or debugging runtime errors.
Goals
Ultracite’s goals from a development perspective are:
Lightning-fast performance
Ultracite benefits from the performance of Rust-based tools like Biome and Oxlint, enabling instant feedback even on large codebases.
Zero-config by design
Ultracite is designed to be zero-config by default. This allows new users to get started quickly without needing to configure their linter or formatter, saving teams time when onboarding new developers.
The goal is to provide a default configuration that works for most projects, while still allowing customization for those who need it.
Intuitive and simple
Ultracite should be as invisible as possible. Preferably, it should not require any configuration or action from the user. When feedback is needed, it should be easy to understand and act on.
Maximum type safety
Ultracite is designed to be as type-safe as possible. The presets add lint rules that catch unsafe typing and suggest improvements, and type-aware linting adds rules that use the type checker. Turning it on also turns on strictNullChecks in your tsconfig.json files (unless it’s already on through extends or you’ve explicitly turned it off), after asking.
Plays nice with others
Ultracite works alongside other tools and libraries without conflict. You can choose the toolchain that best fits your project’s needs.
Next steps
- Run checks from the command line and your editor with the Usage guide.
- Enforce clean commits with Git hooks, or set Ultracite up across a monorepo.
- Wire up your AI tooling with editor rules, hooks, and skills.
- Upgrading from an older release? Run
npx ultracite@latest upgrade, and see Upgrade for having your coding agent update the configuration. - Stuck on something? Check the FAQ and Troubleshooting pages.
- Keep up with new releases on the changelog.