Skip to main content
interlace
Plugin: import-next

Changelog

Release history and version updates for eslint-plugin-import-next

Generated from the release history

Built from this package's CHANGELOG.md at deploy time, so it matches the version these docs describe. The full cross-package history lives on the changelog.

2.8.7

  • Fixno-internal-modules rewrote relative deep imports to the importing file's own directory
  • Dependenciesupdated workspace dependencies: @interlace/eslint-devkit@1.19.6

2.8.6

  • Fixthe extensions fixer no longer renames the module it is rewriting
  • Fixno-internal-modules suggests a path that is actually on the import's path

2.8.5

  • Fixno-nodejs-modules — resolve builtins via builtinModules, and recognise subpaths.

2.8.4

  • Fixtwo documented-contract violations found by the burgee FP/FN sweep
  • Fixthree false positives found by sweeping the plugins over a real corpus

2.8.3

  • Fixno-barrel-file was blind to a barrel spelled as imports plus an export clause
  • Fixno-extraneous-dependencies published three config options it did not honour
  • Dependenciesupdated workspace dependencies: @interlace/eslint-devkit@1.19.5

2.8.2

  • Fixextensions now checks the specifier of a dynamic import(). The rule visited ImportDeclaration, ExportNamedDeclaration and ExportAllDeclaration but not ImportExpression, so the identical specifier string was reported on a static import and silent on an await import(...) in the same file — leaving the file less consistent after --fix than before it, the exact defect the export-from forms were added to remove. A non-literal specifier (template or variable) is still left alone. Surfaces 6 previously-missed findings in the burgee corpus.
  • Fixconsistent-type-specifier-style no longer emits a Fix: instruction that drops type from every specifier but the first. The type marker sat outside the {{name}} interpolation while the data bound a comma-joined list, so an import of more than one name rendered as import { type A, B } — following it demotes every later specifier to a value import, which under verbatimModuleSyntax is emitted verbatim and throws at runtime. The autofix was already correct; only the emitted guidance disagreed with it.

2.8.1

  • Fixextensions checks export … from and export * from
  • Fixno-unused-modules's allowImportOnly exempts only modules that import
  • Fixconsistent-type-specifier-style stops rebuilding away parts of the import

2.8.0

  • Fixno-relative-parent-imports sees a dynamic import('../x')
  • Fixno-extraneous-dependencies no longer reports <scheme>: specifiers as missing packages

2.7.8

  • Fixconsistent-type-specifier-style no longer deletes a default import
  • Fixenforce-import-order's fixer no longer moves @ts-nocheck below an import
  • Fixdefault no longer reports default imports of export = / CJS-interop modules
  • Fixno-internal-modules keeps parent traversal, and no longer crashes on a template-literal require

2.7.7

  • Fixorder / enforce-import-order no longer writes imports over a hashbang

2.7.6

  • Fixno-cross-domain-imports and enforce-dependency-direction no longer crash on a non-string dynamic import

2.7.5

  • Fixnode: builtins are never dependencies

2.7.4

  • FixThe README logo now links to the plugin's own documentation.

2.7.3

  • Fixobj['deprecatedProp'] reads the same deprecated export
  • Dependenciesupdated workspace dependencies: @interlace/eslint-devkit@1.19.2

2.7.2

  • Fiximport gates resolve a subscripted member
  • Dependenciesupdated workspace dependencies: @interlace/eslint-devkit@1.19.0

2.7.1

  • FixAdd an install-size badge to the README prelude, linking to each package's packagephobia page. npm renders the README from the last publish, so a badge only appears on npmjs.com after a release.
  • Dependenciesupdated workspace dependencies: @interlace/eslint-devkit@1.18.2

2.7.0

  • Feature🐛 Fix — a template literal is a string, in 82 rules that disagreed
  • Fixno-mutable-exports resolves bindings instead of grepping the file text
  • Dependenciesupdated workspace dependencies: @interlace/eslint-devkit@1.18.0

2.6.0

  • Fixno-cycle no longer reports a cycle whose edge is erased before emit
  • Dependenciesupdated workspace dependencies: @interlace/eslint-devkit@1.17.3

2.5.1

  • Fixpoint meta.docs.url at documentation that exists #683
  • Dependenciesupdated workspace dependencies: @interlace/eslint-devkit@1.17.2

2.5.0

  • Featureno-cycle no longer reports inside generated files. #686

2.4.0

  • recommended no longer enables order, first or newline-after-import. #634
  • no-cycle cites CWE-1047, and CWE-407 gets its real name back. #611
  • export: a namespace member is not a module export. #622
  • no-extraneous-dependencies: ., .. and #subpath are not packages. #636
  • no-duplicates: a type-only import is not a duplicate of a value import. #620
  • no-self-import: a suffix is not an extension. #618
  • DependenciesUpdated internal dependencies

2.3.19

  • export no longer reports a type and a value that share a name. #593

2.3.18

  • Bound the TypeScript peer range and declare the React peer #499

2.3.17

  • Correct the declared ESLint floor: ^8.0.0^8.40.0. #407
  • Correct the ESLint peer range shown in the README Compatibility table. #423
  • meta.hasSuggestions now matches what each rule actually emits. #309
  • DependenciesUpdated internal dependencies

2.3.16

  • Ship the JavaScript without tsc's layout. #411
  • DependenciesUpdated internal dependencies

2.3.15

  • Load rule modules on demand instead of at plugin load. #381
  • Declare what we support, load only what we use #381
  • Fix the ./oxlint subpath export, which pointed at src/oxlint.js — a file no build produces. require('<package>/oxlint') threw MODULE_NOT_FOUND on every published package, while every README documented that exact wiring for oxlint's jsPlugins. The export now points at the build output, dist/src/oxlint.js. #335
  • DependenciesUpdated internal dependencies

2.3.14

  • Add the ecosystem and oxlint marks to the README logo row. Each plugin now #364

2.3.13

  • Don't require typescript at module load — the plugin threw on a clean install #344

2.3.12

  • Re-publish every package so npm carries the optimised artifact #338
  • DependenciesUpdated internal dependencies

2.3.11

  • Zero runtime dependencies: install 7500 kB → 444 kB, load 242 ms → 13.6 ms #334
  • `no-cycle` no longer crashes on deep import chains. Tarjan's SCC pass recursed once per graph node, so a chain deeper than the JS call stack threw RangeError: Maximum call stack size exceeded — and since the rule defaults to unlimited traversal depth, nothing capped the descent. ESLint exited 2 with no results at all: not a slow lint, no lint. Observed at file 4,974 of a 5,000-node chain on Node 24. #320
  • DependenciesUpdated internal dependencies

2.3.10

  • Correct the unmeasured "up to 100x faster" claim in the 2.0.0 CHANGELOG entry. #301
  • Rewrite description and keywords on every published package for npm search discovery. npm ranks on name, description, and keywords, and the registry only picks up these fields at publish — so this is metadata-only and takes effect for each package on its next release. #294
  • DependenciesUpdated internal dependencies

2.3.9

  • Docsdocs: dual-logo README header (Interlace mark + ESLint mark side by side) and closing Interlace footer — refreshes the README rendered on npmjs.com. No runtime changes. #269
  • DependenciesUpdated internal dependencies

2.3.8

  • Fix Codecov badge showing "unknown" — switch from flag to component URL format #252

2.3.7

  • Fixfix: remove false meta.fixable: 'code' declarations from 21 rules that had no fix() function #141
  • Consolidation cleanup — no rule behavior change: #186
  • DependenciesUpdated internal dependencies
  • no-cycle rewritten to per-import targeted DFS (replaces upfront full-graph BFS+Tarjan SCC). The nonCyclicFiles cache provides O(1) rejection after first visit; only files along the actual DFS path are read. Detection parity with the previous algorithm is preserved.

2.3.3

  • align codecov component IDs with full package names
  • fix changelog header format across all packages
  • Ofri Peretz

2.3.2

  • align codecov component names and update docs components
  • Ofri Peretz

2.0.0

  • Architecture Overhaul: Complete rewrite for performance and maintainability.
  • Rule Parity: Achieved 100% feature parity with eslint-plugin-import (46 rules).
  • Performance: no-cycle rule is now significantly faster using incremental graph analysis. _(Corrected 2026-08-02: this entry originally read "up to 100x faster". That number was never measured and has been withdrawn — see CLAIMS.md. The verified figures are 3.1x faster end-to-end and 8x faster in pure rule time on a 5,736-file React codebase.)_
  • TypeScript Support: First-class support for TypeScript (parsers and resolvers) out of the box.
  • New Rules:
  • Enhanced Documentation: All rules now feature AEO-compliant documentation with OWASP mappings.
  • Improved Testing: Comprehensive test suite covering all rules, including edge cases and TypeScript integration.

1.0.0

  • Initial release with 30 LLM-optimized dependency rules
  • Module Resolution Rules (7 rules):
  • Module System Rules (3 rules):
  • Dependency Boundaries Rules (6 rules):
  • Export Style Rules (6 rules):
  • Import Style Rules (4 rules):
  • Dependency Management Rules (4 rules):
  • Preset configurations: recommended, strict, module-resolution, import-style, esm, architecture
  • Full ESLint 9 flat config support
  • ESLint MCP integration for AI assistants
  • TypeScript type exports for all rule options

View on GitHub →

Building secure JavaScript with Interlace? Star the repo to get new rules and CWE coverage as we ship them — or follow the AI-code-security benchmarks behind them.