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.
npx skills add https://github.com/secondsky/claude-skills --skill ultracite
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 + Oxfmt
Load 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 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 biome
package.json for react, next, vue, svelte, etc.tsconfig.json exists, note that Ultracite requires strictNullChecks: true ✅ 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 only
package.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 init
The interactive setup will:
biome.jsonc, .eslintrc.js, etc.).vscode/settings.json for editor integration10. Enable strictNullChecks 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 \
--quiet
Available 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 enabled
File structure:
project-root/
├── biome.jsonc # Main configuration
├── .vscode/settings.json # VS Code integration
├── tsconfig.json # TypeScript config (strictNullChecks required)
└── package.json
Minimal 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 errors
Fix 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-staged
Example .husky/pre-commit:
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
ultracite check --staged --write
For 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 editor
For 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 overrides
For 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 biome
Manual 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 version
Update:
bun update ultracite @biomejs/biome
Official 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:
When installing linting/formatting packages, follow supply chain security best practices:
npm config set ignore-scripts true (or Bun: disabled by default)socket package score npm <pkg> or use socket npm install <pkg> to check packagesLoad the dependency-upgrade skill for full security configuration including Socket CLI integration, cooldown setup, lockfile validation, and CI enforcement.
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 projectsExecute git commit with conventional commit message analysis, intelligent staging, and message generation. Use when user asks to commit changes, create a git commit, or mentions "/commit". Supports: (1) Auto-detecting type and scope from changes, (2) Generating conventional commit messages from diff, (3) Interactive commit with optional type/scope/description overrides, (4) Intelligent file staging for logical grouping
Comprehensive GitHub code review with AI-powered swarm coordination
Create high-quality git commits: review/stage intended changes, split into logical commits, and write clear commit messages (including Conventional Commits). Use when the user asks to commit, craft a commit message, stage changes, or split work into multiple commits.
Comprehensive truth scoring, code quality verification, and automatic rollback system with 0.95 accuracy threshold for ensuring high-quality agent outputs and codebase reliability.
GitHub CLI (gh) comprehensive reference for repositories, issues, pull requests, Actions, projects, releases, gists, codespaces, organizations, extensions, and all GitHub operations from the command line.
GitHub CLI - manage repositories, issues, pull requests, actions, releases, and more from the command line.
You are a code refactoring expert specializing in clean code principles, SOLID design patterns, and modern software engineering best practices. Analyze and refactor the provided code to improve its quality, maintainability, and performance.
You are a technical debt expert specializing in identifying, quantifying, and prioritizing technical debt in software projects. Analyze the codebase to uncover debt, assess its impact, and create acti
Take secondsky/ultracite from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.
The instructions reference npm, npx.
Without those the skill loads but fails at the first command.