Конфигурация
Oxlint работает из коробки, но команды обычно коммитят файл конфигурации (.oxlintrc.json или oxlint.config.ts), чтобы линт был единообразен локально, в редакторах и CI.
Здесь — про конфигурацию проекта: правила, категории, плагины, overrides и общие настройки.
Создать файл конфигурации
Стартовый конфиг в текущей директории (JSON):
oxlint --initOxlint ищет .oxlintrc.json или oxlint.config.ts в текущем каталоге. Можно явно указать конфиг (при этом отключается поиск вложенных конфигов):
oxlint -c ./oxlintrc.json
# или
oxlint --config ./oxlintrc.jsonЗамечания:
- В
.oxlintrc.jsonподдерживаются комментарии (как в jsonc). - Формат ориентирован на совместимость с ESLint v8 (
eslintrc.json). - В одной директории используйте либо
.oxlintrc.json, либоoxlint.config.ts, не оба сразу.
Минимальный пример:
{
"$schema": "./node_modules/oxlint/configuration_schema.json",
"categories": {
"correctness": "warn"
},
"rules": {
"eslint/no-unused-vars": "error"
}
}TypeScript-конфиг (oxlint.config.ts)
Поддерживается файл oxlint.config.ts.
import { defineConfig } from "oxlint";
export default defineConfig({
categories: {
correctness: "warn",
},
rules: {
"eslint/no-unused-vars": "error",
},
});Замечания:
- Имя файла должно быть
oxlint.config.ts(в том числе при передаче через--config). - Экспорт по умолчанию — объект, желательно обёрнутый в
defineConfigдля типов. - TypeScript-конфиги требуют npm-пакет
oxlint(JS runtime). Для standalone-бинарника используйте.oxlintrc.json. - Нужен Node, который выполняет TypeScript (Node v22.18+ или v24+).
Формат файла конфигурации
Файл — либо JSON-объект (.oxlintrc.json), либо TS-модуль с экспортом по умолчанию (oxlint.config.ts). Типичные поля верхнего уровня:
rules: включение/выключение правил, строгость, опции.categories: группы правил с общим смыслом.plugins: встроенные плагины с дополнительными правилами.jsPlugins: JavaScript-плагины (alpha).overrides: разная конфигурация для разных шаблонов файлов.extends: наследование от других файлов.ignorePatterns: дополнительные игноры из конфига.env: предопределённые глобалы для сред.globals: пользовательские глобалы read-only / writable.settings: общие для плагина настройки, которыми пользуются несколько правил.options: опции уровня линтера (напримерoptions.typeAwareиoptions.typeCheck).
Полный перечень полей — в справочнике по файлу конфигурации.
Опции линтера
Поведение на уровне всего линтера — в options. Полный список — в справочнике.
Пример:
{
"options": {
"typeAware": true,
"typeCheck": true,
"maxWarnings": 10
}
}import { defineConfig } from "oxlint";
export default defineConfig({
options: {
typeAware: true,
typeCheck: true,
maxWarnings: 10,
},
});options.typeAwareэквивалентно--type-awareв CLI.options.typeCheck(эксперимент) эквивалентно--type-checkв CLI.options.maxWarningsэквивалентно--max-warningsв CLI.
При конфликте приоритет у флагов CLI.
options.typeAware и options.typeCheck только в корневом конфиге.
Настройка правил
Правила задаются в rules.
Значение правила:
- строгость (
"off","warn","error"), или - массив
[severity, options]
Для правил из ядра ESLint с уникальным именем префикс плагина не обязателен: no-console то же, что eslint/no-console.
{
"rules": {
"no-alert": "error",
"oxc/approx-constant": "warn",
"no-plusplus": "off",
"eslint/prefer-const": ["error", { "destructuring": "any" }]
}
}import { defineConfig } from "oxlint";
export default defineConfig({
rules: {
"no-alert": "error",
"oxc/approx-constant": "warn",
"no-plusplus": "off",
"eslint/prefer-const": ["error", { destructuring: "any" }],
},
});Значения строгости
В духе ESLint:
- Отключить:
"off"или"allow" - Предупреждение:
"warn" - Ошибка:
"error"или"deny"
Опции правил
Опции — через массив:
{
"rules": {
"no-plusplus": ["error", { "allowForLoopAfterthoughts": true }]
}
}import { defineConfig } from "oxlint";
export default defineConfig({
rules: {
"no-plusplus": ["error", { allowForLoopAfterthoughts: true }],
},
});Список правил и опций — в справочнике правил.
Строгость из CLI
Для экспериментов:
-A/--allow-W/--warn-D/--deny
Применяются слева направо:
oxlint -D no-alert -W oxc/approx-constant -A no-plusplusКатегории правил
Категории включают или отключают наборы правил с общей целью. По умолчанию Oxlint включает категорию correctness.
Настройка через categories:
{
"categories": {
"correctness": "error",
"suspicious": "warn",
"pedantic": "off"
}
}import { defineConfig } from "oxlint";
export default defineConfig({
categories: {
correctness: "error",
suspicious: "warn",
pedantic: "off",
},
});Доступные категории:
correctness: явно ошибочный или бесполезный кодsuspicious: код, который с высокой вероятностью ошибочен или бесполезенpedantic: очень строгие правила, возможны ложные срабатыванияperf: производительность во время выполненияstyle: идиоматический единый стильrestriction: запрет отдельных приёмов или возможностей языкаnursery: правила в разработке, могут меняться
Категории можно задавать в CLI теми же -A, -W, -D:
oxlint -D correctness -D suspiciousПлагины
Плагины расширяют набор правил.
Многие популярные плагины реализованы в Rust в Oxlint — широкое покрытие без тяжёлого дерева JS-зависимостей. См. Встроенные плагины.
Поле plugins заменяет набор плагинов по умолчанию — перечислите все нужные:
{
"plugins": ["unicorn", "typescript", "oxc"]
}import { defineConfig } from "oxlint";
export default defineConfig({
plugins: ["unicorn", "typescript", "oxc"],
});Отключить все плагины по умолчанию:
{
"plugins": []
}import { defineConfig } from "oxlint";
export default defineConfig({
plugins: [],
});Детали и флаги CLI вроде --import-plugin — на странице Встроенные плагины.
JS-плагины (alpha)
Через jsPlugins — для совместимости с ESLint-плагинами и продвинутых сценариев.
Замечания:
- JS-плагины в alpha, semver не гарантируется.
Строки или объекты с псевдонимом:
{
"jsPlugins": [
"eslint-plugin-playwright",
{ "name": "my-eslint-react", "specifier": "eslint-plugin-react" }
]
}import { defineConfig } from "oxlint";
export default defineConfig({
jsPlugins: [
"eslint-plugin-playwright",
{ name: "my-eslint-react", specifier: "eslint-plugin-react" },
],
});Имена вроде react, unicorn, typescript, oxc, import, jest, vitest, jsx-a11y, nextjs зарезервированы под нативную реализацию. Нужна JS-версия — задайте свой name.
Подробнее — JS-плагины.
Конфигурация по шаблону файлов
overrides — разные настройки для тестов, скриптов, только TypeScript и т.д.
Каждый элемент может содержать:
files: glob-шаблоныrules: как верхний уровеньrulesenv,globals: как на верхнем уровнеplugins: сменить список плагинов для этого overridejsPlugins: JS-плагины для override (alpha)
Пример:
{
"$schema": "./node_modules/oxlint/configuration_schema.json",
"rules": {
"no-console": "error"
},
"overrides": [
{
"files": ["scripts/*.js"],
"rules": {
"no-console": "off"
}
},
{
"files": ["**/*.{ts,tsx}"],
"plugins": ["typescript"],
"rules": {
"typescript/no-explicit-any": "error"
}
},
{
"files": ["**/test/**"],
"plugins": ["jest"],
"env": {
"jest": true
},
"rules": {
"jest/no-disabled-tests": "off"
}
}
]
}import { defineConfig } from "oxlint";
export default defineConfig({
rules: {
"no-console": "error",
},
overrides: [
{
files: ["scripts/*.js"],
rules: {
"no-console": "off",
},
},
{
files: ["**/*.{ts,tsx}"],
plugins: ["typescript"],
rules: {
"typescript/no-explicit-any": "error",
},
},
{
files: ["**/test/**"],
plugins: ["jest"],
env: {
jest: true,
},
rules: {
"jest/no-disabled-tests": "off",
},
},
],
});Общие конфиги (extends)
extends подключает другие файлы конфигурации.
Пути разрешаются относительно файла с extends. Слияние идёт по порядку массива, последующие перекрывают предыдущие.
{
"extends": ["./configs/base.json", "./configs/frontend.json"]
}import baseConfig from "./configs/base.ts";
import frontendConfig from "./configs/frontend.ts";
import { defineConfig } from "oxlint";
export default defineConfig({
extends: [baseConfig, frontendConfig],
});Среды и глобалы
env — готовые наборы глобалов (browser, node и т.д.).
globals — свои глобалы, writable/readonly или отключение глобала, который иначе был бы доступен.
{
"env": {
"es6": true
},
"globals": {
"MY_GLOBAL": "readonly",
"Promise": "off"
}
}import { defineConfig } from "oxlint";
export default defineConfig({
env: {
es6: true,
},
globals: {
MY_GLOBAL: "readonly",
Promise: "off",
},
});globals допускает:
"readonly"/"readable"/false"writable"/"writeable"/true"off"— отключить глобал
Настройки плагинов (settings)
Общие для плагина параметры, которыми пользуются несколько правил.
Пример (монорепо + React + jsx-a11y):
{
"settings": {
"next": {
"rootDir": "apps/dashboard/"
},
"react": {
"linkComponents": [{ "name": "Link", "linkAttribute": "to" }]
},
"jsx-a11y": {
"components": {
"Link": "a",
"Button": "button"
}
}
}
}import { defineConfig } from "oxlint";
export default defineConfig({
settings: {
next: {
rootDir: "apps/dashboard/",
},
react: {
linkComponents: [{ name: "Link", linkAttribute: "to" }],
},
"jsx-a11y": {
components: {
Link: "a",
Button: "button",
},
},
},
});Дальше
- Игнорирование файлов: шаблоны,
.gitignore,.eslintignore, symlinks. - Инлайн-комментарии: подавления и локальные исключения.
- Вложенные конфиги: монорепо и конфиг на пакет.
- Справочник файла конфигурации: полная схема и поля.
- Справочник CLI: флаги и форматы вывода.