Линтер Oxlint, написанный на Rust, в 50–100 раз быстрее привычного ESLint и работает сразу после установки. Разбираем, когда миграция оправдана, а когда лучше подождать.
ESLint — это де-факто стандарт статического анализа JavaScript-кода. Инструмент работает поверх Node.js и V8, поддерживает сотни плагинов и позволяет настраивать правила под любой проект. По данным опроса State of JavaScript 2025, ESLint остаётся самым популярным вспомогательным инструментом среди фронтенд-разработчиков.
Новый проект развивается в рамках экосистемы Oxc, поддерживаемой командой VoidZero.
Ключевые выводы
Oxlint на Rust обгоняет ESLint в 50–100 раз на крупных репозиториях вроде Vue Core и React Router.
Из коробки включено 107 правил, тогда как ESLint требует ручной настройки даже для базовых сценариев.
Поддержка ESLint-плагинов экспериментальная, но список доступных правил постоянно растёт.
Миграция возможна постепенно: оба линтера можно запускать параллельно.
Если ваш проект завязан на редкие плагины или пользовательские правила — спешить не стоит.
Почему ESLint начинает раздражать
Несмотря на зрелость экосистемы, у ESLint накопился приличный багаж архитектурных ограничений:
- Производительность. Код ESLint выполняется в однопоточном режиме поверх JavaScript-движка. В небольших проектах это незаметно, но в монорепозиториях с сотнями тысяч строк проверка легко растягивается на две минуты и больше.
- Конфигурационный ад. Новичкам приходится разбираться в иерархии конфигов, flat config, shared presets и compatibility layers. Документация исчерпывающая, но порог входа остаётся высоким.
- Минимум из коробки. Базовая установка ESLint практически ничего не проверяет. Для получения хоть какой-то пользы нужно ставить плагины, изучать правила и собирать конфигурацию с нуля — в отличие от Prettier или Biome, которые работают сразу после установки.
Чем Oxlint лучше привычного линтера
Скорость, которую можно измерить
Главное преимущество Oxlint — скорость. В тестах на репозитории Vue Core с type-aware правилами Oxlint справляется за 1,3 секунды, тогда как ESLint с typescript-eslint тратит 133,8 секунды. Это почти в 100 раз быстрее. На репозитории React Router разрыв меньше, но всё равно впечатляет: 435 мс против 29,5 с — ускорение в 68 раз.
Type-aware линтинг без тормозов
ESLint для type-aware правил использует typescript-eslint, который перед проверкой запускает полный анализ через tsc. Это наследует все накладные расходы компилятора TypeScript. Oxlint делает это иначе: type-aware функциональность реализована через oxlint-tsgolint на Go, который в связке с TypeScript 7 и компилятором tsgo работает в 20–40 раз быстрее привычного пайплайна.
Настройка за минуту, а не за час
После установки Oxlint сразу активирует 107 правил. Конфигурация проще, документация понятнее, а сообщения об ошибках структурированы так, что и человек, и LLM-ассистент разберутся с первого взгляда.
Постепенная миграция без боли
Oxlint не требует выбросить ESLint в один день. Инструменты можно запускать параллельно: Oxlint берёт быструю проверку на pre-commit, а ESLint остаётся в CI до полного перехода. Экспериментальная поддержка JavaScript-плагинов ESLint уже работает, хотя и не покрывает всю экосистему.
Реальные цифры: бенчмарки на популярных репозиториях
Автор оригинального материала воспроизвёл тесты на ноутбуке HP EliteBook 1040 G7 (16 ГБ ОЗУ, 4 физических ядра, 8 потоков). Результаты для Vue Core с type-aware правилами:
============================================Vue Core Benchmark - Type-Aware Rules============================================Benchmark 1: oxlintTime (mean ± σ): 1.343 s ± 0.154 sRange (min … max): 1.163 s … 1.538 s
Benchmark 2: eslintTime (mean ± σ): 133.864 s ± 23.217 sRange (min … max): 97.851 s … 162.867 s
Summary: oxlint ran 99.65 times faster than eslint
Результаты для React Router (без type-aware правил):
Benchmark 1: oxlintTime (mean ± σ): 434.9 ms ± 108.6 msRange (min … max): 306.7 ms … 610.0 msBenchmark 2: eslintTime (mean ± σ): 29.459 s ± 2.838 sRange (min … max): 26.508 s … 34.602 s
Summary: oxlint ran 67.74 times faster than eslint
Цифры подтверждают заявленные разработчиками 50–100-кратное ускорение. Для разработчика это разница между «пойду за кофе, пока линтер работает» и «результат на экране мгновенно».
Когда ESLint всё ещё нужен
Несмотря на впечатляющие цифры, спешить со сносом ESLint не всегда разумно. Вот сценарии, где старый инструмент остаётся предпочтительнее:
- Редкие плагины и пользовательские правила. Если ваш проект завязан на специфические ESLint-плагины, которых ещё нет в Oxlint, миграция потребует дополнительной работы.
- Малые проекты. В репозиториях до 10–20 тысяч строк разница между 1 секундой и 30 секундами линтинга не критична.
- Сложные рабочие процессы. Глубокая интеграция ESLint в CI/CD, пользовательские форматтеры и специфические пайплайны могут быть дорого переносить.
- Сообщество и экосистема. ESLint остаётся доминирующим линтером. Вокруг него больше обучающих материалов, примеров конфигураций и поддержки со стороны LLM-ассистентов.
Как мигрировать с ESLint на Oxlint
Команда Oxlint подготовила утилиту @oxlint/migrate, которая автоматически преобразует конфигурацию ESLint в формат Oxlint. Выбор пути зависит от текущего состояния проекта:
- Для ESLint v9/v10+ с flat config: запустите npx @oxlint/migrate — утилита преобразует поддерживаемые правила и сообщит о несовместимых.
- Для ESLint v8 и старше (в v10 поддержка legacy-конфигов полностью удалена): сначала мигрируйте на flat config через npx @eslint/migrate-config, затем примените @oxlint/migrate.
- Если нужны type-aware правила: добавьте флаг --type-aware к команде npx @oxlint/migrate и установите oxlint-tsgolint.
- Для экспериментальной поддержки JS-плагинов: используйте флаг --js-plugins в команде npx @oxlint/migrate.
- Не уверены в безопасности? Запустите оба линтера параллельно на несколько недель и сравните результаты.
Совет:
Начните миграцию с новых модулей или микрофронтендов, а не с устаревшего кода, где линтер и так давно отключён.
Часто задаваемые вопросы
Что такое Oxlint и чем он отличается от ESLint?
Oxlint — это линтер для JavaScript и TypeScript, написанный на Rust. В отличие от ESLint, который работает поверх Node.js, Oxlint компилируется в нативный код и использует параллельную обработку. Это даёт ускорение в 50–100 раз при схожей функциональности.
Поддерживает ли Oxlint ESLint-плагины?
Частично. Экспериментальная поддержка JavaScript-плагинов ESLint реализована через флаг --js-plugins. Oxlint уже покрывает более 650 правил из ядра ESLint, TypeScript, React, Jest и accessibility, но редкие плагины могут отсутствовать.
Как быстро проходит миграция?
Для проектов на ESLint v9+ с flat config миграция занимает минуты: утилита @oxlint/migrate автоматически преобразует конфигурацию. Для устаревших конфигов v8 потребуется промежуточный шаг через @eslint/migrate-config. Сложность растёт только при наличии кастомных правил и редких плагинов.
Стоит ли мигрировать прямо сейчас?
Если ваш проект крупный и linting заметно тормозит разработку — скорее да, чем нет. Если проект небольшой или во многом завязан на специфические ESLint-плагины — можно подождать полной совместимости. Oxlint и ESLint прекрасно уживаются параллельно, так что спешить необязательно.
Выводы
ESLint не умер, но его эпоха безраздельного господства подходит к концу. Oxlint демонстрирует, что статический анализ JavaScript может быть быстрым, простым в настройке и дружелюбным к разработчику. Для большинства современных проектов переход уже оправдан экономикой времени: сэкономленные минуты на каждом коммите за год превращаются в десятки часов продуктивной работы.
Для большинства современных проектов Oxlint — это уже не перспективная альтернатива, а вполне зрелый инструмент по умолчанию.
Boshenсоздатель Oxc, VP Engineering в VoidZero
Источник: LogRocket — Retire ESLint: How (and why) to migrate to Oxlint
Репозиторий проекта: github.com/oxc-project/oxc. Документация: oxc.rs.
Попробуйте запустить npx @oxlint/migrate на своём проекте и сравните цифры. Возможно, вы больше никогда не захотите ждать, пока закончится npm run lint.


