
Ultracite
FreeZero-config linting and formatting for JavaScript/TypeScript.
Free · Opens the source repo
What Ultracite does
Ultracite is designed to streamline the linting and formatting process for JavaScript and TypeScript projects with minimal configuration. This skill supports three linter backends: Biome, ESLint (with Prettier and Stylelint), and Oxlint, allowing users to choose the setup that best fits their workflow. By using Ultracite, developers can ensure their code adheres to consistent standards, improving code quality and maintainability.
The skill provides a straightforward command-line interface (CLI) to check for linting issues, auto-fix problems, and diagnose setup issues. Commands like check, fix, and doctor can be executed with ease, making it accessible even for those who may not be deeply familiar with linting tools. The interactive initialization process simplifies setting up Ultracite in new projects, allowing users to specify preferences such as package manager, linter choice, and frameworks, ensuring a tailored setup.
When writing or reviewing code in a project using Ultracite, developers are encouraged to follow specific code standards that promote clarity and modern practices. These standards emphasize type safety, modern JavaScript features, and best practices for React components, among others. Additionally, Ultracite helps troubleshoot common issues, guiding users to resolve conflicts with existing configurations and ensuring a smooth integration into their development workflow.
Overall, Ultracite is a valuable tool for JavaScript and TypeScript developers looking to enforce code quality without the overhead of complex configurations. It is particularly useful for teams aiming for consistency across their codebases, as well as individual developers who want to maintain high standards in their projects.
When to use it
Use Ultracite when setting up a new JavaScript or TypeScript project or when integrating linting and formatting into an existing codebase.
When not to use it
Avoid using Ultracite if you require a highly customized linting setup that deviates significantly from its provided presets.
What you can build with it
Setting Up a New Project
Use Ultracite to quickly initialize linting and formatting in a new JavaScript or TypeScript project with minimal configuration.
Enforcing Code Quality
Integrate Ultracite into your existing projects to ensure that all team members adhere to consistent coding standards.
Troubleshooting Linting Issues
Run the `doctor` command to identify and resolve common configuration problems related to linting and formatting.
How to install Ultracite
View source1. Install with the skills CLI
npx skills add haydenbleasel/ultracite/ultracite --agent claude-code2. Or install it manually
Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.
Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs
Inside SKILL.md
Written by haydenbleaselUltracite
Zero-config linting and formatting for JS/TS projects. Supports three linter backends: Biome (recommended), ESLint + Prettier + Stylelint, and Oxlint + Oxfmt.
Detecting Ultracite
Check if ultracite is in package.json dependencies or devDependencies. Detect the active linter by looking for (searching upward from the current directory):
biome.json/biome.jsonc→ Biomeeslint.config.*(.mjs,.js,.cjs,.ts,.mts,.cts) → ESLint (with Prettier for formatting)oxlint.config.ts→ Oxlint (withoxfmt.config.tsfor formatting)
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. Unknown options are passed through to the underlying linter (e.g. bunx ultracite check --max-warnings 0).
Initialization
bunx ultracite init runs an interactive setup. For non-interactive (CI) use, pass flags:
bunx ultracite init \
--pm bun \
--linter biome \
--editors universal \
--agents claude copilot \
--frameworks react next \
--integrations husky lint-staged \
--quiet
Flags:
--pm—npm|yarn|pnpm|bun--linter—biome(recommended) |eslint|oxlint--editors—universal(writes.vscode/settings.jsonfor every VS Code-based editor) |vscode|cursor|windsurf|codebuddy|antigravity|bob|kiro|trae|void|zed--agents—universal(writesAGENTS.md) |claude|codex|copilot|cline|amp|gemini|cursor-cli+ 34 more (41 agents supported)--frameworks—react|next|solid|vue|svelte|qwik|remix|tanstack|angular|astro|nestjs|jest|vitest--integrations—husky|lefthook|lint-staged|pre-commit--hooks— Enable auto-fix hooks:claude|copilot|cursor|windsurf|codebuddy--type-aware— Enable type-aware linting (Biome: extends thetype-awarepreset; Oxlint: installsoxlint-tsgolint)--install-skill— Install the reusable Ultracite skill after setup--skip-install— Skip dependency installation--quiet— Suppress prompts (auto-detected whenCI=true)
Init creates config that extends Ultracite presets:
// biome.jsonc
{ "extends": ["ultracite/biome/core", "ultracite/biome/react"] }
// eslint.config.mjs — arrays of flat configs, spread together
import core from "ultracite/eslint/core";
import react from "ultracite/eslint/react";
export default [...core, ...react];
// oxlint.config.ts — imports passed to extends
import { defineConfig } from "oxlint";
import core from "ultracite/oxlint/core";
export default defineConfig({
extends: [core],
ignorePatterns: core.ignorePatterns,
});
Presets available per linter (ultracite/<linter>/<preset>): core, react, next, solid, vue, svelte, qwik, remix, tanstack, angular, astro, nestjs, jest, vitest. Biome also has type-aware; Oxlint also has github and sonarjs (ESLint plugins run via oxlint's JS plugin support, included by default on init).
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 is handled by the project's configured linter/formatter. Respect the repository's existing formatter settings instead of forcing one fixed line width, quote style, or trailing comma policy.
Type safety: Use explicit types when they improve clarity. Prefer unknown over any. Use as const for immutable values and rely on type narrowing over blunt assertions.
Modern JavaScript/TypeScript: Prefer const, destructuring, optional chaining, nullish coalescing, template literals, for...of, and concise arrow functions.
Async and correctness: Always await promises in async functions. Prefer async/await over promise chains. Remove console.log, debugger, and alert from production code.
React and accessibility: Use function components, keep hooks top-level with correct deps, avoid nested component definitions, and use semantic HTML with the right labels, headings, alt text, and keyboard affordances.
Organization, security, performance, and testing: Keep functions focused, prefer early returns, avoid dangerouslySetInnerHTML and eval(), prefer specific imports and top-level regex, and keep tests free of .only and .skip.
Troubleshooting
Run bunx ultracite doctor to diagnose. It checks:
- Linter and formatter installation (Biome; or ESLint + Prettier + Stylelint; or Oxlint + oxfmt)
- Config validity (extends the ultracite presets correctly)
- Ultracite in package.json dependencies
- Conflicting tools (legacy
.eslintrc.*files;.prettierrc.*/prettier.config.*when not using the ESLint backend)
Common fixes:
- Conflicting configs: Delete legacy
.eslintrc.*and.prettierrc.*files after migrating to Ultracite - Missing dependency: Run
bunx ultracite initagain or manually addultraciteto devDependencies - Rules not applying: Ensure config file extends the correct presets for your framework
Frequently asked questions about Ultracite
Similar skills
Quality Playbook Generator
Run comprehensive quality audits on any codebase.
PR Draft Summary
Automate PR summary generation for openai-agents-python.
Final Release Review
Streamline your release candidate audits with ease.
Unit Test Vue Pinia
Efficiently write and review unit tests for Vue 3 applications.
Slang Shader Expert
Optimize and integrate Slang shaders with ease.
Telemetry Standards
Ensure consistent event tracking in Supabase Studio.
