Changelog - 2026-10-20
oxlint config without loading ESLint
EnhancementIn one line. Import OxlintConfigs from @venizia/dev-configs/linters/oxlint and an oxlint run no longer loads ESLint and its plugins first.
typescript
// .configs/oxlint.config.mts
import { defineConfig } from 'oxlint';
import { OxlintConfigs } from '@venizia/dev-configs/linters/oxlint';
export default defineConfig(OxlintConfigs.create({ lenientFallback: true }));What changed
- New subpath
@venizia/dev-configs/linters/oxlint. It exportsoxlintConfigs,OxlintConfigs,IOxlintPresetOptions,BrowserOxlintConfigs,ReactOxlintConfigs,LintIgnoreand the rule classes (EqeqeqRule,NoRestrictedImportsRule,NoRestrictedPropertiesRule,NoUnusedVarsRule,PreferNullishCoalescingRule,SwitchCaseBracesRule,NamingConventionRule) with their types - everything an oxlint config needs, and nothing that imports ESLint. - Why it is faster. oxlint evaluates
.configs/oxlint.config.mtson every run.@venizia/dev-configs/lintersis one file that loads every linter module, including the ones that import ESLint,typescript-eslintand their plugins. That cost about 1 s per run, for a config that uses none of it. The new subpath loads in a few milliseconds. - The rules are the same.
oxlint --print-configprints identical output for both imports. @venizia/dev-configs/lintersis unchanged. It still exports everything, including the three oxlint presets, so no existing import breaks. Inside the package,ReactOxlintConfigsmoved to its own file,react-oxlint.ts, andreact.tsis nowreact-eslint.ts, so each file is named for its tool.
Who is affected
- A project whose oxlint config imports from
@venizia/dev-configs/linters. Change that import to@venizia/dev-configs/linters/oxlintto save the load time. A config that customises rules or usesLintIgnorefinds them there too. - A project that also imports from
@venizia/dev-configs/lintersin its ESLint config. Leave that import.namingConventionConfigs,reactNamingConventionConfigsandhouseConfigsneed ESLint and stay in/linters.