tessl install https://github.com/secondsky/claude-skills --skill ultracitegithub.com/secondsky/claude-skills
Ultracite multi-provider linting/formatting (Biome, ESLint, Oxlint). Use for v6/v7 setup, provider selection, Git hooks, MCP integration, AI hooks, migrations, or encountering configuration, type-aware linting, monorepo errors.
Review Score
85%
Validation Score
13/16
Implementation Score
73%
Activation Score
100%
Fast, zero-config linting and formatting for modern JavaScript/TypeScript projects
Ultracite is a unified linting and formatting solution that supports multiple providers: Biome (default, Rust-based), ESLint+Prettier+Stylelint, and Oxlint+Oxfmt. It provides framework-specific presets and zero-configuration defaults, replacing traditional ESLint+Prettier setups with a faster, simpler alternative. Ultracite operates invisibly in the background, automatically formatting code and applying fixes on every save.
Version 7 Changes: Multi-provider architecture, preset path migration, MCP server support, AI hooks Version 6 Changes: Framework-specific presets introduced (React, Next.js, Vue, Svelte, etc.)
vs ESLint + Prettier:
vs Biome alone:
Use Ultracite when:
Limited framework support:
Specialized requirements:
Legacy projects:
For detailed limitations and workarounds, see: references/limitations-and-workarounds.md
This skill provides interactive commands and autonomous agents for streamlined workflows:
/ultracite:doctor - Validate project setup, check for v6→v7 preset paths, detect conflicts/ultracite:migrate - Interactive migration wizard (ESLint/Prettier → Ultracite, v6→v7 upgrade)config-validator - Analyze biome.jsonc for syntax, preset paths, rule conflicts, performancemigration-assistant - Guide ESLint/Prettier migrations with rule mapping and gap analysisSee README.md for complete interactive features documentation.
Ultracite v7 supports three linting providers. Choose based on your needs:
Provider selection during init:
bun x ultracite init --linter biome # Default
bun x ultracite init --linter eslint # ESLint + Prettier + Stylelint
bun x ultracite init --linter oxlint # Oxlint + OxfmtLoad provider-specific documentation:
references/provider-biome.mdreferences/provider-eslint.mdreferences/provider-oxlint.mdBreaking Change: Preset paths have changed in v7.
v6 paths (old):
{
"extends": ["ultracite/core", "ultracite/react"]
}v7 paths (new):
{
"extends": ["ultracite/biome/core", "ultracite/biome/react"]
}Migration steps:
ultracite package: bun update ultracitebiome.jsonc (add /biome/ segment)npx ultracite doctor to validate configurationnpx ultracite check .New v7 features:
ultracite doctor diagnostics commandLoad full v7 migration guide: references/v7-migration.md
Key Change: Framework-specific presets introduced.
v5 approach (old):
{
"extends": ["ultracite/core"]
}v6 approach (new):
{
"extends": ["ultracite/core", "ultracite/react"] // Framework preset
}Load full v6 migration guide: references/v6-migration.md
When this skill is invoked, scan the project and assess:
Check existing tooling:
# Check for ESLint
ls -la .eslintrc* eslint.config.* package.json | grep eslint
# Check for Prettier
ls -la .prettierrc* prettier.config.* package.json | grep prettier
# Check for Biome
ls -la biome.json* package.json | grep biomeIdentify framework:
package.json for react, next, vue, svelte, etc.Assess project size:
Check TypeScript config:
tsconfig.json exists, note that Ultracite requires strictNullChecks: trueRecommend or warn:
✅ RECOMMENDED: This TypeScript + React project is ideal for Ultracite
- 500+ files will benefit from Rust performance
- React preset available
- Can replace existing ESLint + Prettier setup
⚠️ CONSIDER: This project uses advanced ESLint plugins
- Custom rule: eslint-plugin-custom-security
- May need to retain ESLint for these specific rules
- Could use Ultracite for formatting onlypackage.json file in project root# Using Bun (preferred for speed)
bun x ultracite init
# With provider selection (v7+)
bun x ultracite init --linter biome # Default, fastest
bun x ultracite init --linter eslint # ESLint + Prettier + Stylelint
bun x ultracite init --linter oxlint # Oxlint + Oxfmt (type-aware)
# Using npm
npx ultracite init
# Using pnpm
pnpm dlx ultracite init
# Using yarn
yarn dlx ultracite initThe interactive setup will:
biome.jsonc, .eslintrc.js, etc.).vscode/settings.json for editor integrationstrictNullChecks in tsconfig.json (if TypeScript)# Auto-detect settings, skip prompts
bunx ultracite init --quiet
# Specify options explicitly (v7+)
bunx ultracite init \
--linter biome \
--pm bun \
--frameworks react,next \
--editors vscode \
--agents cursor,claude \
--integrations husky \
--migrate eslint,prettier \
--quietAvailable flags:
--linter: Provider selection (biome, eslint, oxlint) - v7+ only--pm: Package manager (bun, npm, pnpm, yarn)--frameworks: react, next, solid, vue, qwik, angular, remix, svelte--editors: vscode, zed--agents: cursor, claude, cline, copilot, windsurf, etc.--integrations: husky, lefthook, lint-staged--migrate: eslint, prettier, biome--quiet: Skip all prompts (auto-enabled when CI=true)# 1. Install dependencies
bun add -D ultracite @biomejs/biome
# 2. Create biome.jsonc
cat > biome.jsonc << 'EOF'
{
"$schema": "https://biomejs.dev/schemas/2.3.8/schema.json",
"extends": ["ultracite/core"]
}
EOF
# 3. Create VS Code settings
mkdir -p .vscode
cat > .vscode/settings.json << 'EOF'
{
"editor.defaultFormatter": "biomejs.biome",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"quickfix.biome": "explicit",
"source.organizeImports.biome": "explicit"
}
}
EOF
# 4. Enable TypeScript strict mode
# Add to tsconfig.json:
{
"compilerOptions": {
"strictNullChecks": true
}
}# Check installation
bunx ultracite doctor
# Expected output:
# ✔ Biome is installed
# ✔ Configuration file found: biome.jsonc
# ✔ Editor integration configured
# ✔ TypeScript strict mode enabledFile structure:
project-root/
├── biome.jsonc # Main configuration
├── .vscode/settings.json # VS Code integration
├── tsconfig.json # TypeScript config (strictNullChecks required)
└── package.jsonMinimal biome.jsonc:
{
"$schema": "https://biomejs.dev/schemas/2.3.8/schema.json",
"extends": ["ultracite/core"],
// Optional: Add framework preset
// "extends": ["ultracite/core", "ultracite/react"],
// Optional: Customize rules
"linter": {
"rules": {
"suspicious": {
"noConsoleLog": "off" // Disable specific rule
}
}
},
// Optional: Exclude files
"files": {
"ignore": ["dist", "build", "coverage", "**/*.generated.ts"]
}
}ultracite/react: React Hooks, JSX a11y, component best practicesultracite/nextjs: React + Next.js App Router, image optimization, document structureultracite/vue: Vue 3 Composition API, template syntax, reactivityultracite/svelte: Svelte 4/5 syntax, reactive declarationsUsage:
{
"extends": ["ultracite/core", "ultracite/react"]
}The ultracite/core preset includes 200+ rules across 7 categories:
eval(), XSS risks, unsafe patternsconst preference, import organizationFormatting defaults: 2 spaces, 80 chars/line, LF endings, single quotes
For detailed framework presets, rule descriptions, and advanced configuration, see: references/configuration-guide.md
VS Code Setup:
biomejs.biome.vscode/settings.json:
{
"editor.defaultFormatter": "biomejs.biome",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"quickfix.biome": "explicit",
"source.organizeImports.biome": "explicit"
}
}Features:
Check code (lint only):
bunx ultracite check
bunx ultracite check src/
bunx ultracite check --diagnostic-level error # Only errorsFix code (auto-fix):
bunx ultracite check --write
bunx ultracite check --write src/Format code (format only):
bunx ultracite format --write
bunx ultracite format --write src/Package.json scripts:
{
"scripts": {
"lint": "ultracite check",
"lint:fix": "ultracite check --write",
"format": "ultracite format --write"
}
}Ultracite auto-detects and integrates with:
Quick setup:
# Husky
bunx ultracite init --integrations husky
# Lefthook
bunx ultracite init --integrations lefthook
# lint-staged
bunx ultracite init --integrations lint-stagedExample .husky/pre-commit:
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
ultracite check --staged --writeFor complete Git hook setup guides (Husky, Lefthook, lint-staged), see: references/git-hooks-setup.md
Ultracite generates AI editor rules that teach AI assistants about your linting/formatting standards.
Supported editors:
.cursorrules).windsurfrules).github/copilot-instructions.md).continuerules).codeiumrules).zedrules)Generate rules:
bunx ultracite generate-ai-rules
bunx ultracite generate-ai-rules --all # All editors
bunx ultracite generate-ai-rules --editor=cursor # Specific editorFor complete AI editor integration guide and customization, see: references/ai-editor-integration.md
Ultracite optimizes for monorepos with:
Example monorepo structure:
monorepo/
├── biome.json # Shared base config
├── apps/
│ └── web/
│ └── biome.json # Next.js-specific overrides
└── packages/
└── ui/
└── biome.json # React-specific overridesFor complete monorepo setup, Turborepo/Nx integration, and performance tips, see: references/monorepo-configuration.md
Automatic migration:
bunx ultracite migrate eslint
bunx ultracite migrate prettier
bunx ultracite migrate biomeManual migration:
biome.json with equivalent rulesFor complete migration guides with detailed rule mappings, see: references/migration-guides.md
CSS/SCSS: Biome does not lint CSS. Workaround: Use Stylelint
Framework gaps: Limited Angular/Astro support. Workaround: Use ultracite/core + manual rules
ESLint plugins: Many ESLint plugins have no Biome equivalent. Workaround: Run ESLint alongside Ultracite for specific plugins
File types: No Markdown, YAML, HTML linting. Workaround: Use dedicated tools (markdownlint, yamllint, htmlhint)
For complete list of limitations and detailed workarounds, see: references/limitations-and-workarounds.md
Common issues:
biome.jsonbunx instead of global installFor complete troubleshooting guide, see: references/troubleshooting.md
See scripts/install-ultracite.sh for automated setup.
See scripts/migrate-to-ultracite.sh for ESLint/Prettier migration.
See references/ directory for:
configuration-guide.md: Framework presets and rule detailsgit-hooks-setup.md: Husky, Lefthook, lint-staged setupai-editor-integration.md: Cursor, Claude Code, Copilot rulesmonorepo-configuration.md: Turborepo, Nx, pnpm workspacesmigration-guides.md: ESLint, Prettier, Biome migrationtroubleshooting.md: Common issues and solutionslimitations-and-workarounds.md: Known gaps and fixesCurrent versions (verified 2025-11-27):
ultracite: latest@biomejs/biome: >=1.9.0Check for updates:
npm view ultracite version
npm view @biomejs/biome versionUpdate:
bun update ultracite @biomejs/biomeOfficial Documentation:
Examples:
Troubleshooting:
Community:
Load reference files on-demand based on user questions or task requirements:
references/provider-biome.md: When user asks about:
ultracite/biome/*)references/provider-eslint.md: When user asks about:
references/provider-oxlint.md: When user asks about:
references/v6-migration.md: When user asks about:
references/v7-migration.md: When user asks about:
ultracite/core → ultracite/biome/core)ultracite doctor commandreferences/mcp-integration.md: When user asks about:
references/ai-hooks.md: When user asks about:
references/configuration-guide.md: When user asks about:
references/git-hooks-setup.md: When user asks about:
references/ai-editor-integration.md: When user asks about:
references/monorepo-configuration.md: When user asks about:
references/migration-guides.md: When user asks about:
references/troubleshooting.md: When user asks about:
references/limitations-and-workarounds.md: When user asks about:
Ultracite provides a unified linting and formatting solution with multi-provider support:
✅ Use when:
⚠️ Consider alternatives when:
Key advantages:
Installation:
bun x ultracite init --linter biome # Default (v7+)
bun x ultracite init --linter eslint # ESLint provider (v7+)
bun x ultracite init --linter oxlint # Oxlint provider (v7+)Most common workflow:
bun x ultracite initRemember:
strictNullChecks in TypeScript projects