Oxc (oxlint and oxfmt)

Oxc is a collection of high-performance JavaScript and TypeScript tools written in Rust, including oxlint (a fast linter) and oxfmt (a fast formatter).

Good to know: 

This guide assumes you're using create-turbo or a repository with a similar structure.

Using Oxc tools with Turborepo

Similar to Biome, oxlint and oxfmt are extraordinarily fast tools. For this reason, we recommend using Root Tasks rather than creating separate scripts in each of your packages.

Caching behavior

Using oxlint or oxfmt at the root of the project will result in cache misses for all tasks when you upgrade versions or change configuration. If you prefer the tradeoff of higher cache hit ratios in these situations over less configuration, you can still run these tools in separate scripts like the other recommendations in our guides.

Setting up oxlint

Install oxlint

First, install oxlint in your repository:

Terminal
pnpm add --save-dev oxlint

Create scripts

Add scripts to the root package.json of your repository:

./package.json
{
  "scripts": {
    "lint": "oxlint .",
    "lint:fix": "oxlint --fix ."
  }
}

Create root tasks

Register the scripts to Turborepo as Root Tasks:

Turborepo logo
./turbo.json
{
  "tasks": {
    "//#lint": {},
    "//#lint:fix": {}
  }
}

You can now run turbo run lint to lint your entire repository.

Using an ignore file

For monorepos, you may want to exclude certain directories from linting. Create an .oxlintignore file at the root of your repository:

./.oxlintignore
# Dependencies and build outputs
node_modules/
.next/
dist/

# Test fixtures
**/__fixtures__/

Then reference it in your scripts:

./package.json
{
  "scripts": {
    "lint": "oxlint --ignore-path .oxlintignore .",
    "lint:fix": "oxlint --ignore-path .oxlintignore --fix ."
  }
}

Setting up oxfmt

oxfmt is a fast code formatter for JavaScript and TypeScript, designed to be a drop-in replacement for Prettier.

oxfmt is experimental

oxfmt is currently in alpha and may not have full feature parity with Prettier. Check the oxfmt documentation for the latest status and supported options.

Install oxfmt

Install oxfmt as a dev dependency:

Terminal
pnpm add --save-dev oxfmt

Create scripts

Add formatting scripts to the root package.json:

./package.json
{
  "scripts": {
    "format": "oxfmt --check",
    "format:fix": "oxfmt ."
  }
}

Create root tasks

Register the scripts to Turborepo:

Turborepo logo
./turbo.json
{
  "tasks": {
    "//#format": {},
    "//#format:fix": {}
  }
}

You can now run turbo run format to check formatting and turbo run format:fix to format your code.

Using oxlint and oxfmt together

For repositories using both tools, you can orchestrate them with a unified quality task:

./package.json
{
  "scripts": {
    "lint": "oxlint --ignore-path .oxlintignore .",
    "lint:fix": "oxlint --ignore-path .oxlintignore --fix .",
    "format": "oxfmt --check",
    "format:fix": "oxfmt ."
  }
}
Turborepo logo
./turbo.json
{
  "tasks": {
    "//#quality": {
      "dependsOn": ["//#lint", "//#format"]
    },
    "//#quality:fix": {
      "dependsOn": ["//#lint:fix", "//#format:fix"]
    },
    "//#lint": {},
    "//#lint:fix": {},
    "//#format": {},
    "//#format:fix": {}
  }
}

With this configuration:

  • Run turbo run quality to check both linting and formatting
  • Run turbo run quality:fix to fix both linting and formatting issues