---
title: Setup
description: Install Ultracite with your preferred package manager, choose the right presets, and generate editor and agent config for your project.
---

Ultracite can be installed with all major package managers. You'll need Node.js 20.19+ (or 22.13+ on Node 22) and a project with a `package.json` file. If you're new to Ultracite, the [introduction](/docs) covers what it is and which toolchains it supports.

## Installation

The easiest way to get started is to run Ultracite's `init` script, which will install the necessary packages and set up the config files for you. In your project directory, run:

```package-install
npx ultracite init
```

You can optionally pass the following flags to the `init` command:

| Flag | Description | Options |
| --- | --- | --- |
| `--linter` | The linting toolchain to use. When omitted and prompts are skipped, init keeps the linter the project already uses, or picks `oxlint` for a project without one. | `oxlint`, `biome`, `eslint` |
| `--pm` | The package manager to use. | `pnpm`, `bun`, `yarn`, `npm`, `deno`, `nub`, `aube` |
| `--frameworks` | The frameworks to configure. | Space-separated: `react`, `next`, `solid`, `vue`, `svelte`, `qwik`, `remix`, `tanstack`, `angular`, `astro`, `nestjs`, `jest`, `vitest` |
| `--editors` | The editors to configure. | Space-separated: `universal`, `vscode`, `cursor`, `windsurf`, `antigravity`, `kiro`, `trae`, `void`, `bob`, `codebuddy`, `zed`. Use `universal` to write `.vscode/settings.json` for every VS Code-based editor. |
| `--agents` | The AI agents to configure. | Space-separated: `universal`, `claude`, `codex`, `jules`, `replit`, `devin`, `lovable`, `zencoder`, `ona`, `openclaw`, `continue`, `snowflake-cortex`, `deepagents`, `qoder`, `kimi-cli`, `mcpjam`, `mux`, `pi`, `adal`, `copilot`, `cline`, `amp`, `aider`, `firebase-studio`, `open-hands`, `gemini`, `junie`, `augmentcode`, `bob`, `kilo-code`, `goose`, `roo-code`, `warp`, `droid`, `opencode`, `crush`, `qwen`, `amazon-q-cli`, `firebender`, `cursor-cli`, `mistral-vibe`, `vercel` |
| `--hooks` | The agent hooks to configure. | Space-separated: `cursor`, `windsurf`, `codebuddy`, `claude`, `copilot` |
| `--integrations` | Additional integrations to set up. | Space-separated: `husky`, `lefthook`, `lint-staged`, `pre-commit` |
| `--install-skill` | Install the reusable Ultracite skill after setup. | (no value needed) |
| `--js-plugins` | Optional Oxlint JS plugins to enable. | Space-separated: `@shadcn/lint`, `anti-slop`, `eslint-plugin-github`, `eslint-plugin-sonarjs`, `oxlint-plugin-react-doctor` |
| `--type-aware` | Enable type-aware linting. Adds project/scanner rules for Biome, installs `oxlint-tsgolint` for Oxlint. | (no value needed) |
| `--skip-install` | Skip installing dependencies. | (no value needed) |
| `--quiet` | Suppress interactive prompts and progress output. | (no value needed, automatically enabled in CI) |

Prompts are skipped when you pass `--quiet` or any of `--pm`, `--editors`, `--agents`, `--hooks`, `--integrations`, or `--frameworks`, so you can re-run `init` with just `--hooks` or `--agents` to add those to a project without changing its linter. In the interactive prompt, the linter the project already uses is preselected.

`init` checks every flag value before it changes anything. An unknown value (for example, `--linter eslnt`) stops it with a list of the valid values.

### Programmatic Usage

For tools that need to call Ultracite programmatically (like scaffolding CLIs), you can use the `--quiet` flag to suppress interactive prompts and progress output:

```bash title="Terminal"
npx ultracite init --quiet --pm npm
```

The `--quiet` flag is automatically enabled when the `CI` environment variable is set to `true` or `1`, making it suitable for CI/CD pipelines:

```bash title="Terminal"
CI=true npx ultracite init --pm npm
```

In quiet mode, Ultracite will:

- Skip all interactive prompts
- Keep the project's current linter, or use Oxlint + Oxfmt for a project without one
- Suppress the intro banner, spinners, and progress messages (warnings, such as a config file it couldn't update, and errors still print)
- Only set up editors, agents, hooks, Git hooks, and the skill when you pass their flags
- Exit with code 0 on success or 1 on failure

You can combine `--quiet` with `--linter` to specify a toolchain:

```bash title="Terminal"
npx ultracite init --quiet --linter eslint --pm npm
```

### Usage with Tailwind CSS

If you use Tailwind CSS, it's recommended to install the [Tailwind CSS IntelliSense](https://marketplace.visualstudio.com/items?itemName=bradlc.vscode-tailwindcss) extension for class sorting and hints:

```bash title="Terminal"
code --install-extension bradlc.vscode-tailwindcss
```
