Changelog
Patch Changes
Section titled “Patch Changes”-
#95
2576ec6Thanks @santi020k! - Fix agent skill path convention, Astro virtual JS glob, and TypeScript virtual-file parser setup- Agent skill generator now writes
SKILL.mdinsideskills/eslint-standards/instead ofeslint-standards.mdinsideskills/, aligning with theskill://URL convention used by Claude Code and other agents - Gemini target follows the same convention (was
styleguide.mdat root) - Added
**/*.astro/*.jstoGLOB_VIRTUAL_TSso Astro virtual JavaScript fragments with TypeScript syntax are parsed correctly - Added a dedicated ESLint config block that disables
projectService/projectfor all virtual TS/JS files, preventing TypeScript project service errors on those fragments
- Agent skill generator now writes
-
Updated dependencies [
2576ec6]:- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
Minor Changes
Section titled “Minor Changes”- #93
9bf89baThanks @santi020k! - Preserve detected runtime globals when detection infers a preset, including Cloudflare-specific globals, and stop warning for supportedtypescript.projectparser options.
Patch Changes
Section titled “Patch Changes”-
#93
9bf89baThanks @santi020k! - Remove the internal./dist/index.jspath from the package exports map. This key was leaking a dist path as a public entrypoint alongside the canonical.entry; only.should be exported.Update the npm package description to list all v2 frameworks: Lit, Nuxt, Preact, React Router, TanStack Start, and Vite were missing from the v1-era description string.
Fix the Node.js compatibility row in the root README — it said
>=22.18.0(the dev-workspace floor) but published packages declare>=22.0.0. -
#93
9bf89baThanks @santi020k! - Updateengines.nodefloor to^20.19.0 || >=22.18.0to safely support Node 20 environments while avoiding installation failures on early Node 22 versions. -
Updated dependencies [
9bf89ba]:- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
Major Changes
Section titled “Major Changes”-
#87
2ee503bThanks @santi020k! - Breaking: require ESLint 10. All packages now declare"eslint": "^10.0.0"as peer dependency (previously^9.0.0 || ^10.0.0), and@santi020k/eslint-config-coredepends on@eslint/jsv10.ESLint v9.x reaches end-of-life on 2026-08-06; targeting v10 only lets the configs rely on v10 behavior:
- per-file config lookup (
eslint.config.*resolved from each linted file’s directory) — workspace packages can now ship their own config files alongside or instead of the rootprojectsoption - JSX reference tracking — correct scope analysis for JSX without plugin workarounds
- the updated
eslint:recommendedbaseline from@eslint/jsv10
If you are still on ESLint 9, stay on the v1.x line of these packages.
- per-file config lookup (
-
#87
2ee503bThanks @santi020k! - Lazy framework loading and normalized framework export naming.Lazy loading: framework packages (angular-eslint, vue-eslint-parser, eslint-plugin-svelte, …) are now imported dynamically and only when their framework is enabled. Projects that enable none or few frameworks no longer pay the startup cost of loading every bundled framework plugin when
eslintConfig()/defineConfig()runs.Breaking — normalized naming: framework exports from
@santi020k/eslint-config-basicnow use bare framework names, and all of them are async factories returningPromise<FlatConfigArray>:angular,astro,expo,hono,lit,nest,next,nuxt,qwik,react,reactRouter,slidev,solid,svelte,tanstackStart,vite,vue(plus deprecatedremix).The previous mixed-style names (
angularConfig,expoConfig,nestConfig,nextConfig,reactConfig,solidConfig,svelteConfig,vueConfig) remain available as deprecated aliases of the same factories, but they are no longer plain config arrays — call them (andawaitthe result) when composing manually:// before (v1)import { reactConfig } from '@santi020k/eslint-config-basic'export default [...reactConfig]// after (v2)import { react } from '@santi020k/eslint-config-basic'export default [...(await react())]Most users are unaffected:
frameworks: { react: true }and auto-detection behave exactly as before.@santi020k/eslint-config-core: theImportedFrameworktype now also accepts async factories ((options?) => Promise<FlatConfigArray>), so lazy factories can be passed directly as framework option values. -
#87
2ee503bThanks @santi020k! - Release v2 with a single public application install through@santi020k/eslint-config-basic.Application projects no longer need to install or import separate framework config packages. Framework integrations are bundled behind the main package and can be enabled with booleans such as
frameworks.react: true,frameworks.next: true, or by relying on auto-detection fromeslintConfig().Detected framework configs are now enabled by default, while an explicit
frameworks: {}remains the opt-out path. Next.js, Expo, and Remix automatically include React rules when enabled.The documentation site now keeps the previous v1 docs under
/v1/, updates the root docs for v2, and includes a v1 to v2 migration guide. -
#87
2ee503bThanks @santi020k! - Modernize the React stack and rename Remix:- BREAKING:
@santi020k/eslint-config-reactnow uses@eslint-react/eslint-plugininstead ofeslint-plugin-react+eslint-plugin-react-hooks. Rule names change fromreact/*andreact-hooks/*to@eslint-react/*(e.g.react-hooks/exhaustive-deps→@eslint-react/exhaustive-deps). This removes thefixupConfigRulescompatibility shim, is ESLint 10-native, and includes the hooks rules.react-compilerandreact-refreshplugins are unchanged. - BREAKING:
@santi020k/eslint-config-remixis now a deprecated alias that re-exports@santi020k/eslint-config-react-router(Remix merged into React Router v7). Theframeworks.remixkey still works but is deprecated — useframeworks['react-router']. The alias will be removed in the next major. - The toolchain now builds with TypeScript 6.
- BREAKING:
Minor Changes
Section titled “Minor Changes”-
#87
2ee503bThanks @santi020k! - Add first-class support for Preact. -
#87
2ee503bThanks @santi020k! - AI tooling workflow improvements:- Default ignores for AI artifacts: the composed config now ignores AI coding-assistant folders (
.agent,.agents,.aider*,.claude,.clinerules,.codex,.copilot,.cursor,.gemini,.kiro,.opencode,.roo,.windsurf) so generated agent rules are never linted as source code. Disable viasettings: [Setting.NoDefaultIgnores]. generate-skill --check: CI mode that compares existing agent skill files (and guardedAGENTS.md/ copilot-instructions sections) against freshly generated content without writing, and exits with code 1 when anything is stale or missing.generate-skill --create: scaffolds a rootAGENTS.mdwith the guarded ESLint-standards section when the project has none.doctorduplicate-ESLint detection: warns when the project and the config packages resolve two different ESLint versions (e.g. an ESLint 9 project pulling in the config’s ESLint 10 dependency). Both majors remain supported; the warning helps avoid editor/CLI rule-behavior drift.
- Default ignores for AI artifacts: the composed config now ignores AI coding-assistant folders (
-
#87
2ee503bThanks @santi020k! - Add broader AI tooling support:- New agent skill targets in
generate-skill: Gemini (.gemini/styleguide.md), Cline (.clinerules/), Roo Code (.roo/rules/), and Kiro (.kiro/steering/withinclusion: alwaysfront-matter). The generator also maintains a guarded ESLint-standards section in an existing rootAGENTS.md(the open standard read by Codex CLI, OpenCode, Jules, Amp, and others), mirroring the.github/copilot-instructions.mdbehavior. - New library integrations:
Library.LangchainandLibrary.LlamaIndexadd import safety rules for LangChain.js (langchain,@langchain/*) and LlamaIndex.TS (llamaindex,@llamaindex/*) projects, with auto-detection frompackage.jsondependencies. - Generated agent skills now report AI SDK, MCP, Mastra, OpenAI Agents, LangChain, and LlamaIndex integrations in the feature summary.
- New agent skill targets in
-
dfba51dThanks @santi020k! - Improve config migration handling and enhance TypeScript options detection -
#87
2ee503bThanks @santi020k! - Add optionalignorestoeslintConfig()/EslintConfigOptionsfor extra global ignore globs, documented in the configuration guide. -
#87
2ee503bThanks @santi020k! - AdddefineConfigas a named alias foreslintConfig, keep implicit framework expansion from mutating caller-provided options, declare ESLint as a peer dependency of the umbrella package, and mark the package as side-effect free for bundlers. -
#87
2ee503bThanks @santi020k! - FixoptionMergeStrategy: 'merge'so explicitly passed options (tools,testing,formats,libraries,extensions,frameworks) are actually unioned with detected and preset values, as documented. Previously, providing any of these options silently replaced detected/preset values regardless of strategy. To fully opt out of detected frameworks, useautoFrameworks: falseoroptionMergeStrategy: 'replace'(an explicitframeworks: {}no longer opts out under the default merge strategy).Other fixes:
detection: falsenow also disables the default detected extensions (Unicorn, Perfectionist, Security); a new granulardetection: { extensions: false }control is available.- Negated glob patterns (
!pattern) inprojectssub-configs are now scoped correctly instead of producing invalidpath/!globpatterns. - Deprecate the unused
TsOptionsinterface (typescript: { project }was ignored since v2) and correct stale doc comments onImportedFrameworkand the no-opSetting.Gitignore/Setting.DefaultIgnoresvalues.
-
#87
2ee503bThanks @santi020k! - Disable context-sensitive framework rules that produce false positives in lint-staged and monorepo layouts: Nest’s provider reference rule and Next’s Pages Router link rule. -
#91
59158dbThanks @santi020k! - TailwindnoUnknownClassesoption, expanded testing config names, and virtual TS parser fix.TailwindOptions.noUnknownClasses: new optional field ('error' | 'warn' | 'off' | false) to control thebetter-tailwindcss/no-unknown-classesrule severity. Defaults to'error'when a Tailwind entry point is detected; set tofalseor'off'to disable.- Testing config overrides:
TESTING_CONFIG_NAMESnow maps Cypress, Jest, JestDom, Playwright, TestingLibrary, and Vitest — so per-testing-tool file overrides are applied for all supported testing integrations, not just Playwright. - TypeScript virtual file parser: the parser-setup config block now also covers virtual TS files (
parserSetupFilesincludesGLOB_VIRTUAL_TS), fixing missing parser options for framework-generated virtual modules.
-
#87
2ee503bThanks @santi020k! - Add new framework and integration support:- New framework packages: Nuxt (
@nuxt/eslint-pluginon top of the Vue config), Lit (eslint-plugin-lit+eslint-plugin-wc), React Router v7 (successor to Remix), and TanStack Start (bundles TanStack Router + Query rules). All are wired intoeslintConfig()framework keys, bundled resolvers, auto-detection (nuxt,lit,@react-router/dev,@tanstack/react-start,@tanstack/solid-start), the CLI, and the agent-skill generator. - New formats:
Format.Css(official@eslint/cssplugin) andFormat.Html(@html-eslint). - New extensions:
Extension.Node(eslint-plugin-n, with TS-aware module-resolution overrides),Extension.Compat(browserslist compatibility),Extension.DeMorgan,Extension.Depend, andExtension.Oxlint(disables rules covered by Oxlint for hybrid setups, applied last like Biome). - New tool:
Tool.Pnpm(eslint-plugin-pnpm) enforcing pnpm catalogs and workspace settings inpackage.jsonandpnpm-workspace.yaml.
- New framework packages: Nuxt (
Patch Changes
Section titled “Patch Changes”-
#87
2ee503bThanks @santi020k! - Refresh all external dependencies to their latest versions across the monorepo (58 bumps), including majors: TypeScript 6.0, Vite 8, Angular 22, MikroORM 7, and TypeORM 1.0. ESLint moves to 10.5, theviteandeslintpnpm overrides are updated to match, and the Angular and NestJS playgrounds now declarerxjs@^7.8.2explicitly so framework peer dependencies no longer resolve against a stale transitive rxjs 6. -
#92
9524bf8Thanks @santi020k! - fix: exportboundariesfrom the main package barrel — it was wired internally but missing from the public API, makingimport { boundaries } from '@santi020k/eslint-config-basic'resolve to undefined -
#92
9524bf8Thanks @santi020k! - fix: gatesecurity/detect-non-literal-fs-filenamescripts override on Security extension being enabled — previously the rule was always emitted, which caused ESLint to throw “Could not find plugin ‘security’” for consumers who did not opt in to the Security extension -
#87
2ee503bThanks @santi020k! - Add@santi020k/eslint-config-liteas an optional composer package for projects that want to install framework and integration config packages manually. The full@santi020k/eslint-config-basicpackage remains the recommended default install.Expose integration composition helpers from
@santi020k/eslint-config-integrationsso the lite package can lazy-load integration configs only when selected.Teach
basic-eslint doctorto recognize lite configs and warn when detected frameworks or integrations are missing their manually installed config packages.Add
basic-eslint doctor --lite-installto print the detected package-manager install command for switching a project to the lite package, including framework config packages, integrations, ESLint, and TypeScript when needed.Document package-choice metrics, a Basic-to-Lite migration recipe, and a lite-specific
Preset.Allwarning. -
Updated dependencies [
2ee503b,2ee503b,dfba51d,2ee503b,2ee503b,2ee503b,9524bf8,59158db,2ee503b,2ee503b,2ee503b,2ee503b,2ee503b,2ee503b,2ee503b,59158db,2ee503b,2ee503b]:- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
2.0.0-beta.3
Section titled “2.0.0-beta.3”Patch Changes
Section titled “Patch Changes”- Updated dependencies [
af152cd]:- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
2.0.0-beta.2
Section titled “2.0.0-beta.2”Minor Changes
Section titled “Minor Changes”-
Tailwind
noUnknownClassesoption, expanded testing config names, and virtual TS parser fix.TailwindOptions.noUnknownClasses: new optional field ('error' | 'warn' | 'off' | false) to control thebetter-tailwindcss/no-unknown-classesrule severity. Defaults to'error'when a Tailwind entry point is detected; set tofalseor'off'to disable.- Testing config overrides:
TESTING_CONFIG_NAMESnow maps Cypress, Jest, JestDom, Playwright, TestingLibrary, and Vitest — so per-testing-tool file overrides are applied for all supported testing integrations, not just Playwright. - TypeScript virtual file parser: the parser-setup config block now also covers virtual TS files (
parserSetupFilesincludesGLOB_VIRTUAL_TS), fixing missing parser options for framework-generated virtual modules.
Patch Changes
Section titled “Patch Changes”- Updated dependencies []:
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
2.0.0-beta.1
Section titled “2.0.0-beta.1”Minor Changes
Section titled “Minor Changes”dfba51dThanks @santi020k! - Improve config migration handling and enhance TypeScript options detection
Patch Changes
Section titled “Patch Changes”- Updated dependencies [
dfba51d]:- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
2.0.0-beta.0
Section titled “2.0.0-beta.0”Major Changes
Section titled “Major Changes”-
#87
2ee503bThanks @santi020k! - Breaking: require ESLint 10. All packages now declare"eslint": "^10.0.0"as peer dependency (previously^9.0.0 || ^10.0.0), and@santi020k/eslint-config-coredepends on@eslint/jsv10.ESLint v9.x reaches end-of-life on 2026-08-06; targeting v10 only lets the configs rely on v10 behavior:
- per-file config lookup (
eslint.config.*resolved from each linted file’s directory) — workspace packages can now ship their own config files alongside or instead of the rootprojectsoption - JSX reference tracking — correct scope analysis for JSX without plugin workarounds
- the updated
eslint:recommendedbaseline from@eslint/jsv10
If you are still on ESLint 9, stay on the v1.x line of these packages.
- per-file config lookup (
-
#87
2ee503bThanks @santi020k! - Lazy framework loading and normalized framework export naming.Lazy loading: framework packages (angular-eslint, vue-eslint-parser, eslint-plugin-svelte, …) are now imported dynamically and only when their framework is enabled. Projects that enable none or few frameworks no longer pay the startup cost of loading every bundled framework plugin when
eslintConfig()/defineConfig()runs.Breaking — normalized naming: framework exports from
@santi020k/eslint-config-basicnow use bare framework names, and all of them are async factories returningPromise<FlatConfigArray>:angular,astro,expo,hono,lit,nest,next,nuxt,qwik,react,reactRouter,slidev,solid,svelte,tanstackStart,vite,vue(plus deprecatedremix).The previous mixed-style names (
angularConfig,expoConfig,nestConfig,nextConfig,reactConfig,solidConfig,svelteConfig,vueConfig) remain available as deprecated aliases of the same factories, but they are no longer plain config arrays — call them (andawaitthe result) when composing manually:// before (v1)import { reactConfig } from '@santi020k/eslint-config-basic'export default [...reactConfig]// after (v2)import { react } from '@santi020k/eslint-config-basic'export default [...(await react())]Most users are unaffected:
frameworks: { react: true }and auto-detection behave exactly as before.@santi020k/eslint-config-core: theImportedFrameworktype now also accepts async factories ((options?) => Promise<FlatConfigArray>), so lazy factories can be passed directly as framework option values. -
#87
2ee503bThanks @santi020k! - Release v2 with a single public application install through@santi020k/eslint-config-basic.Application projects no longer need to install or import separate framework config packages. Framework integrations are bundled behind the main package and can be enabled with booleans such as
frameworks.react: true,frameworks.next: true, or by relying on auto-detection fromeslintConfig().Detected framework configs are now enabled by default, while an explicit
frameworks: {}remains the opt-out path. Next.js, Expo, and Remix automatically include React rules when enabled.The documentation site now keeps the previous v1 docs under
/v1/, updates the root docs for v2, and includes a v1 to v2 migration guide. -
#87
2ee503bThanks @santi020k! - Modernize the React stack and rename Remix:- BREAKING:
@santi020k/eslint-config-reactnow uses@eslint-react/eslint-plugininstead ofeslint-plugin-react+eslint-plugin-react-hooks. Rule names change fromreact/*andreact-hooks/*to@eslint-react/*(e.g.react-hooks/exhaustive-deps→@eslint-react/exhaustive-deps). This removes thefixupConfigRulescompatibility shim, is ESLint 10-native, and includes the hooks rules.react-compilerandreact-refreshplugins are unchanged. - BREAKING:
@santi020k/eslint-config-remixis now a deprecated alias that re-exports@santi020k/eslint-config-react-router(Remix merged into React Router v7). Theframeworks.remixkey still works but is deprecated — useframeworks['react-router']. The alias will be removed in the next major. - The toolchain now builds with TypeScript 6.
- BREAKING:
Minor Changes
Section titled “Minor Changes”-
#87
2ee503bThanks @santi020k! - Add first-class support for Preact. -
#87
2ee503bThanks @santi020k! - AI tooling workflow improvements:- Default ignores for AI artifacts: the composed config now ignores AI coding-assistant folders (
.agent,.agents,.aider*,.claude,.clinerules,.codex,.copilot,.cursor,.gemini,.kiro,.opencode,.roo,.windsurf) so generated agent rules are never linted as source code. Disable viasettings: [Setting.NoDefaultIgnores]. generate-skill --check: CI mode that compares existing agent skill files (and guardedAGENTS.md/ copilot-instructions sections) against freshly generated content without writing, and exits with code 1 when anything is stale or missing.generate-skill --create: scaffolds a rootAGENTS.mdwith the guarded ESLint-standards section when the project has none.doctorduplicate-ESLint detection: warns when the project and the config packages resolve two different ESLint versions (e.g. an ESLint 9 project pulling in the config’s ESLint 10 dependency). Both majors remain supported; the warning helps avoid editor/CLI rule-behavior drift.
- Default ignores for AI artifacts: the composed config now ignores AI coding-assistant folders (
-
#87
2ee503bThanks @santi020k! - Add broader AI tooling support:- New agent skill targets in
generate-skill: Gemini (.gemini/styleguide.md), Cline (.clinerules/), Roo Code (.roo/rules/), and Kiro (.kiro/steering/withinclusion: alwaysfront-matter). The generator also maintains a guarded ESLint-standards section in an existing rootAGENTS.md(the open standard read by Codex CLI, OpenCode, Jules, Amp, and others), mirroring the.github/copilot-instructions.mdbehavior. - New library integrations:
Library.LangchainandLibrary.LlamaIndexadd import safety rules for LangChain.js (langchain,@langchain/*) and LlamaIndex.TS (llamaindex,@llamaindex/*) projects, with auto-detection frompackage.jsondependencies. - Generated agent skills now report AI SDK, MCP, Mastra, OpenAI Agents, LangChain, and LlamaIndex integrations in the feature summary.
- New agent skill targets in
-
#87
2ee503bThanks @santi020k! - Add optionalignorestoeslintConfig()/EslintConfigOptionsfor extra global ignore globs, documented in the configuration guide. -
#87
2ee503bThanks @santi020k! - AdddefineConfigas a named alias foreslintConfig, keep implicit framework expansion from mutating caller-provided options, declare ESLint as a peer dependency of the umbrella package, and mark the package as side-effect free for bundlers. -
#87
2ee503bThanks @santi020k! - FixoptionMergeStrategy: 'merge'so explicitly passed options (tools,testing,formats,libraries,extensions,frameworks) are actually unioned with detected and preset values, as documented. Previously, providing any of these options silently replaced detected/preset values regardless of strategy. To fully opt out of detected frameworks, useautoFrameworks: falseoroptionMergeStrategy: 'replace'(an explicitframeworks: {}no longer opts out under the default merge strategy).Other fixes:
detection: falsenow also disables the default detected extensions (Unicorn, Perfectionist, Security); a new granulardetection: { extensions: false }control is available.- Negated glob patterns (
!pattern) inprojectssub-configs are now scoped correctly instead of producing invalidpath/!globpatterns. - Deprecate the unused
TsOptionsinterface (typescript: { project }was ignored since v2) and correct stale doc comments onImportedFrameworkand the no-opSetting.Gitignore/Setting.DefaultIgnoresvalues.
-
#87
2ee503bThanks @santi020k! - Disable context-sensitive framework rules that produce false positives in lint-staged and monorepo layouts: Nest’s provider reference rule and Next’s Pages Router link rule. -
#87
2ee503bThanks @santi020k! - Add new framework and integration support:- New framework packages: Nuxt (
@nuxt/eslint-pluginon top of the Vue config), Lit (eslint-plugin-lit+eslint-plugin-wc), React Router v7 (successor to Remix), and TanStack Start (bundles TanStack Router + Query rules). All are wired intoeslintConfig()framework keys, bundled resolvers, auto-detection (nuxt,lit,@react-router/dev,@tanstack/react-start,@tanstack/solid-start), the CLI, and the agent-skill generator. - New formats:
Format.Css(official@eslint/cssplugin) andFormat.Html(@html-eslint). - New extensions:
Extension.Node(eslint-plugin-n, with TS-aware module-resolution overrides),Extension.Compat(browserslist compatibility),Extension.DeMorgan,Extension.Depend, andExtension.Oxlint(disables rules covered by Oxlint for hybrid setups, applied last like Biome). - New tool:
Tool.Pnpm(eslint-plugin-pnpm) enforcing pnpm catalogs and workspace settings inpackage.jsonandpnpm-workspace.yaml.
- New framework packages: Nuxt (
Patch Changes
Section titled “Patch Changes”-
#87
2ee503bThanks @santi020k! - Refresh all external dependencies to their latest versions across the monorepo (58 bumps), including majors: TypeScript 6.0, Vite 8, Angular 22, MikroORM 7, and TypeORM 1.0. ESLint moves to 10.5, theviteandeslintpnpm overrides are updated to match, and the Angular and NestJS playgrounds now declarerxjs@^7.8.2explicitly so framework peer dependencies no longer resolve against a stale transitive rxjs 6. -
#87
2ee503bThanks @santi020k! - Add@santi020k/eslint-config-liteas an optional composer package for projects that want to install framework and integration config packages manually. The full@santi020k/eslint-config-basicpackage remains the recommended default install.Expose integration composition helpers from
@santi020k/eslint-config-integrationsso the lite package can lazy-load integration configs only when selected.Teach
basic-eslint doctorto recognize lite configs and warn when detected frameworks or integrations are missing their manually installed config packages.Add
basic-eslint doctor --lite-installto print the detected package-manager install command for switching a project to the lite package, including framework config packages, integrations, ESLint, and TypeScript when needed.Document package-choice metrics, a Basic-to-Lite migration recipe, and a lite-specific
Preset.Allwarning. -
Updated dependencies [
2ee503b,2ee503b,2ee503b,2ee503b,2ee503b,2ee503b,2ee503b,2ee503b,2ee503b,2ee503b,2ee503b,2ee503b,2ee503b,2ee503b]:- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
Minor Changes
Section titled “Minor Changes”-
#85
664693eThanks @santi020k! - Addbasic-eslint generate-skillCLI command andgenerateAgentSkills()API.The new command scans a project for AI coding-assistant agent folders (
.agent,.agents,.claude,.cursor,.windsurf,.copilot,.aider) and writes a tailored ESLint standards skill file into each one. The generated file describes the active configuration (TypeScript, frameworks, testing, tools, etc.) and instructs the agent to follow the project’s lint conventions automatically.A companion GitHub Actions workflow (
.github/workflows/agent-skills.yml) is included so projects can auto-regenerate skill files whenever the ESLint config changes.Usage:
Terminal window npx basic-eslint generate-skill # write skill files (skip existing)npx basic-eslint generate-skill --force # overwrite all skill filesProgrammatic API:
import { generateAgentSkills } from '@santi020k/eslint-config-basic'const { skipped, written } = generateAgentSkills({cwd: process.cwd(),force: true})
Patch Changes
Section titled “Patch Changes”-
#85
664693eThanks @santi020k! - Load optional integrations lazily so projects can import the base config without installing unrelated integration peers such as Storybook, GraphQL, Stencil, Cypress, or Testing Library.Also include the generated agent-skill API entry in the basic package build output so published packages do not reference a missing
agent-skill-generator.jsfile. -
Updated dependencies [
664693e]:- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
Minor Changes
Section titled “Minor Changes”- #82
af844f6Thanks @santi020k! - - Add first-class Hono support with Worker runtime globals, package detection, and a playground for Cloudflare Workers-style projects.- Lower the Node.js engine requirement to
>=22.18.0inpackage.jsonand.nvmrc, and validate CI against Node.js 22. - Update
README.mdwith a landing pointer to the canonical docs site.
- Lower the Node.js engine requirement to
Patch Changes
Section titled “Patch Changes”- Updated dependencies [
af844f6]:- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
Minor Changes
Section titled “Minor Changes”-
#80
7bccef0Thanks @santi020k! - # v1.4.0 — API improvements, new optional, and quality-of-life fixesBreaking changes
Section titled “Breaking changes”Unified Node.js requirement to >=24.0.0. All packages in the monorepo now strictly require Node.js 24.0.0 or higher. This ensures compatibility with modern dependency versions (such as
cspellv10) and aligns with the project’s long-term maintenance strategy.detectProjectOptions()no longer sets boolean flags onframeworks. Previously, auto-detection would setframeworks.react = true,frameworks.next = true, etc. Passing those values toeslintConfig()would throw aTypeErrorbecause framework configs must be real imports, not booleans.Detected frameworks are now reported via a new
detectedFrameworks: DetectedFrameworkName[]field. Theframeworksobject in the detection result stays empty, so spreadingdetectProjectOptions()intoeslintConfig()is always safe.// Before (would throw)const opts = detectProjectOptions()eslintConfig(opts) // ❌// opts.frameworks.next === true → TypeError inside eslintConfig()// After (safe)const opts = detectProjectOptions()// opts.detectedFrameworks → ['next', 'react'] (informational)// opts.frameworks → {} (safe to spread)eslintConfig(opts) // ✅New features
Section titled “New features”Extension.BestPracticesoptional config — adds four quality rules with no extra dependencies:no-console(warn) — catches leftover debug outputno-alert(error) — disallows browseralert/confirm/promptcomplexity(warn, max 10) — flags overly complex functionsmax-depth(warn, max 4) — flags deeply nested blocks
eslintConfig({ extensions: [Extension.BestPractices] })Category barrel exports for
@santi020k/eslint-config-optionals— five new sub-path exports let you import a whole category at once:// also: /extensions /tools /librariesNextModeauto-detection —detectProjectOptions()now detects App Router vs Pages Router by checking for anapp/orsrc/app/directory, sooptions.nextModeis set automatically.DetectedFrameworkNametype — new exported union type listing all framework names thatdetectProjectOptions()can detect. Useful for display logic or tooling built on top of detection.Improvements
Section titled “Improvements”Early
tsconfigRootDirvalidation —createTypescriptConfig()now throws a clear, actionable error at config-creation time if the providedtsconfigRootDirpath does not exist on disk, instead of failing silently at ESLint runtime.CI node version matrix — the build pipeline now runs against Node 24.x to ensure stability across the updated engine requirements.
docs/PHILOSOPHY.md— new document explaining the major design decisions: why hard deps, flat config only, lazy framework loading, rule severity philosophy, and how to extend or override rules.Changelog synchronization — new
sync-docs-changelog.mjsscript to automatically propagate root changelog updates to the documentation site.Bug Fixes
Section titled “Bug Fixes”- CLI Scaffolding: Resolved bug where auto-detected frameworks were not correctly included in the generated configuration.
- Rule Set Update: Updated React and Expo collections to reflect rule removals in
eslint-plugin-react-hooks@7recommended configuration. - Tailwind CSS Performance: Fixed
Atomics.wait()timeout errors in monorepos by providing customizable settings in the recommended Tailwind configuration.
Dependency Updates
Section titled “Dependency Updates”- External Plugins:
- Updated
@cspell/eslint-plugintov10.0.0(Major). - Updated
typescript-eslinttov8.59.0. - Updated
eslint-plugin-react-hookstov7.1.1. - Updated
eslint-plugin-perfectionisttov5.9.0. - Updated
eslint-plugin-sonarjstov4.0.3. - Updated
tailwindcsstov4.2.4.
- Updated
- Core Tooling:
- Updated
eslinttov10.2.1. - Updated
vitestand@vitest/coverage-v8tov4.1.5. - Internal alignment of
typescriptversion tov5.9.3.
- Updated
Patch Changes
Section titled “Patch Changes”- Updated dependencies [
7bccef0]:- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
Minor Changes
Section titled “Minor Changes”- #77
450fa19Thanks @santi020k! - Refresh package metadata and supporting docs for thesanti020k.comdomain migration.- Update documentation, canonical URLs, and package links from
santi020k.metosanti020k.com. - Sync npm package metadata so published packages point to the correct license, repository, issues page, and documentation URLs.
- Refresh low-risk ESLint ecosystem and release tooling dependencies.
- Update documentation, canonical URLs, and package links from
Patch Changes
Section titled “Patch Changes”- Updated dependencies [
450fa19]:- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
Minor Changes
Section titled “Minor Changes”-
#74
c63e902Thanks @santi020k! - # v1.2.0 Release - Documentation OverhaulThis release focuses on a comprehensive update of the documentation site and branding refresh.
Highlights
Section titled “Highlights”- VitePress Refresh: Major updates to the documentation structure, including new guides and improved navigation.
- Branding Assets: Added new official logos, icons, and social preview images (opengraph) in
packages/docs/public. - Theme Enhancements: Custom styling and component improvements for a more premium documentation experience.
- Improved Installation Guide: Updated steps for getting started with the latest features.
Patch Changes
Section titled “Patch Changes”- Updated dependencies [
c63e902]:- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
Minor Changes
Section titled “Minor Changes”-
#70
ef658c1Thanks @santi020k! - # 1.1.0 ReleaseUpdate Highlights
Section titled “Update Highlights”- ESLint 10 Support: Harmonized ESLint version to
^10.1.0across the monorepo and playgrounds. - Security Patches: Fixed vulnerabilities in
lodash,esbuild, andpath-to-regexpvia root overrides. - Solid Playground Fix: Resolved
MODULE_NOT_FOUNDerror in the Solid playground linting process.
- ESLint 10 Support: Harmonized ESLint version to
Patch Changes
Section titled “Patch Changes”- Updated dependencies [
ef658c1]:- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
Minor Changes
Section titled “Minor Changes”-
#66
6f2f473Thanks @santi020k! - v0.10.0 ReleaseMajor Changes
Section titled “Major Changes”- Migration to pnpm: Full migration of the monorepo from npm to pnpm workspaces (pnpm v10+). This includes better performance, stricter dependency management, and corepack integration.
- neostandard removal: Removed
neostandarddependency to provide more granular control and modularity in core rules. - Stylistic v4 -> v5: Upgraded to
@stylistic/eslint-pluginversion 5.x for improved formatting rules and TypeScript 5.7+ support. - GraphQL Integration: Added comprehensive support for GraphQL schemas and operations. This includes automated project detection for GraphQL files and specialized linting rules for both schema definitions and operation documents.
- React 19 Support: Updated React detection logic and configurations to support React 19.
Framework Updates
Section titled “Framework Updates”- Qwik & Remix Support: Added comprehensive ESLint configurations and functional playground environments for both Qwik and Remix frameworks.
- Dependency Alignment: Resolved critical
typescript-eslintdependency issues in Astro, Svelte, and Vue packages to ensure proper rule resolution and type safety. - Consistency Refinements: Standardized
disable-type-checkedrule blocks across all framework-specific configurations. - Documentation Overhaul: Major documentation refresh in root
README.mdand VitePress documentation. Added clarity on configuration priority, framework auto-detection, and full-settings examples.
Maintenance
Section titled “Maintenance”- Corepack Enablement: Added
corepacksupport for automated package manager version management. - Turbo Update: Bumped Turborepo to v2.9+ for faster builds and improved task caching.
- Turbo Optimizations: Configured Turborepo to output in
errors-onlymode witherrorsOnlyShowHashenabled, significantly reducing terminal noise during build and lint tasks. - Integration Test Improvements: Enhanced integration tests to be more robust, including proper
tsconfigRootDirhandling and better React version validation. - Playground Synchronization: Updated all playground packages to maintain parity with the latest framework rules.
-
#55
d8e4b4aThanks @santi020k! - feat: add standard ESLint configuration and resolve typecheck/hook failuresThis release introduces a new standard configuration in
@santi020k/eslint-config-coreand addresses several technical issues:- Fixed global typecheck failures across the monorepo.
- Resolved pre-commit hook issues with cspell.
- Fixed pre-push hook failures related to publint in the playground package.
- Added missing test coverage scripts and fixed CI build failures.
Patch Changes
Section titled “Patch Changes”- Updated dependencies [
6f2f473,d8e4b4a]:- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
Minor Changes
Section titled “Minor Changes”- 13e8e5a: # Release 0.8.0
- Snippet Fixes: Resolved ESLint parsing errors in virtual TypeScript files within Markdown, Astro, and VitePress code blocks by disabling type-aware rules for those snippets.
- Standalone TS Support: Restored
disableTypeCheckedconfiguration in the TypeScript package, ensuring it remains fully functional and parsing-error-free when used without the main composer. - Documentation Reorganization: Significantly expanded and restructured the documentation site, adding new pages for the Inspector, CLI Tooling, Extensions, and better framework-specific guides.
- Branding Update: Updated the author link label from “Website” to “Author” across all documentation files for improved brand identity.
- Composition Improvements: Refactored the configuration composer to be more robust when handling virtual snippets and framework contracts.
Patch Changes
Section titled “Patch Changes”-
CI & Workflow Stabilization
- Fixed invalid
actions/setup-nodeversion from@v6to@v4in Release and Docs workflows. - Improved CLI test performance and reliability by refactoring integration tests into fast in-memory unit tests.
- Enabled Turborepo caching in GitHub Actions to significantly reduce PR build times.
- Fixed invalid
-
Updated dependencies
-
Updated dependencies [13e8e5a]
- @santi020k/eslint-config-…@0.8.1
- @santi020k/eslint-config-…@0.8.1
- @santi020k/eslint-config-…@0.8.1
- @santi020k/eslint-config-…@0.8.1
- @santi020k/eslint-config-…@0.8.1
- @santi020k/eslint-config-…@0.8.1
- @santi020k/eslint-config-…@0.8.1
- @santi020k/eslint-config-…@0.8.1
- @santi020k/eslint-config-…@0.8.1
- @santi020k/eslint-config-…@0.8.1
- @santi020k/eslint-config-…@0.8.1
- @santi020k/eslint-config-…@0.8.1
Patch Changes
Section titled “Patch Changes”-
#43
6ceaa37Thanks @santi020k! - Sync README documentation with implemented features (Vue, Playwright). -
Updated dependencies []:
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
Minor Changes
Section titled “Minor Changes”- #41
d802dfbThanks @santi020k! - Add Playwright support as an optional configuration.
Patch Changes
Section titled “Patch Changes”- Updated dependencies [
d802dfb]:- @santi020k/[email protected]
- @santi020k/[email protected]
Minor Changes
Section titled “Minor Changes”- #39
1c11decThanks @santi020k! - feat(astro): add robust defaults and virtual script support for Astro 5+ feat(core): standardize internal dependencies to workspace:* for better monorepo development docs: add Tailwind CSS v4 compatibility notes and workarounds to README
Patch Changes
Section titled “Patch Changes”-
#39
1c11decThanks @santi020k! - Fix missing README in published package by ensuring symlinks are correctly handled duringprepackandpostpack, and explicitly includingREADME.mdandCHANGELOG.mdin thefilesarray. -
#39
1c11decThanks @santi020k! - refactor(optionals): replace eslint-plugin-tailwindcss with eslint-plugin-better-tailwindcss for better Tailwind v4 support -
Updated dependencies [
1c11dec,1c11dec]:- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
Minor Changes
Section titled “Minor Changes”- #36
85d6a5eThanks @santi020k! - feat(astro): add robust defaults and virtual script support for Astro 5+ feat(core): standardize internal dependencies to workspace:* for better monorepo development docs: add Tailwind CSS v4 compatibility notes and workarounds to README
Patch Changes
Section titled “Patch Changes”-
#36
85d6a5eThanks @santi020k! - refactor(optionals): replace eslint-plugin-tailwindcss with eslint-plugin-better-tailwindcss for better Tailwind v4 support -
Updated dependencies [
85d6a5e,85d6a5e]:- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
Minor Changes
Section titled “Minor Changes”- #34
f015876Thanks @santi020k! - feat: add eslint-plugin-sonarjs as optional config chore: remove tailwindcss from playground and test package dependencies docs: update AI Agent skills in README
Patch Changes
Section titled “Patch Changes”- Updated dependencies [
f015876]:- @santi020k/[email protected]
- @santi020k/[email protected]
Minor Changes
Section titled “Minor Changes”- #28
162afdbThanks @santi020k! - feat: addregexpoptional config witheslint-plugin-regexp- New
OptionalOption.Regexpto enable regex linting viaeslint-plugin-regexp - Catches common regex mistakes: exponential backtracking, unnecessary escapes, and optimizable character classes
- Uses recommended rules with selective overrides for smoother adoption
- New
Patch Changes
Section titled “Patch Changes”-
#27
577abbeThanks @santi020k! - ci: disable Husky git hooks during the release workflow- Added
HUSKY=0environment variable to the release workflow to prevent Git hooks from interfering with the automated release process
- Added
-
#25
1fb4693Thanks @santi020k! - feat: add GitHub-linked changelogs and automatic GitHub releases with tags- Switched changelog generator to
@changesets/changelog-githubfor richer changelogs with PR links, commit references, and contributor credits - Configured release workflow to create GitHub releases with git tags on publish
- Switched changelog generator to
-
Updated dependencies [
162afdb,1fb4693]:- @santi020k/[email protected]
- @santi020k/[email protected]
Minor Changes
Section titled “Minor Changes”- feat: add Nest.js, Vue, and Expo ESLint configs with optionals package
- Added
@santi020k/eslint-config-nestwith NestJS-specific linting rules - Added
@santi020k/eslint-config-vuewith Vue 3 linting rules - Added
@santi020k/eslint-config-expowith Expo/React Native linting rules - Added
@santi020k/eslint-config-optionalsfor optional integrations (Tailwind, Vitest, cspell, i18next, MDX, Markdown, Stencil) - Added
ConfigOption.Nest,ConfigOption.Vue, andConfigOption.Expoenum values - Updated PR template with changeset reminder
- Added
Patch Changes
Section titled “Patch Changes”- Updated dependencies
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
Minor Changes
Section titled “Minor Changes”- publish testing
Patch Changes
Section titled “Patch Changes”- Updated dependencies
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
- @santi020k/[email protected]
Did this page help?
One click helps us spot documentation that needs another pass. No personal data is sent.