Oxfmt: alpha do formatador Oxc
Esta publicação anuncia o lançamento alpha do Oxfmt. O Oxfmt já está em beta! Veja o anúncio do Oxfmt Beta para recursos e melhorias atuais.
Temos o prazer de anunciar o lançamento alpha do Oxfmt — um formatador de código em Rust compatível com o Prettier. A primeira versão foca em JavaScript e TypeScript; outros idiomas virão em breve.
Objetivos do Oxfmt:
- Desempenho: mais de 30× mais rápido que o Prettier e mais de 3× que o Biome na primeira execução sem cache (benchmark).
- Compatibilidade: paridade com o Prettier para adoção simples em projetos existentes.
- Experiência do desenvolvedor: em plano estão ordenação de imports, mais opções de formatação e suporte a plugins do Prettier.
Início rápido
Adicione oxfmt ao projeto:
npm add -D oxfmt@latestpnpm add -D oxfmt@latestyarn add -D oxfmt@latestbun add -D oxfmt@latestdeno add -D npm:oxfmt@latestO Oxfmt segue o formato de configuração do Prettier. Se você usa JSON de config do Prettier, pode renomear para .oxfmtrc.jsonc:
cp .prettierrc.json .oxfmtrc.jsoncExemplo inicial de .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`
}Adicione um script ao package.json:
"scripts": {
"format": "oxfmt"
}Mais detalhes no guia de instalação.
Desempenho
O Oxfmt é muito rápido. No repositório Outline:
- mais de 30× mais rápido que o CLI experimental do Prettier sem cache;
- mais de 20× mais rápido que o Prettier com parser Oxc via
@prettier/plugin-oxc; - mais de 3× mais rápido que o Biome.
Configuração detalhada do benchmark:
oxc-project/bench-formatter
https://github.com/oxc-project/bench-formatter
Design
A equipe Oxc prioriza compatibilidade com o ecossistema para tornar migrações simples, inclusive em bases grandes.
Resultado da formatação
O Oxfmt coincide com a formatação JS do Prettier. Ao migrar para o Oxfmt hoje, não deve haver diferenças em relação ao Prettier.
Pequenas divergências podem aparecer ao migrar de versões antigas do Prettier (exemplo de migração): identificamos pontos em que a formatação do Prettier pode melhorar. Colaboramos ativamente com a equipe do Prettier — parte das melhorias entrou no Prettier 3.7.
O Oxfmt passa em cerca de 95% dos testes do Prettier para JS e TS; esperamos convergir na formatação com o tempo.
printWidth: 100 por padrão
Escolhemos printWidth: 100 em vez do 80 do Prettier. Motivos:
- código TypeScript tende a ser mais longo por causa das anotações de tipo;
- imports costumam ter muitos itens;
- em telas maiores há mais espaço horizontal;
- um pouco menos de tokens para LLMs.
O Oxfmt permanece compatível com o Prettier, mas a largura padrão é 100 caracteres. Para evitar diffs grandes ao migrar do Prettier, defina explicitamente a largura 80.
ignorePatterns
Além do .prettierignore, há a opção ignorePatterns para manter tudo em um único arquivo de configuração.
Configuração
Arquivos JSON do Prettier são compatíveis com o Oxfmt. O caso mais simples de migração:
cp .prettierrc.json .oxfmtrc.jsoncSe o editor tiver JSON language server, após adicionar oxfmt em devDependencies você pode começar com este modelo:
{
"$schema": "./node_modules/oxfmt/configuration_schema.json",
"ignorePatterns": []
}Neste alpha ainda não há todas as opções do Prettier, mas já estão as principais: printWidth, tabWidth, useTabs, semi, singleQuote, quoteProps, jsxSingleQuote, trailingComma, bracketSpacing, objectWrap, bracketSameLine, arrowParens, endOfLine, singleAttributePerLine.
Lista completa na documentação.
Saída no terminal
O comportamento padrão equivale a prettier . --write: como o cargo fmt, sem ruído extra. A flag --check mostra diferenças e serve para CI.
Planos para o beta
- Suporte a mais formatos de arquivo — por exemplo
.json - Formatação embutida de linguagens embutidas — css in js ou graphql in js
- Ordenação e estética embutidas, por exemplo sort imports
- Plugins do Prettier
- API Node.js para o Oxfmt
- Desativar newline no fim do arquivo
--migrate prettier- … e suas solicitações de recursos
Acompanhe o progresso rumo ao beta:
Formatter Beta · Milestone #15 · oxc-project/oxc
https://github.com/oxc-project/oxc/milestone/15
Em versões futuras, pretendemos relaxar parte das escolhas estilísticas.
Próximos passos
Guia completo na documentação do Oxfmt.
Reportar problemas
Para diferenças de formatação, veja a discussão no GitHub. Issues conhecidas usam labels.
Para outros problemas, abra uma issue com o modelo dedicado.
Comunidade
RFC: Formatter · oxc-project/oxc · Discussion #13608
https://github.com/oxc-project/oxc/discussions/13608
Contamos com seu feedback para melhorar o Oxfmt!
Agradecimentos
O Oxfmt se baseia em um fork da infraestrutura biome_formatter; agradecemos à equipe Biome, em especial @ematipico e @MichaReiser. Obrigado também à equipe do Prettier e a @fisker pela colaboração em compatibilidade de formatação.


