Ultracite Zero-config linting and formatting for JS/TS projects. Supports three linter backends: Biome (recommended), ESLint + Prettier, and Oxlint + Oxfmt. Detecting Ultracite Check if ultracite is in package.json devDependencies. Detect the active linter by looking for: biome.jsonc → Biome eslint.config.mjs → ESLint .oxlintrc.json → Oxlint CLI Commands
Check for issues (read-only)
bunx ultracite check
Auto-fix issues
bunx ultracite fix
Diagnose setup problems
bunx ultracite doctor
Initialize in a new project
- bunx ultracite init
- Replace
- bunx
- with
- npx
- ,
- pnpx
- , or
- yarn dlx
- depending on the package manager.
- check
- and
- fix
- accept optional file paths:
- bunx ultracite check src/index.ts
- .
- Initialization
- bunx ultracite init
- runs an interactive setup. For non-interactive (CI) use, pass flags:
- bunx ultracite init
- \
- --pm
- bun
- \
- --linter
- biome
- \
- --editors
- vscode cursor
- \
- --agents
- claude copilot
- \
- --frameworks
- react next
- \
- --integrations
- husky lint-staged
- \
- --quiet
- Flags:
- --pm
- —
- npm
- |
- yarn
- |
- pnpm
- |
- bun
- --linter
- —
- biome
- (recommended) |
- eslint
- |
- oxlint
- --editors
- —
- vscode
- |
- zed
- |
- cursor
- |
- windsurf
- |
- antigravity
- |
- kiro
- |
- trae
- |
- void
- --agents
- —
- claude
- |
- codex
- |
- copilot
- |
- cline
- |
- amp
- |
- gemini
- |
- cursor-cli
- + 19 more
- --frameworks
- —
- react
- |
- next
- |
- solid
- |
- vue
- |
- svelte
- |
- qwik
- |
- remix
- |
- angular
- |
- astro
- |
- nestjs
- --integrations
- —
- husky
- |
- lefthook
- |
- lint-staged
- |
- pre-commit
- --hooks
- — Enable auto-fix hooks for supported agents/editors
- --type-aware
- — Enable type-aware linting (oxlint only)
- --skip-install
- — Skip dependency installation
- --quiet
- — Suppress prompts (auto-detected when
- CI=true
- )
- Init creates config that extends Ultracite presets:
- // biome.jsonc
- { "extends": ["ultracite/biome/core", "ultracite/biome/react"] }
- Framework presets available per linter:
- core
- ,
- react
- ,
- next
- ,
- solid
- ,
- vue
- ,
- svelte
- ,
- qwik
- ,
- remix
- ,
- angular
- ,
- astro
- ,
- nestjs
- .
- Code Standards
- When writing code in a project with Ultracite, follow these standards. For the full rules reference, see
- references/code-standards.md
- .
- Key rules at a glance:
- Formatting:
- 2-space indent, semicolons, double quotes, 80-char width, ES5 trailing commas, LF line endings.
- Style:
- Arrow functions preferred.
- const
- by default, never
- var
- .
- for...of
- over
- .forEach()
- . Template literals over concatenation. No enums (use objects with
- as const
- ). No nested ternaries. Kebab-case filenames.
- Correctness:
- No unused imports/variables. No
- any
- (use
- unknown
- ). Always
- await
- promises in async functions. No
- console.log
- /
- debugger
- /
- alert
- in production.
- React:
- Function components only. Hooks at top level. Exhaustive deps.
- key
- on iterables (no array index). No nested component definitions. Semantic HTML + ARIA.
- Performance:
- No accumulating spread in loops. No barrel files. No namespace imports. Top-level regex.
- Security:
- rel="noopener"
- on
- target="_blank"
- . No
- dangerouslySetInnerHTML
- . No
- eval()
- .
- Troubleshooting
- Run
- bunx ultracite doctor
- to diagnose. It checks:
- Linter installation (biome/eslint/oxlint binary available)
- Config validity (extends ultracite presets correctly)
- Ultracite in package.json dependencies
- Conflicting tools (old
- .eslintrc.*
- ,
- .prettierrc.*
- files)
- Common fixes:
- Conflicting configs
-
- Delete legacy
- .eslintrc.*
- and
- .prettierrc.*
- files after migrating to Ultracite
- Missing dependency
-
- Run
- bunx ultracite init
- again or manually add
- ultracite
- to devDependencies
- Rules not applying
- Ensure config file extends the correct presets for your framework