Skip to content

Arquivo de configuração Oxlint

Este formato segue o esquema ESLint v8 (eslintrc.json).

Uso: oxlint -c oxlintrc.json

Exemplo

.oxlintrc.json

json
{
  "$schema": "./node_modules/oxlint/configuration_schema.json",
  "plugins": ["import", "typescript", "unicorn"],
  "env": {
    "browser": true
  },
  "globals": {
    "foo": "readonly"
  },
  "settings": {
    "react": {
      "version": "18.2.0"
    },
    "custom": {
      "option": true
    }
  },
  "rules": {
    "eqeqeq": "warn",
    "import/no-cycle": "error",
    "react/self-closing-comp": [
      "error",
      {
        "html": false
      }
    ]
  },
  "overrides": [
    {
      "files": ["*.test.ts", "*.spec.ts"],
      "rules": {
        "@typescript-eslint/no-explicit-any": "off"
      }
    }
  ]
}

oxlint.config.ts

ts
import { defineConfig } from "oxlint";

export default defineConfig({
  plugins: ["import", "typescript", "unicorn"],
  env: {
    browser: true,
  },
  globals: {
    foo: "readonly",
  },
  settings: {
    react: {
      version: "18.2.0",
    },
    custom: { option: true },
  },
  rules: {
    eqeqeq: "warn",
    "import/no-cycle": "error",
    "react/self-closing-comp": ["error", { html: false }],
  },
  overrides: [
    {
      files: ["*.test.ts", "*.spec.ts"],
      rules: {
        "@typescript-eslint/no-explicit-any": "off",
      },
    },
  ],
});

$schema

type: string

URI do schema para tooling do editor.

categories

type: object

Configura todas as regras de uma categoria de uma vez.

Regras ligadas ou desligadas aqui são sobrescritas por regras individuais em rules.

Exemplo

json
{
  "$schema": "./node_modules/oxlint/configuration_schema.json",
  "categories": {
    "correctness": "warn"
  },
  "rules": {
    "eslint/no-unused-vars": "error"
  }
}

categories.correctness

categories.nursery

categories.pedantic

categories.perf

categories.restriction

categories.style

categories.suspicious

env

type: Record<string, boolean>

Predefine variáveis globais.

O ambiente determina quais globais existem de antemão. Ambientes disponíveis:

  • amd — globais require() e define().
  • applescript — globais AppleScript.
  • astro — globais Astro.
  • atomtest — globais de testes Atom.
  • audioworklet — globais AudioWorklet.
  • browser — globais de navegador.
  • builtin — globais ECMAScript recentes, equivalente a es2026.
  • commonjs — globais e escopo CommonJS.
  • embertest — globais de testes Ember.
  • es2015 — globais ECMAScript 2015.
  • es2016 — globais ECMAScript 2016.
  • es2017 — globais ECMAScript 2017.
  • es2018 — globais ECMAScript 2018.
  • es2019 — globais ECMAScript 2019.
  • es2020 — globais ECMAScript 2020.
  • es2021 — globais ECMAScript 2021.
  • es2022 — globais ECMAScript 2022.
  • es2023 — globais ECMAScript 2023.
  • es2024 — globais ECMAScript 2024.
  • es2025 — globais ECMAScript 2025.
  • es2026 — globais ECMAScript 2026.
  • es6 — globais ECMAScript 6 exceto módulos.
  • greasemonkey — globais GreaseMonkey.
  • jasmine — globais Jasmine.
  • jest — globais Jest.
  • jquery — globais jQuery.
  • meteor — globais Meteor.
  • mocha — globais Mocha.
  • mongo — globais MongoDB.
  • nashorn — globais Nashorn Java 8.
  • node — globais e escopo Node.js.
  • phantomjs — globais PhantomJS.
  • prototypejs — globais Prototype.js.
  • protractor — globais Protractor.
  • qunit — globais QUnit.
  • serviceworker — globais Service Worker.
  • shared-node-browser — globais comuns a Node.js e navegador.
  • shelljs — globais ShellJS.
  • svelte — globais Svelte.
  • vitest — globais Vitest.
  • vue — globais Vue.
  • webextensions — globais WebExtensions.
  • worker — globais Web Workers.

extends

type: string[]

Caminhos de arquivos de config que este arquivo estende (herda). São resolvidos em relação ao arquivo que contém extends. A mesclagem vai do primeiro ao último; o último prevalece.

globals

type: Record<string, string>

Adiciona ou remove globais.

Para cada global, use "writable" para permitir reatribuição ou "readonly" para proibir.

Globais podem ser desligados com "off". Por exemplo, se quase todos globais ES2015 existem menos Promise:

json
{
  "$schema": "./node_modules/oxlint/configuration_schema.json",
  "env": {
    "es6": true
  },
  "globals": {
    "Promise": "off"
  }
}

Também vale "readable" ou false como "readonly" e "writeable" ou true como "writable".

ignorePatterns

type: string[]

padrão: []

Globs ignorados durante o lint. Caminhos relativos ao arquivo de config.

jsPlugins

type: array

Plugins JS permitem usar plugins ESLint no Oxlint.

Mais em documentação de plugins JS.

Nota: plugins JS estão em alpha e não seguem semver.

Exemplos:

Uso básico com plugin local.

json
{
  "jsPlugins": ["./custom-plugin.js"],
  "rules": {
    "custom/rule-name": "warn"
  }
}

Uso básico com plugin TypeScript local.

Arquivos de plugin TS são suportados nestes ambientes:

  • Deno e Bun: TypeScript nativo.
  • Node.js >=22.18.0 e Node.js ^20.19.0: TypeScript nativo com type-stripping ligado por padrão.

Em Node mais antigo não há suporte a plugins TS; use JavaScript ou atualize o Node.

json
{
  "jsPlugins": ["./custom-plugin.ts"],
  "rules": {
    "custom/rule-name": "warn"
  }
}

Combinar plugin Rust embutido com plugin JS de mesmo nome usando alias.

json
{
  "plugins": ["import"],
  "jsPlugins": [{ "name": "import-js", "specifier": "eslint-plugin-import" }],
  "rules": {
    "import/no-cycle": "error",
    "import-js/no-unresolved": "warn"
  }
}

jsPlugins[n]

type: object | string

jsPlugins[n].name

type: string

Nome ou alias personalizado do plugin.

Nota: os nomes seguintes são reservados porque estão implementados nativamente em Rust no oxlint e não podem ser usados como plugin JS:

  • react (inclui react-hooks)
  • unicorn
  • typescript (inclui @typescript-eslint)
  • oxc
  • import (inclui import-x)
  • jsdoc
  • jest
  • vitest
  • jsx-a11y
  • nextjs
  • react-perf
  • promise
  • node
  • vue
  • eslint

Para usar a versão JavaScript de algum deles, defina um alias à parte.

jsPlugins[n].specifier

type: string

Caminho ou nome do pacote do plugin

options

type: object

Opções gerais do linter.

options.denyWarnings

type: boolean

Warnings passam a sair com código de saída diferente de zero.

Equivale ao flag --deny-warnings.

options.maxWarnings

type: integer

Limite de avisos; acima disso o processo termina com erro.

Equivale a passar --max-warnings na CLI.

options.reportUnusedDisableDirectives

type: "allow" | "off" | "warn" | "error" | "deny" | integer

Reporta diretivas de desligamento não usadas (ex.: // oxlint-disable-line ou // eslint-disable-line).

Equivale a --report-unused-disable-directives-severity; flags CLI prevalecem quando ambos existem. Só no arquivo de configuração raiz.

options.respectEslintDisableDirectives

type: boolean

Se eslint-disable* / eslint-enable* devem ser honrados junto com oxlint-*.

Padrão true. Só na raiz.

options.typeAware

type: boolean

Ativa regras que precisam de informação de tipo.

Equivale ao --type-aware.

Exige instalar o pacote oxlint-tsgolint.

options.typeCheck

type: boolean

Type-check experimental (diagnósticos do compilador TypeScript).

Equivale ao --type-check.

Exige pacote oxlint-tsgolint.

overrides

type: array

overrides[n]

type: object

overrides[n].env

type: object

Ambientes ligam ou desligam coleções de globais.

overrides[n].files

type: string[]

Conjunto de padrões glob.

overrides[n].globals

type: object

Globais específicos ligados ou desligados.

overrides[n].jsPlugins

type: array

Plugins JS nesta sobrescrita; uso de plugins ESLint no Oxlint.

Documentação: plugins JS.

Nota: alpha, sem semver.

overrides[n].jsPlugins[n]

type: object | string

overrides[n].jsPlugins[n].name

type: string

Nome ou alias personalizado do plugin.

Nota: os nomes seguintes são reservados (nativos Rust no oxlint):

  • react (inclui react-hooks)
  • unicorn
  • typescript (inclui @typescript-eslint)
  • oxc
  • import (inclui import-x)
  • jsdoc
  • jest
  • vitest
  • jsx-a11y
  • nextjs
  • react-perf
  • promise
  • node
  • vue
  • eslint

Para a versão JavaScript, use alias customizado.

overrides[n].jsPlugins[n].specifier

type: string

Caminho ou nome do pacote do plugin

overrides[n].plugins

type: array

padrão: null

Opcionalmente altera plugins nesta sobrescrita. Omitido mantém plugins da base.

overrides[n].plugins[n]

type: "eslint" | "react" | "unicorn" | "typescript" | "oxc" | "import" | "jsdoc" | "jest" | "vitest" | "jsx-a11y" | "nextjs" | "react-perf" | "promise" | "node" | "vue"

overrides[n].rules

type: object

Veja regras Oxlint.

plugins

type: array

padrão: null

Plugins embutidos habilitados. Lista em Plugins.

NOTA: definir plugins substitui o conjunto base — inclua todos que precisar.

plugins[n]

type: "eslint" | "react" | "unicorn" | "typescript" | "oxc" | "import" | "jsdoc" | "jest" | "vitest" | "jsx-a11y" | "nextjs" | "react-perf" | "promise" | "node" | "vue"

rules

type: object

Veja regras Oxlint.

settings

type: object

Comportamento dos plugins de lint.

Exemplo com Next.js num monorepo:

json
{
  "settings": {
    "next": {
      "rootDir": "apps/dashboard/"
    },
    "react": {
      "linkComponents": [
        {
          "name": "Link",
          "linkAttribute": "to"
        }
      ]
    },
    "jsx-a11y": {
      "components": {
        "Link": "a",
        "Button": "button"
      }
    }
  }
}

settings.jest

type: object

Configura regras do plugin Jest.

Referência completa em eslint-plugin-jest.

settings.jest.version

type: integer | string

padrão: null

Versão do Jest — aceita número (29) ou semver ("29.1.0" ou "v29.1.0"), persistindo apenas a major.

WARNING

Usar esta opção sobrescreve a config de no-deprecated-functions.

settings.jsdoc

type: object

settings.jsdoc.augmentsExtendsReplacesDocs

type: boolean

padrão: false

Somente para a regra require-(yields|returns|description|example|param|throws)

settings.jsdoc.exemptDestructuredRootsFromChecks

type: boolean

padrão: false

Somente para require-param-type e require-param-description

settings.jsdoc.ignoreInternal

type: boolean

padrão: false

Para todas as regras exceto empty-tags

settings.jsdoc.ignorePrivate

type: boolean

padrão: false

Para todas exceto check-access e empty-tags

settings.jsdoc.ignoreReplacesDocs

type: boolean

padrão: true

Somente para require-(yields|returns|description|example|param|throws)

settings.jsdoc.implementsReplacesDocs

type: boolean

padrão: false

Somente para require-(yields|returns|description|example|param|throws)

settings.jsdoc.overrideReplacesDocs

type: boolean

padrão: true

Somente para require-(yields|returns|description|example|param|throws)

settings.jsdoc.tagNamePreference

type: object

padrão: {}

settings.jsx-a11y

type: object

Configura regras do plugin JSX A11y.

Referência em eslint-plugin-jsx-a11y.

settings.jsx-a11y.attributes

type: Record<string, array>

padrão: {}

Mapa de nomes de atributo para equivalentes DOM. Útil em frameworks não React com nomes diferentes.

Exemplo:

json
{
  "settings": {
    "jsx-a11y": {
      "attributes": {
        "for": ["htmlFor", "for"]
      }
    }
  }
}

settings.jsx-a11y.components

type: Record<string, string>

padrão: {}

Mapeie componentes customizados para elementos DOM que as regras devem tratar.

Exemplo:

json
{
  "settings": {
    "jsx-a11y": {
      "components": {
        "Link": "a",
        "IconButton": "button"
      }
    }
  }
}

settings.jsx-a11y.polymorphicPropName

type: string

Prop opcional usada em componentes polimórficos; regras que precisam de contexto semântico usam isso.

Ex.: com polymorphicPropName as, o elemento

jsx
<Box as="h3">Hello</Box>

é tratado como h3. Sem isso, segue como Box.

settings.next

type: object

Configura regras do plugin Next.js.

settings.next.rootDir

type: array | string

settings.next.rootDir[n]

type: string

settings.react

type: object

Configura regras do plugin React.

Baseado em eslint-plugin-react.

settings.react.componentWrapperFunctions

type: string[]

padrão: []

Funções que envolvem componentes React e devem ser tratadas como HOCs.

Exemplo:

jsonc
{
  "settings": {
    "react": {
      "componentWrapperFunctions": ["observer", "withRouter"],
    },
  },
}

settings.react.formComponents

type: array

padrão: []

Componentes usados no lugar de <form>, por exemplo <Formik>.

Exemplo:

jsonc
{
  "settings": {
    "react": {
      "formComponents": [
        "CustomForm",
        { "name": "OtherForm", "formAttribute": "endpoint" },
        { "name": "Form", "formAttribute": ["registerEndpoint", "loginEndpoint"] },
      ],
    },
  },
}
settings.react.formComponents[n]

type: object | string

settings.react.formComponents[n].attribute

type: string

settings.react.formComponents[n].name

type: string

settings.react.linkComponents

type: array

padrão: []

Componentes usados no lugar de <a>, por exemplo <Link>.

Exemplo:

jsonc
{
  "settings": {
    "react": {
      "linkComponents": [
        "HyperLink",
        { "name": "MyLink", "linkAttribute": "to" },
        { "name": "Link", "linkAttribute": ["to", "href"] },
      ],
    },
  },
}
settings.react.linkComponents[n]

type: object | string

settings.react.linkComponents[n].attribute

type: string

settings.react.linkComponents[n].name

type: string

settings.react.version

type: string

padrão: null

Versão React para regras específicas de versão.

Aceita semver (ex.: "18.2.0", "17.0").

Exemplo:

jsonc
{
  "settings": {
    "react": {
      "version": "18.2.0",
    },
  },
}

settings.vitest

type: object

Configura regras do plugin Vitest.

Referência em eslint-plugin-vitest.

settings.vitest.typecheck

type: boolean

padrão: false

Ativa modo typecheck nas regras Vitest. Quando ligado, algumas regras pulam checagens em describe para cenários com verificação de tipos TypeScript.