Type object
File match **/.oxlintrc.json
Schema URL https://catalog.lintel.tools/schemas/schemastore/oxlint/latest.json
Source https://raw.githubusercontent.com/oxc-project/oxc/refs/heads/main/npm/oxlint/configuration_schema.json

Validate with Lintel

npx @lintel/lintel check
Type: object

Oxlint Configuration File

This configuration is aligned with ESLint v8's configuration schema (eslintrc.json).

Usage: oxlint -c oxlintrc.json

Example

.oxlintrc.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

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"
}
}
]
});

Properties

$schema string

Schema URI for editor tooling.

categories
Default:
{}
All of: Rule Categories object
env

Environments enable and disable collections of global variables.

Default:
{
  "builtin": true
}
All of: OxlintEnv object
extends string[]

Paths of configuration files that this configuration file extends (inherits from). The files are resolved relative to the location of the configuration file that contains the extends property. The configuration files are merged from the first to the last, with the last file overriding the previous ones.

globals

Enabled or disabled specific global variables.

Default:
{}
All of: OxlintGlobals object
ignorePatterns string[]

Globs to ignore during linting. These are resolved from the configuration file path.

Default:
[]
jsPlugins null | ExternalPluginEntry[]

JS plugins, allows usage of ESLint plugins with Oxlint.

Read more about JS plugins in the docs.

Note: JS plugins are in alpha and not subject to semver.

Examples:

Basic usage with a local plugin path.

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

Basic usage with a TypeScript plugin and a local plugin path.

TypeScript plugin files are supported in the following environments:

  • Deno and Bun: TypeScript files are supported natively.
  • Node.js >=22.18.0 and Node.js ^20.19.0: TypeScript files are supported natively with built-in type-stripping enabled by default.

For older Node.js versions, TypeScript plugins are not supported. Please use JavaScript plugins or upgrade your Node version.

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

Using a built-in Rust plugin alongside a JS plugin with the same name by giving the JS plugin an alias.

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

Oxlint config options.

All of: OxlintOptions object
overrides

Add, remove, or otherwise reconfigure rules for specific files or groups of files.

All of: OxlintOverrides OxlintOverride[]
plugins

Enabled built-in plugins for Oxlint. You can view the list of available plugins on the website.

NOTE: Setting the plugins field will overwrite the base set of plugins. The plugins array should reflect all of the plugins you want to use.

Default: null
All of: LintPlugins LintPluginOptionsSchema[]
rules

Example

.oxlintrc.json

{
"$schema": "./node_modules/oxlint/configuration_schema.json",
"rules": {
"eqeqeq": "warn",
"import/no-cycle": "error",
"prefer-const": ["error", { "ignoreReadBeforeAssign": true }]
}
}

See Oxlint Rules for the list of rules.

Default:
{}
All of: OxlintRules DummyRuleMap
settings

Plugin-specific configuration for both built-in and custom plugins. This includes settings for built-in plugins such as react and jsdoc as well as configuring settings for JS custom plugins loaded via jsPlugins.

Default:
{
  "jsx-a11y": {
    "polymorphicPropName": null,
    "components": {},
    "attributes": {}
  },
  "next": {
    "rootDir": []
  },
  "react": {
    "formComponents": [],
    "linkComponents": [],
    "version": null,
    "componentWrapperFunctions": []
  },
  "jsdoc": {
    "ignorePrivate": false,
    "ignoreInternal": false,
    "ignoreReplacesDocs": true,
    "overrideReplacesDocs": true,
    "augmentsExtendsReplacesDocs": false,
    "implementsReplacesDocs": false,
    "exemptDestructuredRootsFromChecks": false,
    "tagNamePreference": {}
  },
  "vitest": {
    "typecheck": false
  }
}
All of: Oxlint Plugin Settings object

Definitions

AllowWarnDeny string | integer
CustomComponent string | object | object
DummyRule AllowWarnDeny | array
DummyRuleMap Record<string, AllowWarnDeny | array>
ExternalPluginEntry string | object
GlobSet string[]

A set of glob patterns.

GlobalValue string
JSDocPluginSettings object
augmentsExtendsReplacesDocs boolean

Only for require-(yields|returns|description|example|param|throws) rule

Default: false
exemptDestructuredRootsFromChecks boolean

Only for require-param-type and require-param-description rule

Default: false
ignoreInternal boolean

For all rules but NOT apply to empty-tags rule

Default: false
ignorePrivate boolean

For all rules but NOT apply to check-access and empty-tags rule

Default: false
ignoreReplacesDocs boolean

Only for require-(yields|returns|description|example|param|throws) rule

Default: true
implementsReplacesDocs boolean

Only for require-(yields|returns|description|example|param|throws) rule

Default: false
overrideReplacesDocs boolean

Only for require-(yields|returns|description|example|param|throws) rule

Default: true
tagNamePreference Record<string, string | object | object | boolean>
Default:
{}
JSXA11yPluginSettings object

Configure JSX A11y plugin rules.

See eslint-plugin-jsx-a11y's configuration for a full reference.

attributes Record<string, string[]>

Map of attribute names to their DOM equivalents. This is useful for non-React frameworks that use different attribute names.

Example:

{
"settings": {
"jsx-a11y": {
"attributes": {
"for": ["htmlFor", "for"]
}
}
}
}
Default:
{}
components Record<string, string>

To have your custom components be checked as DOM elements, you can provide a mapping of your component names to the DOM element name.

Example:

{
"settings": {
"jsx-a11y": {
"components": {
"Link": "a",
"IconButton": "button"
}
}
}
}
Default:
{}
polymorphicPropName string

An optional setting that define the prop your code uses to create polymorphic components. This setting will be used to determine the element type in rules that require semantic context.

For example, if you set the polymorphicPropName to as, then this element:

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

Will be treated as an h3. If not set, this component will be treated as a Box.

LintPluginOptionsSchema string
LintPlugins LintPluginOptionsSchema[]
NextPluginSettings object

Configure Next.js plugin rules.

rootDir

The root directory of the Next.js project.

This is particularly useful when you have a monorepo and your Next.js project is in a subfolder.

Example:

{
"settings": {
"next": {
"rootDir": "apps/dashboard/"
}
}
}
Default:
[]
All of: OneOrMany_for_String string | string[]
OneOrMany_for_String string | string[]
OxlintCategories object

Configure an entire category of rules all at once.

Rules enabled or disabled this way will be overwritten by individual rules in the rules field.

Example

{
    "$schema": "./node_modules/oxlint/configuration_schema.json",
    "categories": {
        "correctness": "warn"
    },
    "rules": {
        "eslint/no-unused-vars": "error"
    }
}
Examples:
  • { "correctness": "warn" }
correctness string | integer
nursery string | integer
pedantic string | integer
perf string | integer
restriction string | integer
style string | integer
suspicious string | integer
OxlintEnv Record<string, boolean>

Predefine global variables.

Environments specify what global variables are predefined. See ESLint's list of environments for what environments are available and what each one provides.

OxlintGlobals Record<string, string>

Add or remove global variables.

For each global variable, set the corresponding value equal to "writable" to allow the variable to be overwritten or "readonly" to disallow overwriting.

Globals can be disabled by setting their value to "off". For example, in an environment where most Es2015 globals are available but Promise is unavailable, you might use this config:


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

You may also use "readable" or false to represent "readonly", and "writeable" or true to represent "writable".

OxlintOptions object

Options for the linter.

denyWarnings boolean

Ensure warnings produce a non-zero exit code.

Equivalent to passing --deny-warnings on the CLI.

maxWarnings integer

Specify a warning threshold. Exits with an error status if warnings exceed this value.

Equivalent to passing --max-warnings on the CLI.

format=uintmin=0.0
reportUnusedDisableDirectives

Report unused disable directives (e.g. // oxlint-disable-line or // eslint-disable-line).

Equivalent to passing --report-unused-disable-directives-severity on the CLI. CLI flags take precedence over this value when both are set. Only supported in the root configuration file.

All of: AllowWarnDeny string | integer
typeAware boolean

Enable rules that require type information.

Equivalent to passing --type-aware on the CLI.

Note that this requires the oxlint-tsgolint package to be installed.

typeCheck boolean

Enable experimental type checking (includes TypeScript compiler diagnostics).

Equivalent to passing --type-check on the CLI.

Note that this requires the oxlint-tsgolint package to be installed.

OxlintOverride object
files required

A list of glob patterns to override.

Example

[ "*.test.ts", "*.spec.ts" ]

All of: GlobSet string[]
env

Environments enable and disable collections of global variables.

All of: OxlintEnv object
globals

Enabled or disabled specific global variables.

All of: OxlintGlobals object
jsPlugins null | ExternalPluginEntry[]

JS plugins for this override, allows usage of ESLint plugins with Oxlint.

Read more about JS plugins in the docs.

Note: JS plugins are in alpha and not subject to semver.

plugins

Optionally change what plugins are enabled for this override. When omitted, the base config's plugins are used.

Default: null
All of: LintPlugins LintPluginOptionsSchema[]
rules
Default:
{}
All of: OxlintRules DummyRuleMap
OxlintOverrides OxlintOverride[]
OxlintRules Record<string, AllowWarnDeny | array>
OxlintSettings object

Configure the behavior of linter plugins.

Here's an example if you're using Next.js in a monorepo:

{
"settings": {
"next": {
"rootDir": "apps/dashboard/"
},
"react": {
"linkComponents": [
{ "name": "Link", "linkAttribute": "to" }
]
},
"jsx-a11y": {
"components": {
"Link": "a",
"Button": "button"
}
}
}
}
jsdoc
Default:
{
  "ignorePrivate": false,
  "ignoreInternal": false,
  "ignoreReplacesDocs": true,
  "overrideReplacesDocs": true,
  "augmentsExtendsReplacesDocs": false,
  "implementsReplacesDocs": false,
  "exemptDestructuredRootsFromChecks": false,
  "tagNamePreference": {}
}
All of: JSDocPluginSettings object
jsx-a11y
Default:
{
  "polymorphicPropName": null,
  "components": {},
  "attributes": {}
}
All of: JSXA11yPluginSettings object
next
Default:
{
  "rootDir": []
}
All of: NextPluginSettings object
react
Default:
{
  "formComponents": [],
  "linkComponents": [],
  "version": null,
  "componentWrapperFunctions": []
}
All of: ReactPluginSettings object
vitest
Default:
{
  "typecheck": false
}
All of: VitestPluginSettings object
ReactPluginSettings object

Configure React plugin rules.

Derived from eslint-plugin-react

componentWrapperFunctions string[]

Functions that wrap React components and should be treated as HOCs.

Example:

{
"settings": {
"react": {
"componentWrapperFunctions": ["observer", "withRouter"]
}
}
}
Default:
[]
formComponents CustomComponent[]

Components used as alternatives to <form> for forms, such as <Formik>.

Example:

{
"settings": {
"react": {
"formComponents": [
"CustomForm",
// OtherForm is considered a form component and has an endpoint attribute
{ "name": "OtherForm", "formAttribute": "endpoint" },
// allows specifying multiple properties if necessary
{ "name": "Form", "formAttribute": ["registerEndpoint", "loginEndpoint"] }
]
}
}
}
Default:
[]
linkComponents CustomComponent[]

Components used as alternatives to <a> for linking, such as <Link>.

Example:

{
"settings": {
"react": {
"linkComponents": [
"HyperLink",
// Use `linkAttribute` for components that use a different prop name
// than `href`.
{ "name": "MyLink", "linkAttribute": "to" },
// allows specifying multiple properties if necessary
{ "name": "Link", "linkAttribute": ["to", "href"] }
]
}
}
}
Default:
[]
version string

React version to use for version-specific rules.

Accepts semver versions (e.g., "18.2.0", "17.0").

Example:

{
"settings": {
"react": {
"version": "18.2.0"
}
}
}
Default: null
pattern=^[1-9]\d*(\.(0|[1-9]\d*))?(\.(0|[1-9]\d*))?$
TagNamePreference string | object | object | boolean
VitestPluginSettings object

Configure Vitest plugin rules.

See eslint-plugin-vitest's configuration for a full reference.

typecheck boolean

Whether to enable typecheck mode for Vitest rules. When enabled, some rules will skip certain checks for describe blocks to accommodate TypeScript type checking scenarios.

Default: false