oxlint
Configuration file for Oxlint, a high-performance linter for JavaScript and TypeScript built on the Oxc compiler stack
| 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
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 URI for editor tooling.
Environments enable and disable collections of global variables.
{
"builtin": true
}
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.
Globs to ignore during linting. These are resolved from the configuration file path.
[]
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"
}
}
Add, remove, or otherwise reconfigure rules for specific files or groups of files.
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.
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.
{}
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.
{
"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
}
}
Definitions
See Oxlint Rules
A set of glob patterns.
Only for require-(yields|returns|description|example|param|throws) rule
Only for require-param-type and require-param-description rule
For all rules but NOT apply to empty-tags rule
For all rules but NOT apply to check-access and empty-tags rule
Only for require-(yields|returns|description|example|param|throws) rule
Only for require-(yields|returns|description|example|param|throws) rule
Only for require-(yields|returns|description|example|param|throws) rule
{}
Configure JSX A11y plugin rules.
See eslint-plugin-jsx-a11y's configuration for a full reference.
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"]
}
}
}
}
{}
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"
}
}
}
}
{}
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.
Configure Next.js plugin rules.
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/"
}
}
}
[]
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"
}
}
{ "correctness": "warn" }
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.
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".
Options for the linter.
Ensure warnings produce a non-zero exit code.
Equivalent to passing --deny-warnings on the CLI.
Specify a warning threshold. Exits with an error status if warnings exceed this value.
Equivalent to passing --max-warnings on the CLI.
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.
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.
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.
A list of glob patterns to override.
Example
[ "*.test.ts", "*.spec.ts" ]
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.
Optionally change what plugins are enabled for this override. When omitted, the base config's plugins are used.
See Oxlint Rules
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"
}
}
}
}
{
"ignorePrivate": false,
"ignoreInternal": false,
"ignoreReplacesDocs": true,
"overrideReplacesDocs": true,
"augmentsExtendsReplacesDocs": false,
"implementsReplacesDocs": false,
"exemptDestructuredRootsFromChecks": false,
"tagNamePreference": {}
}
{
"polymorphicPropName": null,
"components": {},
"attributes": {}
}
{
"formComponents": [],
"linkComponents": [],
"version": null,
"componentWrapperFunctions": []
}
Configure React plugin rules.
Derived from eslint-plugin-react
Functions that wrap React components and should be treated as HOCs.
Example:
{
"settings": {
"react": {
"componentWrapperFunctions": ["observer", "withRouter"]
}
}
}
[]
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"] }
]
}
}
}
[]
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"] }
]
}
}
}
[]
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"
}
}
}
Configure Vitest plugin rules.
See eslint-plugin-vitest's configuration for a full reference.
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.