Oxc migration skills for Oxlint and Oxfmt

Oxc migration skills

Two official Oxc skills: the agent moves a project from ESLint to the Oxlint linter and from Prettier or Biome to the Oxfmt formatter

  • 23,201 ★ on the repository
  • Last commit
  • MIT
SkillOfficial

Extended access

Why this level

  • The agent runs `npx @oxlint/migrate` and `npx oxfmt@latest` and installs packages into `devDependencies`, which means executing code from npm
  • Migration creates `.oxlintrc.json` and `.oxfmtrc.json` configs and edits commands in the project's scripts and CI
All reasons and checks

oxc-project/oxc

Install

In your terminal, with SkillFoxx CLI

npx skillfoxx add skills/oxc-migration-skills

Detects the agents on your machine, shows the access level and pins the version.

Other ways to install

Access and checks

How we review

Extended accessThe tool runs code or makes network calls and only reads external data.

  • The agent runs `npx @oxlint/migrate` and `npx oxfmt@latest` and installs packages into `devDependencies`, which means executing code from npm
  • Migration creates `.oxlintrc.json` and `.oxfmtrc.json` configs and edits commands in the project's scripts and CI

This is third-party code. Review the repository files before installing.

What it does

The Oxc repository ships two skills for users of the tools: `migrate-oxlint` moves a project from ESLint to the Oxlint linter, and `migrate-oxfmt` moves it from Prettier or Biome to the Oxfmt formatter. Both walk the agent through the steps and rely on the built-in migration commands. `migrate-oxlint` runs `npx @oxlint/migrate`: the tool reads a flat ESLint config and creates `.oxlintrc.json`. The flags `--type-aware`, `--with-nursery`, `--js-plugins`, `--details`, `--replace-eslint-comments` and `--output-file` change the result. The agent then checks the plugin map, where `@typescript-eslint` becomes `typescript`, reviews the list of rules that were not migrated, installs `oxlint` with `npm install -D oxlint`, adds `oxlint-tsgolint` for rules that need TypeScript types, moves local plugins into `jsPlugins` and replaces `eslint` calls in CI with `oxlint`. `migrate-oxfmt` runs `npx oxfmt@latest --migrate prettier` or `--migrate biome`: it creates `.oxfmtrc.json` and carries over `overrides`, patterns from `.prettierignore` and the options of the Tailwind, Svelte and Astro plugins. The agent then decides whether to keep `printWidth` at 80 or accept Oxfmt's default of 100, reviews `sortPackageJson`, optionally enables `sortImports` and `sortTailwindcss`, and changes the CI commands to `npx oxfmt@latest` and `npx oxfmt@latest --check`.

Who it is for. For JavaScript and TypeScript developers who are moving a project from ESLint, Prettier or Biome to the fast Oxc tools and hand the routine to an AI agent.

Good fit when

  • The project uses ESLint with a flat `eslint.config.js` and its rules need to move to Oxlint automatically
  • Prettier or Biome has to be replaced with Oxfmt while keeping formatting settings and ignore patterns
  • You want to know which ESLint rules do not migrate and decide whether to keep ESLint next to Oxlint for them: the `--details` flag shows it
  • CI calls to `eslint`, `prettier` and `biome` have to be replaced with Oxlint and Oxfmt commands
  • You also want to turn on import sorting or Tailwind class sorting with Oxfmt

Not a fit when

  • The ESLint config is still in the old `.eslintrc` format: the skill describes migration from a flat `eslint.config.js`
  • The Prettier config is written in YAML, JSON5 or TOML: the `--migrate` command does not read these formats, so convert it to JSON or JS first
  • You write linter rules or change the code of Oxc itself: the other skills in `.agents/skills` (`insta-snapshots`, `performance-lint-rules`) are for developers of this repository

Example request

Move this project from ESLint to Oxlint: run the migration, show me the rules that did not carry over and replace the eslint call in CI

Limitations

  • Automatic migration is partial: `@oxlint/migrate` and `oxfmt --migrate` skip what they do not support and print warnings. The `--details` flag prints the list of ESLint rules that were not migrated, and whether to keep ESLint for them is up to you.
  • A dynamic Prettier config with environment branching migrates as a snapshot of values, and the logic has to be ported by hand to `oxfmt.config.ts`. The `--migrate` command does not walk nested configs: it runs in each folder separately. Biome `overrides` are manual too.
  • Oxfmt migration fails if an Oxfmt config already exists next to the old one. In Oxlint, `settings` inside `overrides` are not supported, local plugins move by hand into `jsPlugins`, and some plugins for ESLint 9 and newer do not work with its JS plugins API.
  • Prettier and Biome default `printWidth` to 80 and Oxfmt to 100, and the migration tool writes 80 until you decide otherwise. Oxfmt's key order for `sortPackageJson` differs from `prettier-plugin-packagejson`.
  • The documentation gives the skill install commands but names no agent clients. MIT license.

How to disable. Delete the `migrate-oxlint` and `migrate-oxfmt` folders from the agent's skills directory. The migration result stays in the project: roll back the `.oxlintrc.json` and `.oxfmtrc.json` files, the `.oxlintrc.json.bak` backup and the changed CI commands with git.

FAQ

How do I install the Oxc skills?

The Oxc documentation gives `npx skills add https://github.com/oxc-project/oxc --skill migrate-oxlint` for the linter and `npx skills add https://github.com/oxc-project/oxc --skill migrate-oxfmt` for the formatter. The skills live in the repository's `.agents/skills` folder.

What does npx @oxlint/migrate do?

The command finds a flat ESLint config, usually `eslint.config.js`, and builds `.oxlintrc.json` from it. You can pass the config path as an argument, and `--output-file` changes the name of the result. The package is needed once, and the skill advises against adding `@oxlint/migrate` to `package.json`.

How do I move from Biome to Oxfmt?

`npx oxfmt@latest --migrate biome` reads `biome.json` or `biome.jsonc` and maps the options: `indentStyle` becomes `useTabs`, `lineWidth` becomes `printWidth`, `quoteStyle` becomes `singleQuote`. Options not set in Biome are written to `.oxfmtrc.json` with Biome's defaults, so the formatting is preserved.

Can I keep ESLint next to Oxlint?

Yes. According to the skill, Oxlint is designed to complement ESLint during migration, and it understands `eslint-disable` comments. The `--replace-eslint-comments` flag rewrites them to `oxlint-disable`. Plugins without a built-in equivalent connect through the `jsPlugins` field.

Which CI commands should be replaced?

`eslint .` becomes `oxlint`, which lints the current folder by default, `eslint --fix` becomes `oxlint --fix`, and `eslint --max-warnings 0` becomes `oxlint --deny-warnings` or `--max-warnings 0`. For formatting, `prettier --write .` becomes `npx oxfmt@latest` and the check becomes `npx oxfmt@latest --check`.

Discussion

No questions or reviews yet.

Skills

A skill that installs a set of Oxlint rules catching low-quality TypeScript and JavaScript patterns often left by code generation

SkillExtended access5.7KRepository stars

A zero-config linter and formatter for JavaScript and TypeScript, with ready presets for dozens of AI agents and editors

CLIExtended access3.4KRepository stars

Builder Skills

Skills for agents

A set of small skills from Builder.io for agent work habits: visual plans and diff recaps, docs-first checks, cross-agent review and clean status updates

SkillExtended access4.6KRepository stars
Editors’ pick

A skill set from the Kotlin team for agents: Java to Kotlin conversion, build migrations and correct use of backend frameworks

PluginExtended access1.1KRepository stars
Official

agnix lints CLAUDE.md, AGENTS.md, SKILL.md, hooks and MCP configs with 702 rules, autofix and editor extensions for VS Code and JetBrains

CLIMinimal access457Repository stars
Official

The official Orval skill: the agent sets up generation of TypeScript clients, Query hooks, Zod schemas and MSW mocks from an OpenAPI spec

SkillExtended access6.6KRepository stars

README in short

The repository holds a set of JavaScript and TypeScript tools written in Rust: a parser, the Oxlint linter, the Oxfmt formatter, a transformer, a minifier and a module resolver. The linter and formatter apps are in `apps/`, npm builds in `npm/` and the engine sources in `crates/`. The front page gives the run commands `npx oxlint@latest` and `npx oxfmt@latest`, a list of projects that use Oxc and links to the documentation at oxc.rs. Agent skills are collected in `.agents/skills`, next to rules for the repository's own developers.

README badge

Original SKILL.md

---
name: migrate-oxlint
description: Guide for migrating a project from ESLint to Oxlint. Use when asked to migrate, convert, or switch a JavaScript/TypeScript project's linter from ESLint to Oxlint.
---

This skill guides you through migrating a JavaScript/TypeScript project from ESLint to [Oxlint](https://oxc.rs/docs/guide/usage/linter/).

## Overview

Oxlint is a high-performance linter that implements many popular ESLint rules natively in Rust. It can be used alongside ESLint or as a full replacement.

An official migration tool is available, and will be used by this skill: [`@oxlint/migrate`](https://github.com/oxc-project/oxlint-migrate)

## Step 1: Run Automated Migration

Run the migration tool in the project root:

```bash
npx @oxlint/migrate
```

This reads your ESLint flat config (`eslint.config.js` for example) and generates a `.oxlintrc.json` file from it. It will find your ESLint config file automatically in most cases.

See options below for more info.

### Key Options

| Option                      | Description                                                                                                                     |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| `--type-aware`              | Include type-aware rules from `@typescript-eslint` (will require the `oxlint-tsgolint` package to be installed after migrating) |
| `--with-nursery`            | Include experimental rules still under development, may not be fully stable or consistent with ESLint equivalents               |
| `--js-plugins [bool]`       | Enable/disable ESLint plugin migration via `jsPlugins` (default: enabled)                                                       |
| `--details`                 | List rules that could not be migrated                                                                                           |
| `--replace-eslint-comments` | Convert all `// eslint-disable` comments to `// oxlint-disable`                                                                 |
| `--output-file <file>`      | Specify a different output path (default: `.oxlintrc.json`)                                                                     |

If your ESLint config is not at the default location, pass the path explicitly:

```bash
npx @oxlint/migrate ./path/to/eslint.config.js
```

## Step 2: Review Generated Config

After migration, review the generated `.oxlintrc.json`.

Report a problem

Foxx AIOxc migration skills for Oxlint and Oxfmt
Foxx AI

I am Foxx AI and I have already vetted this tool. Ask about install, setup or anything else, and I will keep it simple.