Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
oxc-project avatar

Migrate Oxlint

  • 6k installs
  • 22.2k repo stars
  • Updated August 5, 2026
  • oxc-project/oxc

migrate-oxlint is an agent skill that converts JavaScript or TypeScript projects from ESLint to Oxlint using @oxlint/migrate and updated CI commands.

About

This skill walks through replacing ESLint with Oxlint in JavaScript or TypeScript projects using the @oxlint/migrate tool. Step one runs npx @oxlint/migrate against your flat ESLint config to emit .oxlintrc.json, with options for type-aware rules, nursery experiments, jsPlugins migration, and eslint-disable comment conversion. Step two reviews plugin mappings from typescript-eslint, react, import, unicorn, jsx-a11y, jest, vitest, and nextjs to built-in oxlint plugins and checks unmigrated rules with --details. Step three installs oxlint and optional oxlint-tsgolint for type-aware checks. Step four covers manual fixes for local plugins, eslint-plugin-prettier slowness, and override settings gaps. Step five swaps CI and package scripts from eslint to oxlint with equivalent --fix, --deny-warnings, and json formats. Tips note oxlint ignores .gitignore by default, supports parallel ESLint runs during transition, recommends the Oxc editor extension, and documents output formats including github, gitlab, and junit.

  • Automated ESLint flat config migration via npx @oxlint/migrate to .oxlintrc.json
  • Plugin mapping for TypeScript, React, import, unicorn, jsx-a11y, jest, vitest, and nextjs
  • Manual guidance for local jsPlugins, prettier conflicts, and override settings limits
  • CI script replacement from eslint to oxlint --fix with matching CLI flags
  • Type-aware rules via oxlint-tsgolint and --type-aware migration option

Migrate Oxlint by the numbers

  • 5,960 all-time installs (skills.sh)
  • +186 installs in the week ending Aug 5, 2026 (Skillselion tracking)
  • Ranked #34 of 1,352 Code Review & Quality skills by installs in the Skillselion catalog
  • Security screen: MEDIUM risk (skills.sh audit)
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
At a glance

migrate-oxlint capabilities & compatibility

Capabilities
eslint to oxlint config migration · plugin mapping review · ci script replacement · type aware lint setup · jsplugins manual migration
Use cases
code review · ci cd · refactoring
From the docs

What migrate-oxlint says it does

Oxlint is a high-performance linter that implements many popular ESLint rules natively in Rust.
SKILL.md
This reads your ESLint flat config (`eslint.config.js` for example) and generates a `.oxlintrc.json` file from it.
SKILL.md
Replace ESLint commands with oxlint.
SKILL.md
npx skills add https://github.com/oxc-project/oxc --skill migrate-oxlint

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs6k
repo stars22.2k
Security audit2 / 3 scanners passed
Last updatedAugust 5, 2026
Repositoryoxc-project/oxc

How do you switch a mature ESLint setup to Oxlint without losing rule coverage, plugins, or CI lint gates?

Migrate JavaScript or TypeScript projects from ESLint to Oxlint using @oxlint/migrate, update configs, and replace CI lint commands.

Who is it for?

Teams with ESLint flat configs who want faster Rust-native linting and a guided migration with plugin mapping tables.

Skip if: Projects with heavy custom ESLint plugins that lack oxlint equivalents and cannot move to jsPlugins, or repos with no ESLint config to migrate.

When should I use this skill?

User asks to migrate, convert, or switch a JavaScript or TypeScript project's linter from ESLint to Oxlint.

What you get

You get a generated .oxlintrc.json, installed oxlint packages, resolved plugin gaps, and CI scripts running oxlint instead of eslint.

  • .oxlintrc.json config
  • updated package scripts
  • CI lint commands using oxlint

By the numbers

  • Uses the official @oxlint/migrate migration CLI from oxc-project

Files

SKILL.mdMarkdownGitHub ↗

This 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

OptionDescription
--type-awareInclude type-aware rules from @typescript-eslint (will require the oxlint-tsgolint package to be installed after migrating)
--with-nurseryInclude 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)
--detailsList rules that could not be migrated
--replace-eslint-commentsConvert 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 PluginOxlint Plugin Name
@typescript-eslint/eslint-plugintypescript
eslint-plugin-react / eslint-plugin-react-hooksreact
eslint-plugin-import / eslint-plugin-import-ximport
eslint-plugin-unicornunicorn
eslint-plugin-jsx-a11y / eslint-plugin-jsx-a11y-xjsx-a11y
eslint-plugin-react-perfreact-perf
eslint-plugin-promisepromise
eslint-plugin-jestjest
@vitest/eslint-pluginvitest
eslint-plugin-jsdocjsdoc
eslint-plugin-nextnextjs
eslint-plugin-nodenode
eslint-plugin-vuevue

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 to prettier --check as a separate step alongside oxlint.
  • settings in override configs: Oxlint does not support settings inside overrides blocks.
  • 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

ESLintoxlint equivalent
eslint .oxlint (default: lints the cwd)
eslint src/oxlint src/
eslint --fixoxlint --fix
eslint --max-warnings 0oxlint --deny-warnings or --max-warnings 0
eslint --format jsonoxlint --format json

Additional oxlint options:

  • --tsconfig <path>: Specify tsconfig.json path, likely unnecessary unless you have a non-standard name for tsconfig.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-disable and // eslint-disable-next-line comments are supported by oxlint. Use --replace-eslint-comments when running @oxlint/migrate to convert them to // oxlint-disable equivalents if desired.
  • List available rules: Run npx oxlint --rules to see all supported rules, or refer to the rule documentation.
  • Schema support: Add "$schema": "./node_modules/oxlint/configuration_schema.json" to .oxlintrc.json for editor autocompletion if the migration tool didn't do it automatically.
  • Output formats: default, stylish, json, github, gitlab, junit, checkstyle, unix
  • Ignore files: .eslintignore is supported by oxlint if you have it, but it's recommended to move any ignore patterns into the ignorePatterns field in .oxlintrc.json for consistency and simplicity. All files and paths ignored via a .gitignore file will be ignored by oxlint by default as well.
  • If you ran the migration tool multiple times, remove the .oxlintrc.json.bak backup 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

Related skills

How it compares

Choose migrate-oxlint over manual rule spreadsheets when you need automated ESLint-to-Oxlint config translation for JS/TS repos.

FAQ

What command starts the automated migration?

Run npx @oxlint/migrate in the project root; it reads your ESLint flat config and writes .oxlintrc.json by default.

Can oxlint run alongside ESLint during transition?

Yes. Oxlint is designed to complement ESLint during migration until jsPlugins cover your remaining rules.

How do you enable type-aware TypeScript rules?

Run migration with --type-aware, then install oxlint-tsgolint as a dev dependency for rules needing type information.

Is Migrate Oxlint safe to install?

skills.sh reports 2 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.