12k
All articles

Обзор JavaScript Oxidation Compiler

Oxc простыми словами: Rust-инструменты для JavaScript и TypeScript, Oxlint, Oxfmt, трансформер, минификатор и сравнение с ESLint, Prettier, SWC и Biome.

OpenReplay Team
OpenReplay Team
Обзор JavaScript Oxidation Compiler

Oxc, или JavaScript Oxidation Compiler, — это набор высокопроизводительных инструментов для JavaScript и TypeScript, написанных на Rust и построенных на общем парсере и AST, благодаря чему линтер, форматтер, трансформер, минификатор и резолвер никогда не парсят ваш код повторно и по отдельности.

Если вы когда-нибудь запускали линтинг большого монорепозитория, уходили за кофе и, вернувшись, обнаруживали, что процесс всё ещё идёт, — вы уже понимаете, почему переписывание JavaScript-тулчейна на Rust привлекло столько внимания. Это ожидание, помноженное на каждого разработчика и каждую CI-задачу, и есть главная причина существования Oxc.

Это компиляторный слой, лежащий в основе тулчейна VoidZero, а начиная с Vite 8 — механизм, который выполняет всю фактическую работу с языком внутри каждой сборки Vite.

Если ваш конвейер ESLint/Babel/Prettier работает медленно и вы следите за волной Rust-инструментов (esbuild, SWC, Biome, Oxc), практический вопрос не в том, «быстр ли Oxc?». Вопрос в том, «какие части готовы к продакшену уже сегодня и как они соотносятся с тем, что у меня уже используется?». Эта статья отвечает именно на это: что такое Oxc, что в него входит, что можно безопасно внедрять прямо сейчас и как он выглядит на фоне альтернатив.

Ключевые выводы

  • Oxc — это набор инструментов для JavaScript/TypeScript на Rust: парсер, линтер (Oxlint), форматтер (Oxfmt), трансформер, минификатор и резолвер, использующие единый парсер и AST.
  • Oxlint — главная звезда: стабильный линтер версии 1.x, который, по бенчмаркам проекта, работает в 50–100 раз быстрее ESLint, с 844 встроенными правилами и уже доступным линтингом с учётом типов.
  • Oxc уже косвенно работает в продакшене: Rolldown 1.0 стал стабильным 7 мая 2026 года, а Vite 8 использует Oxc для трансформаций JavaScript и минификации JavaScript, тогда как минификацией CSS занимается Lightning CSS.
  • Oxfmt достиг стадии beta и теперь полностью соответствует Prettier по всему набору тестов на соответствие для JavaScript и TypeScript, хотя версионирование по-прежнему 0.x.
  • Наименее рискованный путь внедрения — запускать Oxlint как быстрый линтер первого прохода параллельно с ESLint в CI.

Что такое Oxc, JavaScript Oxidation Compiler?

Oxc — это набор нативных Rust-инструментов для JavaScript и TypeScript, использующих единый парсер и AST, благодаря чему поведение остаётся согласованным, а ни один из инструментов не дублирует работу по парсингу. Название отсылает к Rust: ржавчина (rust) — это то, во что превращается металл при окислении. Скорость здесь рассматривается не как приятный побочный эффект, а как то, что проект обязан поставлять: более быстрый линтер означает более плотный цикл «правка — проверка» локально и меньший счёт за CI.

Причина, по которой Oxc значим за пределами собственных CLI, в том, что он является компилятором под современным стеком Vite. Rolldown — это бандлер на Rust, и всю работу уровня языка, включая парсинг и минификацию, он передаёт Oxc. Начиная с Vite 8, все три слоя разрабатываются командами, работающими согласованно: Vite как инструмент сборки, Rolldown как бандлер и Oxc как компилятор под обоими. Так что даже разработчики, которые никогда не устанавливали ни один пакет Oxc, запускают его парсер и трансформер при каждой сборке.

Есть и контекст владения, о котором стоит знать, прежде чем ставить на него свой конвейер. 4 июня 2026 года Cloudflare объявила о покупке VoidZero — open-source-компании, которая поддерживает Vite и связанный инструментарий, включая Oxc. Обе стороны заявляют, что проекты остаются открытыми и вендор-нейтральными: Vite, Vitest, Rolldown, Oxc и Vite+ сохраняют лицензии MIT, а Cloudflare вложила 1 миллион долларов в независимый фонд для мейнтейнеров и контрибьюторов Vite. Сама VoidZero была основана в 2023 году создателем Vue.js Эваном Ю.

Компоненты и что каждый из них заменяет

Oxc поставляется отдельными компонуемыми частями, поэтому можно внедрить одну без остальных. Каждая нацелена на медленного предшественника, написанного на JavaScript:

КомпонентЗаменяетРоль
OxlintESLintЛинтер для JS/TS
OxfmtPrettierФорматтер кода
ParserAcorn / @babel/parser / парсинг tscОбщий AST для всех инструментов
TransformerBabel / транспиляция tsc / transform в esbuildПонижение TS, JSX, современного JS
MinifierTerser / minify в esbuildМинификация для продакшена
Resolverenhanced-resolveРазрешение модулей

Парсер — это опора. Все остальные компоненты читают его вывод, и именно поэтому Oxc может позиционировать себя как единый тулчейн, а не как шесть инструментов, которые просто написаны на Rust.

Почему Oxc быстрый?

Скорость Oxc обусловлена архитектурой, а не микрооптимизациями. Основную работу делают три решения. Во-первых, это скомпилированный Rust, а не интерпретируемый JavaScript, поэтому горячие пути выполняются на нативной скорости и без пауз на сборку мусора. Во-вторых, все инструменты работают с одним общим AST, что устраняет избыточный повторный парсинг, который возникает, когда ESLint, Prettier и Babel парсят один и тот же файл по отдельности. В-третьих, узлы AST размещаются в арене памяти для дешёвой массовой очистки, а анализ распараллеливается по ядрам процессора.

Выигрыш измерен, но цифры — это собственные бенчмарки проекта, так что относитесь к ним соответствующе. VoidZero сообщает, что Oxlint в 50–100 раз быстрее ESLint, пропускная способность Oxfmt в 30 и более раз выше, чем у Prettier, и где-то в 2–3 раза выше, чем у Biome, при первом запуске без кэша, а Rolldown даёт сборки до 10–30 раз быстрее, чем Rollup. Цифра по Biome представлена диапазоном, потому что собственные источники Oxc расходятся: документация форматтера указывает 2×, анонс беты — 3×. Разные бенчмарки на разных машинах дадут разные результаты; масштаб выигрыша реален, но точный множитель остаётся маркетингом, пока вы не проверите его на своём репозитории.

Что в Oxc готово к продакшену сегодня?

Зрелость в Oxc зависит от того, как именно вы используете каждый инструмент. Oxlint и парсер по-настоящему готовы к продакшену как самостоятельные компоненты; трансформер и минификатор имеют версии до 1.0 в качестве CLI, но уже работают в продакшене внутри Rolldown и Vite 8; Oxfmt находится в бете.

КомпонентСтатусКак использовать сегодня
OxlintСтабильный, 1.xУстановить напрямую; запускать в CI
ParserГотов к продакшенуОснова под Rolldown/Vite
TransformerДо 1.0 как самостоятельныйРаботает в сборках Vite 8
MinifierДо 1.0 как самостоятельныйПо умолчанию в Rolldown
OxfmtBeta, 0.xПилот параллельно с Prettier

Oxlint — явный фаворит. Стабильная версия 1.0 вышла в июне 2025 года, в релизных заметках в качестве продакшен-пользователей упомянуты Shopify, Airbnb и Mercedes-Benz, а сейчас проект находится на линии 1.x с 844 встроенными правилами. Oxlint также поддерживает линтинг с учётом типов: бэкенд tsgolint подключает собственную систему типов TypeScript к CLI и формату конфигурации Oxlint и покрывает 59 из 61 правила с учётом типов, которые поставляет typescript-eslint. Честные оговорки: это opt-in, требуется установить отдельный пакет oxlint-tsgolint рядом с Oxlint, а номера версий этого пакета соответствуют релизу TypeScript, под который он собран, а не версиям Oxlint, так что они двигаются по разным графикам. Команда также закрыла дверь для правил за пределами набора typescript-eslint, пока работает над покрытием и производительностью, что пока исключает пользовательские правила с учётом типов.

Не читайте фразу «трансформер и минификатор имеют версии до 1.0» как «не готовы к продакшену». Оба уже работают под каждой сборкой Vite 8. Руководство по миграции на Vite 8 прямо описывает разделение труда: Oxc перенял у esbuild трансформацию JavaScript и минификацию JavaScript, а Lightning CSS стал вариантом по умолчанию для минификации CSS. Oxfmt, в свою очередь, перешёл из альфы в бету и теперь полностью проходит весь набор тестов на соответствие Prettier для JavaScript и TypeScript, но npm по-прежнему помечает его как Beta, так что это пилот, а не полномасштабный отказ от Prettier.

Как Oxc соотносится с SWC и Biome

Самая распространённая ошибка в сравнениях — противопоставлять Oxc и SWC по скорости. Они занимают разные слои. SWC — это компиляторная платформа, которую встраивают фреймворки: Next.js владеет своим стыком с SWC, и вырывать его ради красивого графика бенчмарков не стоит. Трансформер Oxc конкурирует с SWC и Babel, но у SWC нет собственного линтера или форматтера, поэтому Oxlint конкурирует с ESLint и Biome, а не с SWC. Biome — более близкий соперник: Rust-инструмент, который делает и линтинг, и форматирование в одном бинарнике, тогда как Oxc сохраняет Oxlint и Oxfmt как отдельные компонуемые части.

С учётом этого прагматичный шаг — внедрить Oxlint сейчас и наблюдать за остальным. Запускайте его как быстрый первый проход в CI, сохранив ESLint для правил и плагинов, которые он пока не покрывает:

{
  "scripts": {
    "lint:fast": "oxlint",
    "lint": "oxlint && eslint ."
  }
}

Чтобы уменьшить дублирование, документация рекомендует @oxlint/migrate для конвертации существующей конфигурации ESLint, а также eslint-plugin-oxlint для отключения правил, которые Oxlint уже обрабатывает. Так вы получаете выигрыш в скорости на быстром пути, не теряя покрытия ESLint при полном прогоне.

Oxc перешёл из категории «многообещающий Rust-проект» в инфраструктуру, от которой уже зависят миллионы сборок, но не равномерно по всей своей поверхности. Начните с Oxlint (стабильный, быстрый и малорисковый рядом с вашим текущим линтером), опробуйте Oxfmt в отдельной ветке, чтобы оценить diff, и позвольте трансформеру и минификатору дойти до вас через Vite 8, а не внедряйте их отдельно. Пересматривайте компоненты версий до 1.0 по мере их выпуска; направление движения достаточно очевидно, чтобы строить планы.

FAQ

Можно ли использовать Oxlint и ESLint вместе или нужно выбрать что-то одно?

Можно использовать оба, и именно такой путь внедрения рекомендуется. Применяйте Oxlint как быстрый первый проход в CI и сохраняйте ESLint для правил и плагинов, которые Oxlint пока не покрывает. Документация Oxc указывает на '@oxlint/migrate' для конвертации существующей конфигурации ESLint и 'eslint-plugin-oxlint' для отключения правил ESLint, которые Oxlint уже обрабатывает, что устраняет дублирование работы при одновременном использовании двух линтеров.

Заменяет ли Oxc SWC и стоит ли убирать SWC из Next.js ради него?

Нет. Трансформер Oxc конкурирует с SWC и Babel, но не стоит вырывать SWC из фреймворка, который его встраивает, например из Next.js, в погоне за бенчмарком. SWC — это компиляторная платформа, которой фреймворки владеют внутренне, и у SWC нет собственного линтера или форматтера, поэтому Oxlint конкурирует с ESLint и Biome, а не с SWC. Безопасная область внедрения — это Oxlint, а не замена встроенного компилятора фреймворка.

В чём разница между Oxc и Biome?

Biome — это единый Rust-бинарник, который выполняет и линтинг, и форматирование, тогда как Oxc сохраняет свой линтер (Oxlint) и форматтер (Oxfmt) как отдельные компонуемые части, которые можно внедрять независимо. Oxc также шире по охвату: в него входят парсер, трансформер, минификатор и резолвер, которые обеспечивают работу Rolldown и Vite 8, тогда как Biome сосредоточен на слое линтинга и форматирования. При первом запуске без кэша бенчмарки VoidZero показывают, что Oxfmt примерно в 2–3 раза быстрее Biome; документация Oxfmt и анонс беты приводят разные цифры для этого сравнения.

Меняет ли покупка VoidZero компанией Cloudflare статус Oxc как open source?

Нет. Cloudflare приобрела VoidZero 4 июня 2026 года, и обе компании заявляют, что проекты остаются открытыми и вендор-нейтральными. Vite, Vitest, Rolldown, Oxc и Vite+ сохраняют лицензии MIT, а Cloudflare выделила 1 миллион долларов в новый независимый фонд экосистемы Vite для мейнтейнеров и контрибьюторов, не связанных ни с VoidZero, ни с Cloudflare. Лицензия MIT означает, что существующие форки и варианты использования не затрагиваются независимо от смены владельца.

DevTools for the frontend

Gain Debugging Superpowers

Unleash the power of session replay to reproduce bugs, track slowdowns and uncover frustrations in your app. Get complete visibility into your frontend with OpenReplay — the most advanced open-source session replay tool for developers.

Star on GitHub12k

We use cookies to improve your experience. By using our site, you accept cookies.