Oxlint JS Plugins Alpha
Os plugins JavaScript para o Oxlint chegaram ao alpha — e esperamos que cerca de 80% dos usuários do ESLint possam migrar para o Oxlint e “simplesmente funcionar”.
O Oxlint já implementa mais de 650 regras populares em Rust, em velocidade nativa. Os plugins JS preenchem lacunas: uma API compatível com o ESLint, permitindo rodar plugins existentes e escrever regras próprias, tudo no Oxlint. Desempenho nativo na maior parte das regras; flexibilidade total no restante.
Desde a primeira prévia técnica no ano passado, cobrimos quase toda a API de plugins do ESLint, adicionamos suporte a plugins TypeScript, autofix, integração com IDE e grandes ganhos de desempenho.
Assim, muitas equipes podem trocar o ESLint pelo Oxlint sem reescrever as regras de lint.
Este alpha marca o ponto em que consideramos os plugins JS prontos para adoção em projetos reais.
Na maioria dos projetos, o Oxlint deve poder substituir o ESLint com migração direta e redução forte no tempo de lint.
Recursos
- Executar a maioria dos plugins do ESLint sem alterações.
- Escrever regras próprias em JavaScript ou TypeScript.
- Obter autofix e suggestions de regras de plugins JS.
- Ver diagnósticos de plugins JS ao vivo na IDE via language server.
Quão confiável é?
O suporte a plugins JS do Oxlint é testado com a suíte completa de testes do próprio ESLint e com uma seleção ampla de plugins, incluindo:
| Plugin | Testes | Taxa |
|---|---|---|
| Regras embutidas do ESLint | 33.006 | 100% |
| React hooks (incl. regras do React Compiler) | 5.007 | 100% |
| ESLint Stylistic | 18.310 | 99,99% |
| Testing Library | 17.016 | 100% |
| SonarJS | 3.951 | 99,6%* |
| e18e | 474 | 100%* |
* exceto regras dependentes de tipo
Se um plugin não está na lista, provavelmente ainda funciona — só ainda não entrou na nossa suíte de conformidade.
Os testes do ESLint cobrem toda a superfície da API; 100% de aprovação nos dá confiança em casos de borda e no fluxo feliz. Experimente e nos conte!
O Oxlint já roda em produção em várias empresas e projetos, entre eles Midjourney, Preact, Posthog, Outline e Actual.
O que ainda não faz
- Suporte limitado a formatos próprios de frameworks front-end (p.ex. Svelte, Vue, Angular) — mais adiante neste ano.
- Sem regras customizadas dependentes de tipo (regras do TypeScript-ESLint já vêm no Oxlint via lint com reconhecimento de tipos).
- Alguns usuários relatam experiência abaixo do ideal no Windows. Erros de memória são um problema conhecido, em especial no Windows. Estamos trabalhando nisso. Enquanto isso, se isso ocorrer, recomendamos rodar o Oxlint no WSL, se for viável.
Acompanhe o progresso na issue de acompanhamento.
Primeiros passos
Instale oxlint como dev dependency:
pnpm add -D oxlintAdicione um script ao package.json:
{
"scripts": {
"lint": "oxlint"
}
}Crie um arquivo de config (ou use nossa ferramenta de migração):
{
"jsPlugins": ["eslint-plugin-testing-library"],
"rules": {
"testing-library/no-render-in-lifecycle": "error"
}
}Lint no projeto:
pnpm run lintMigrando do ESLint
Para a maioria dos projetos, migrar do ESLint é simples.
O caminho mais direto é a ferramenta @oxlint/migrate.
npx @oxlint/migrate eslint.config.jsOu peça ao seu agente de código com a skill migrate-oxlint.
Veja o guia de migração para mais detalhes.
Regras do ESLint
O Oxlint já implementa nativamente a maior parte das regras embutidas do ESLint, reescritas em Rust, mas ainda não todas.
Para preencher a lacuna, oferecemos oxlint-plugin-eslint, com todas as regras embutidas do ESLint empacotadas como plugin JS do Oxlint.
Isso libera regras como no-restricted-syntax, ainda sem implementação nativa.
{
"jsPlugins": ["oxlint-plugin-eslint"],
"rules": {
// Note: "eslint-js" not "eslint"
"eslint-js/no-restricted-syntax": [
"error",
{
"selector": "ThrowStatement > CallExpression[callee.name=/Error$/]",
"message": "Use `new` keyword when throwing an `Error`.",
},
],
},
}O Oxlint também implementa nativamente um subconjunto de regras de plugins como eslint-plugin-jsdoc. Para regras que ainda não existem no Oxlint, use o pacote eslint-plugin-jsdoc diretamente. Padrão recomendado:
{
"jsPlugins": [
// Set up an alias for the plugin "jsdoc-js"
{ "name": "jsdoc-js", "specifier": "eslint-plugin-jsdoc" },
],
"rules": {
// Use the alias to refer to rules from the plugin
"jsdoc-js/check-examples": "error",
"jsdoc-js/require-description": "error",
// Use plain "jsdoc" for rules which Oxlint implements natively
"jsdoc/require-property-name": "error",
"jsdoc/require-property-description": "error",
},
}Desempenho
Desde a primeira prévia, “rustificamos” grandes trechos do código dos plugins JS, com ganhos significativos de desempenho. Em especial, plugins que usam APIs de tokens (p.ex. ESLint Stylistic) ficaram até 5× mais rápidos.
Como benchmark, migramos o repositório do Node.js de ESLint para Oxlint. O Node.js é grande, com muitas regras customizadas e vários plugins pesados do ESLint (98 regras JS no total).
| Linter | Tempo | Ganho |
|---|---|---|
| ESLint | 1 minuto, 43 s | |
| Oxlint | 21 s | 4,8× |
Detalhes
INFO
6298 arquivos lintados
104 regras Oxlint embutidas (Rust)
75 regras de plugins JS (JS)
23 regras customizadas (JS)
Medido em Mac Mini M4, 48 GB RAM, Node.js 24.14.0
Benchmark ESLint:
git checkout bench-eslint
npm ci
hyperfine -i --warmup 1 --runs 5 "node --run eslint"- Benchmark Oxlint:
git checkout bench-oxlint
npm ci
hyperfine -i --warmup 1 --runs 5 "node --run oxlint"Projetos que usam TypeScript-ESLint ou eslint-plugin-import tendem a ver ganhos muito maiores. Um usuário no nosso Discord relatou aceleração de 16× ao lintar a base de ~2 milhões de linhas da empresa ao trocar ESLint por Oxlint, com uso intenso de plugins JS. Projetos com uso mais parcimonioso de plugins JS relataram ganhos de até 100×.
Próximas melhorias de desempenho
Isso é só o começo!
Mesmo com plugins JS, o Oxlint já é bem mais rápido que o ESLint, e temos muitas otimizações na fila.
A chave do desempenho dos plugins JS no Oxlint é um mecanismo novo, muito otimizado e de baixo nível para comunicação Rust ↔ JS, que chamamos de “raw transfer”.
A fronteira Rust/JS sempre foi o problema central para ferramentas nativas com plugins JS. O código nativo é rápido, mas o custo de ir e voltar com dados pode ser tão alto que anula o ganho — resultando em desempenho mediano.
O raw transfer reduz quase a zero o custo de mover dados entre Rust e JS, permitindo que código nativo e plugins JS trabalhem bem juntos.
A primeira iteração do raw transfer já está em uso no Oxlint, mas só começamos a explorar o potencial. À medida que avançarmos, esperamos novo salto de desempenho, aproximando plugins JS da velocidade nativa em Rust.
Para mergulhar nos detalhes, @overlookmotel do core do Oxc deu uma palestra na ViteConf 2025 sobre o tema.
Em resumo: o Oxlint já é o linter JS/TS mais rápido que existe. E vai ficar bem mais rápido.
Dica de desempenho 1: use um formatador
Recomendamos fortemente deixar de usar o linter para formatação e passar a usar o Oxfmt (ou o formatador de sua preferência), se possível.
O Oxfmt é cerca de 30× mais rápido que o Prettier e reduz muito o tempo de lint em relação a plugins como o ESLint Stylistic.
Oxlint e Oxfmt formam um time muito forte!
Dica de desempenho 2: escolha plugins com critério
Ao contrário do que muitos pensam, é perfeitamente possível escrever JavaScript extremamente eficiente. O Oxlint não é rápido só por ser Rust — também foi desenhado com foco em desempenho.
O código dos próprios plugins JS não está sob nosso controle. Bom desempenho geral exige que os plugins escolhidos também se comportem bem.
Se um plugin usa algoritmos ineficientes ou muita E/S em disco, será lento no ESLint e no Oxlint. O que o Oxlint pode fazer é oferecer parser rápido e APIs eficientes — não transformar JS lento em mágica.
No futuro, queremos oferecer uma utilidade para diagnosticar quais plugins/regras são gargalos, se o lint não estiver tão rápido quanto você gostaria.
Criando plugins customizados
Se o projeto tiver necessidades específicas, criar um plugin JS para o Oxlint é simples.
Veja o guia de plugins JS.
FAQ
O Oxlint roda plugins do ESLint? Sim. A maioria funciona sem alterações.
O Oxlint é mais rápido que o ESLint? Sim. Benchmarks costumam mostrar ganhos de cerca de 4× a 100×.
Posso migrar aos poucos? Sim. Dá para rodar Oxlint junto com o ESLint.
Agradecimentos
Chegar a este marco com plugins JS foi trabalho de muitas pessoas. Em especial, agradecemos:
- @Sysix pelo trabalho incansável na integração com o language server.
- @lilnasy por expandir muitas das APIs.
Entre na comunidade
Queremos seu feedback sobre plugins JS no Oxlint e ver como isso melhora seu fluxo de trabalho.
Onde nos encontrar:
- Discord: servidor da comunidade
- GitHub: feedback nas GitHub Discussions
- Issues: bugs do
oxlintem oxc.

