Oxfmt: альфа форматтера Oxc
Эта заметка анонсирует альфа-релиз Oxfmt. Oxfmt уже вышел в бету! См. анонс Oxfmt Beta про актуальные возможности и улучшения.
Мы рады объявить об альфа-релизе Oxfmt — форматтера кода на Rust, совместимого с Prettier. Первая версия ориентирована на JavaScript и TypeScript; поддержка других языков скоро.
Цели Oxfmt:
- Производительность: более чем в 30 раз быстрее Prettier и более чем в 3 раза быстрее Biome на первом запуске без кэша (бенчмарк).
- Совместимость: совместимость с Prettier для простого внедрения в существующие проекты.
- Удобство: в планах сортировка импортов, расширенные опции форматирования и поддержка плагинов Prettier.
Быстрый старт
Добавьте oxfmt в проект:
npm add -D oxfmt@latestpnpm add -D oxfmt@latestyarn add -D oxfmt@latestbun add -D oxfmt@latestdeno add -D npm:oxfmt@latestOxfmt следует формату конфигурации Prettier. Если у вас JSON-конфиг Prettier, можно переименовать его в .oxfmtrc.jsonc:
cp .prettierrc.json .oxfmtrc.jsoncПример стартового .oxfmtrc.jsonc:
{
"$schema": "./node_modules/oxfmt/configuration_schema.json",
// Use 80 if migrating from Prettier; 100 is the Oxfmt default!
"printWidth": 80,
"ignorePatterns": [] // Same as `.prettierignore`
}Добавьте скрипт в package.json:
"scripts": {
"format": "oxfmt"
}Подробнее — руководство по установке.
Производительность
Oxfmt очень быстр. По репозиторию Outline:
- более чем в 30 раз быстрее экспериментального CLI Prettier без кэша;
- более чем в 20 раз быстрее Prettier с парсером Oxc через
@prettier/plugin-oxc; - более чем в 3 раза быстрее Biome.
Детали настройки бенчмарка:
oxc-project/bench-formatter
https://github.com/oxc-project/bench-formatter
Дизайн
Команда Oxc ставит совместимость с экосистемой на первое место, чтобы миграции были простыми даже для больших кодовых баз.
Результат форматирования
Oxfmt совпадает с форматированием JS у Prettier. При миграции на Oxfmt сегодня различий с Prettier быть не должно.
Возможны мелкие отличия при миграции со старых версий Prettier (пример миграции): мы нашли места, где форматирование Prettier можно улучшить. Активно сотрудничаем с командой Prettier — часть улучшений попала в Prettier 3.7.
Oxfmt проходит около 95% тестов Prettier для JS и TS; рассчитываем со временем сойтись по форматированию.
printWidth: 100 по умолчанию
Мы выбрали printWidth: 100 вместо 80 у Prettier. Причины:
- код на TypeScript часто длиннее из‑за аннотаций типов;
- в импортах много элементов;
- на больших экранах больше места по горизонтали;
- немного меньше токенов для LLM.
Oxfmt остаётся совместимым с Prettier, но другая ширина по умолчанию — 100 символов. Чтобы избежать больших diff при миграции с Prettier, явно задайте ширину 80.
ignorePatterns
Помимо .prettierignore поддерживается опция ignorePatterns, чтобы держать всё в одном файле конфигурации.
Конфигурация
JSON-конфиги Prettier совместимы с Oxfmt. Простейший случай миграции:
cp .prettierrc.json .oxfmtrc.jsoncЕсли в редакторе есть JSON language server, после добавления oxfmt в devDependencies можно начать с шаблона:
{
"$schema": "./node_modules/oxfmt/configuration_schema.json",
"ignorePatterns": []
}В этой альфе поддерживаются не все опции Prettier, но уже есть основные: printWidth, tabWidth, useTabs, semi, singleQuote, quoteProps, jsxSingleQuote, trailingComma, bracketSpacing, objectWrap, bracketSameLine, arrowParens, endOfLine, singleAttributePerLine.
Полный список — в документации.
Вывод в терминале
Поведение по умолчанию эквивалентно prettier . --write: как у cargo fmt, без лишнего вывода. Флаг --check показывает отличия и подходит для CI.
Планы бета-релиза
- Поддержка большего числа форматов файлов — например
.json - Встроенное форматирование встроенных языков — css in js или graphql in js
- Встроенная сортировка и эстетика, например sort imports
- Плагины Prettier
- Node.js API для Oxfmt
- Отключение перевода строки в конце файла
--migrate prettier- … и ваши запросы
Отслеживание прогресса к бете:
Formatter Beta · Milestone #15 · oxc-project/oxc
https://github.com/oxc-project/oxc/milestone/15
В будущих версиях планируем смягчить часть стилистических решений.
Дальнейшие шаги
Полное руководство — в документации Oxfmt.
Сообщения об ошибках
По расхождениям форматирования см. обсуждение на GitHub. Известные проблемы помечены лейблами.
Другие issue создавайте по шаблону.
Сообщество
RFC: Formatter · oxc-project/oxc · Discussion #13608
https://github.com/oxc-project/oxc/discussions/13608
Ждём вашего фидбека, чтобы сделать Oxfmt лучше!
Благодарности
Oxfmt опирается на форк инфраструктуры biome_formatter; благодарим команду Biome, особенно @ematipico и @MichaReiser. Спасибо команде Prettier и @fisker за совместную работу над совместимостью форматирования.


