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
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
Install
- Works in
In your terminal, with SkillFoxx CLI
npx skillfoxx add skills/oxc-migration-skillsDetects the agents on your machine, shows the access level and pins the version.
Other ways to install
Access and checks
How we reviewExtended 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 CILimitations
- 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.
Related
SkillsA skill that installs a set of Oxlint rules catching low-quality TypeScript and JavaScript patterns often left by code generation
A zero-config linter and formatter for JavaScript and TypeScript, with ready presets for dozens of AI agents and editors
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
A skill set from the Kotlin team for agents: Java to Kotlin conversion, build migrations and correct use of backend frameworks
agnix lints CLAUDE.md, AGENTS.md, SKILL.md, hooks and MCP configs with 702 rules, autofix and editor extensions for VS Code and JetBrains
Orval skill for agents
Orval skill
The official Orval skill: the agent sets up generation of TypeScript clients, Query hooks, Zod schemas and MSW mocks from an OpenAPI spec
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`.