
Migrate Oxlint
FreeSeamlessly transition from ESLint to Oxlint for your projects.
Free · Opens the source repo
What Migrate Oxlint does
Migrate Oxlint is a specialized skill designed to assist developers in transitioning their JavaScript or TypeScript projects from ESLint to Oxlint, a high-performance linter developed in Rust. This skill leverages the official migration tool, @oxlint/migrate, to automate the process, ensuring that your existing ESLint configuration is smoothly converted to the Oxlint format. By using this skill, developers can save time and reduce the complexity typically associated with migrating linting configurations.
The migration process begins with a simple command that scans your existing ESLint configuration file, typically named eslint.config.js, and generates a corresponding .oxlintrc.json file. This automation minimizes manual errors and helps maintain consistency in linting rules. The tool also provides options to include type-aware rules and experimental features, giving developers the flexibility to customize their migration according to their project needs.
After the automated migration, users are encouraged to review the generated configuration file to ensure all necessary rules are included. The skill also provides detailed output on any ESLint rules that could not be migrated, allowing developers to make informed decisions about their linting strategy moving forward. With Oxlint's support for core ESLint rules and its ability to map plugins automatically, developers can enjoy a seamless transition without losing the benefits of their previous linting setup.
This skill is ideal for developers looking to enhance their linting performance with Oxlint while ensuring a smooth transition from ESLint. It is particularly useful for teams and projects that rely heavily on linting for code quality and maintainability, as it streamlines the migration process and reduces the potential for disruption.
When to use it
Use this skill when you need to switch your project's linter from ESLint to Oxlint, especially if you're looking for improved performance.
When not to use it
This skill is not suitable if you are not currently using ESLint or if you prefer to maintain your existing ESLint setup without migration.
What you can build with it
Migrating a large codebase
When transitioning a large JavaScript project from ESLint to Oxlint, this skill automates the configuration process, saving significant time.
Integrating Oxlint into a new project
If starting a new TypeScript project, use this skill to set up Oxlint from the beginning, ensuring optimal linting performance.
Updating existing linting rules
When updating your linting rules, this skill helps migrate your current ESLint rules to Oxlint, maintaining consistency and quality.
How to install Migrate Oxlint
View source1. Install with the skills CLI
npx skills add oxc-project/oxc/migrate-oxlint --agent claude-code2. Or install it manually
Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.
Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs
Inside SKILL.md
Written by oxc-projectThis skill guides you through migrating a JavaScript/TypeScript project from ESLint to Oxlint.
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
Step 1: Run Automated Migration
Run the migration tool in the project root:
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:
npx @oxlint/migrate ./path/to/eslint.config.js
Step 2: Review Generated Config
After migration, review the generated .oxlintrc.json.
Plugin Mapping
The migration tool automatically maps ESLint plugins to oxlint's built-in equivalents. The following table is for reference when reviewing the generated config:
| ESLint Plugin | Oxlint Plugin Name |
|---|---|
@typescript-eslint/eslint-plugin | typescript |
eslint-plugin-react / eslint-plugin-react-hooks | react |
eslint-plugin-import / eslint-plugin-import-x | import |
eslint-plugin-unicorn | unicorn |
eslint-plugin-jsx-a11y / eslint-plugin-jsx-a11y-x | jsx-a11y |
eslint-plugin-react-perf | react-perf |
eslint-plugin-promise | promise |
eslint-plugin-jest | jest |
@vitest/eslint-plugin | vitest |
eslint-plugin-jsdoc | jsdoc |
eslint-plugin-next | nextjs |
eslint-plugin-node | node |
eslint-plugin-vue | vue |
Default plugins (enabled when plugins field is omitted): unicorn, typescript, oxc.
Setting the plugins array explicitly overrides these defaults.
ESLint core rules are usable in oxlint without needing to configure a plugin in the config file.
Rule Categories
Oxlint groups rules into categories for bulk configuration, though only correctness is enabled by default:
{
"categories": {
"correctness": "error",
"suspicious": "warn"
}
}
Available categories: correctness (default: enabled), suspicious, pedantic, perf, style, restriction, nursery.
Individual rule settings in rules override category settings.
@oxlint/migrate will turn correctness off to avoid enabling additional rules that weren't enabled by your ESLint config. You can choose to enable additional categories after migration if desired.
Check Unmigrated Rules
Run with --details to see which ESLint rules could not be migrated:
npx @oxlint/migrate --details
Review the output and decide whether to keep ESLint for those rules or not. Some rules may be mentioned in the output from --details as having equivalents in oxlint that were not automatically mapped by the migration tool. In those cases, consider enabling the equivalent oxlint rule manually after migration.
Step 3: Install Oxlint
Install the core oxlint package (use yarn install, pnpm install, vp install, bun install, etc. depending on your package manager):
npm install -D oxlint
If you want to add the oxlint-tsgolint package, if you intend to use type-aware rules that require TypeScript type information:
npm install -D oxlint-tsgolint
No other packages besides the above are needed by default, though you will need to keep/install any additional ESLint plugins that were migrated into jsPlugins. Do not add @oxlint/migrate to the package.json, it is meant for one-off usage.
Step 4: Handle Unsupported Features
Some features require manual attention:
- Local plugins (relative path imports): Must be migrated manually to
jsPlugins eslint-plugin-prettier: Supported, but very slow. It is recommended to use oxfmt instead, or switch toprettier --checkas a separate step alongside oxlint.settingsin override configs: Oxlint does not supportsettingsinsideoverridesblocks.- ESLint v9+ plugins: Not all work with oxlint's JS Plugins API, but the majority will.
Local Plugins
If you have any custom ESLint rules in the project repo itself, you can migrate them manually after running the migration tool by adding them to the jsPlugins field in .oxlintrc.json:
{
"jsPlugins": ["./path/to/my-plugin.js"],
"rules": {
"local-plugin/rule-name": "error"
}
}
External ESLint Plugins
For ESLint plugins without a built-in oxlint equivalent, use the jsPlugins field to load them:
{
"jsPlugins": ["eslint-plugin-custom"],
"rules": {
"custom/my-rule": "warn"
}
}
Step 5: Update CI and Scripts
Replace ESLint commands with oxlint. Path arguments are optional; oxlint defaults to the current working directory.
# Before
npx eslint src/
npx eslint --fix src/
# After
npx oxlint src/
npx oxlint --fix src/
Common CLI Options
| ESLint | oxlint equivalent |
|---|---|
eslint . | oxlint (default: lints the cwd) |
eslint src/ | oxlint src/ |
eslint --fix | oxlint --fix |
eslint --max-warnings 0 | oxlint --deny-warnings or --max-warnings 0 |
eslint --format json | oxlint --format json |
Additional oxlint options:
--tsconfig <path>: Specify tsconfig.json path, likely unnecessary unless you have a non-standard name fortsconfig.json.
Tips
- You can run alongside ESLint if necessary: Oxlint is designed to complement ESLint during migration, but with JS Plugins many projects can switch over fully without losing many rules.
- Disable comments work:
// eslint-disableand// eslint-disable-next-linecomments are supported by oxlint. Use--replace-eslint-commentswhen running @oxlint/migrate to convert them to// oxlint-disableequivalents if desired. - List available rules: Run
npx oxlint --rulesto see all supported rules, or refer to the rule documentation. - Schema support: Add
"$schema": "./node_modules/oxlint/configuration_schema.json"to.oxlintrc.jsonfor editor autocompletion if the migration tool didn't do it automatically. - Output formats:
default,stylish,json,github,gitlab,junit,checkstyle,unix - Ignore files:
.eslintignoreis supported by oxlint if you have it, but it's recommended to move any ignore patterns into theignorePatternsfield in.oxlintrc.jsonfor consistency and simplicity. All files and paths ignored via a.gitignorefile will be ignored by oxlint by default as well. - If you ran the migration tool multiple times, remove the
.oxlintrc.json.bakbackup file created by the migration tool once you've finished migrating. - If you are not using any JS Plugins and have replaced your ESLint configuration, you can remove all ESLint packages from your project dependencies.
- Ensure your editor is configured to use oxlint instead of ESLint for linting and error reporting. You may want to install the Oxc extension for your preferred editor. See https://oxc.rs/docs/guide/usage/linter/editors.html for more details.
References
Frequently asked questions about Migrate Oxlint
Similar skills
Quality Playbook Generator
Run comprehensive quality audits on any codebase.
PR Draft Summary
Automate PR summary generation for openai-agents-python.
Final Release Review
Streamline your release candidate audits with ease.
Unit Test Vue Pinia
Efficiently write and review unit tests for Vue 3 applications.
Slang Shader Expert
Optimize and integrate Slang shaders with ease.
Telemetry Standards
Ensure consistent event tracking in Supabase Studio.
