Productivity

ultracite

haydenbleasel/ultracite · updated Apr 8, 2026

$npx skills add https://github.com/haydenbleasel/ultracite --skill ultracite
summary

Zero-config linting and formatting for JavaScript/TypeScript with pluggable linter backends.

  • Supports three linter backends: Biome (recommended), ESLint + Prettier, and Oxlint + Oxfmt; auto-detects active linter from config files
  • CLI commands for checking issues, auto-fixing, diagnosing setup problems, and initializing new projects with interactive or non-interactive modes
  • Framework-specific presets available for React, Next, Vue, Svelte, Angular, Astro, NestJS, and others; extends v
skill.md

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:

  • --pmnpm | yarn | pnpm | bun
  • --linterbiome (recommended) | eslint | oxlint
  • --editorsvscode | zed | cursor | windsurf | antigravity | kiro | trae | void
  • --agentsclaude | codex | copilot | cline | amp | gemini | cursor-cli + 19 more
  • --frameworksreact | next | solid | vue | svelte | qwik | remix | angular | astro | nestjs
  • --integrationshusky | 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 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:

  1. Linter installation (biome/eslint/oxlint binary available)
  2. Config validity (extends ultracite presets correctly)
  3. Ultracite in package.json dependencies
  4. 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
general reviews

Ratings

4.510 reviews
  • Shikha Mishra· Oct 10, 2024

    ultracite is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.

  • Piyush G· Sep 9, 2024

    Keeps context tight: ultracite is the kind of skill you can hand to a new teammate without a long onboarding doc.

  • Chaitanya Patil· Aug 8, 2024

    Registry listing for ultracite matched our evaluation — installs cleanly and behaves as described in the markdown.

  • Sakshi Patil· Jul 7, 2024

    ultracite reduced setup friction for our internal harness; good balance of opinion and flexibility.

  • Ganesh Mohane· Jun 6, 2024

    I recommend ultracite for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.

  • Oshnikdeep· May 5, 2024

    Useful defaults in ultracite — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.

  • Dhruvi Jain· Apr 4, 2024

    ultracite has been reliable in day-to-day use. Documentation quality is above average for community skills.

  • Rahul Santra· Mar 3, 2024

    Solid pick for teams standardizing on skills: ultracite is focused, and the summary matches what you get after install.

  • Pratham Ware· Feb 2, 2024

    We added ultracite from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.

  • Yash Thakker· Jan 1, 2024

    ultracite fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.