NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #949 most downloaded on npm
Core utilities to support eslint-plugin-import and other module-related plugins.
Last release 3 months ago
03 Jul 2026
Release timing varies
gaps range from 8 days to 11 months
Most releases are documented
notes for 30 of 34 stable releases
Nothing withdrawn
no release was ever pulled
11 years old
35 releases · first in 2016
[no-useless-path-segments]: add commonJS (CJS) support ([#1128], thanks [@1pete])
no-useless-path-segments]: add commonJS (CJS) support ([#1128], thanks [@1pete])namespace]: add JSX check ([#1151], thanks [@jf248])no-cycle]: ignore Flow imports ([#1126], thanks [@gajus])no-relative-parent-imports]: resolve paths ([#1135], thanks [@chrislloyd])order]: fix autofixer when using typescript-eslint-parser ([#1137], thanks [@justinanastos])contextCompat getCWD() (thanks [@ljharb])declaredScope: route through the getScope compat shim instead of the removed context.getScope() (ESLint 9+) (thanks [@ljharb])One column per quarter.
Add ESLint 5 support ([#1122], thanks [@ai] and [@ljharb])
no-relative-parent-imports] rule: disallow relative imports from parent directories ([#1093], thanks [@chrislloyd])namespace rule: ensure it works in eslint 5/ecmaVersion 2018 (thanks [@ljharb])unambiguous: detect modules exported from minified code ([#3124], thanks [@michaelfaith])
unambiguous: detect modules exported from minified code ([#3124], thanks [@michaelfaith])parse: avoid using a regex here (thanks [@ljharb])Ignore type imports for [named] rule ([#931], thanks [@mattijsbliek])
named] rule ([#931], thanks [@mattijsbliek])no-useless-path-segments] rule ([#1068], thanks [@manovotny])packageDir option for [no-extraneous-dependencies] can be array-valued ([#1085], thanks [@hulkish])hash: add support for hashing functions ([#3072], thanks [@michaelfaith])parse: remove unneeded extra backticks ([#3057], thanks [@G-Rath])
parse: remove unneeded extra backticks ([#3057], thanks [@G-Rath])parse: espree parser isn't working with flat config ([#3061], thanks [@michaelfaith])parse: add ecmaVersion and sourceType to parserOptions ([#3061], thanks [@michaelfaith])Fixer for [first] ([#1046], thanks [@fengkfengk])
first] ([#1046], thanks [@fengkfengk])allow-require option for [no-commonjs] rule ([#880], thanks [@futpib])declaredScope: take a node for modern eslint versions (thanks [@michaelfaith])Autofixer for [order] rule ([#908], thanks [@tihonove])
order] rule ([#908], thanks [@tihonove])no-cycle] rule: reports import cycles.Add [group-exports] rule: style-guide rule to report use of multiple named exports ([#721], thanks [@robertrossmann])
group-exports] rule: style-guide rule to report use of multiple named exports ([#721], thanks [@robertrossmann])no-self-import] rule: forbids a module from importing itself. ([#727], [#449], [#447], thanks [@giodamelio]).no-default-export] rule ([#889], thanks [@isiahmeadows])no-useless-path-segments] rule ([#912], thanks [@graingert] and [@danny-andrews])parse: also delete parserOptions.projectService ([#3039], thanks [@Mysak0CZ])
parse: also delete parserOptions.projectService ([#3039], thanks [@Mysak0CZ])exports, mainrepository.directory fieldparse: also delete parserOptions.EXPERIMENTAL_useProjectService ([#2963], thanks [@JoshuaKGoldberg])
parse: also delete parserOptions.EXPERIMENTAL_useProjectService ([#2963], thanks [@JoshuaKGoldberg])[exports-last] rule ([#620] + [#632], thanks [@k15a])
exports-last] rule ([#620] + [#632], thanks [@k15a])parse: support flat config ([#2714], thanks [@DMartens])fullResolve for large projects ([#2755], thanks [@leipert])[Fix] Ignore hashbang and BOM while parsing ([#2431], thanks [@silverwind])
parse: restore compatibility by making the return value ast again ([#2350], thanks [@ljharb])
parse: restore compatibility by making the return value ast again ([#2350], thanks [@ljharb])[patch] Fix @babel/eslint-parser 8 compatibility ([#2343], thanks [@nicolo-ribaudo])
@babel/eslint-parser 8 compatibility ([#2343], thanks [@nicolo-ribaudo])pkgDir implementation; remove pkg-dirfixed SyntaxError in node <= 6: Unexpected token ) in parse.js ([#2261], thanks [@VitusFW])
[no-absolute-path] picks up speed boost, optional AMD support ([#843], thanks [@jseminck])
no-absolute-path] picks up speed boost, optional AMD support ([#843], thanks [@jseminck])fileExistsWithCaseSync: add strict argument ([#1262], thanks [@sergei-startsev])visit, to support dynamic imports ([#1660], [#2212], thanks [@maxkomarychev], [@aladdin-add], [@Hypnosphi])pkg-up and read-pkg-up ([#2047], [@mgwalker])Use context.getPhysicalFilename() when available (ESLint 7.28+) ([#2160], thanks [@pmcelhaney])
context.getPhysicalFilename() when available (ESLint 7.28+) ([#2160], thanks [@pmcelhaney])update bundled node resolver dependency to latest version
no-unresolved: check import() ([#2026], thanks [@aladdin-add])debugArray.isArray instead of instanceof Arrayupdate tests / peerDeps for ESLint 4.0 compatibility ([#871], thanks [@mastilver])
memo-parser] updated to require filePath on parser options as it melts
down if it's not there, now that this plugin always provides it. (see [#863])Makes the loader resolution more tolerant ([#1606], thanks [@arcanis])
createRequire instead of createRequireFromPath if available ([#1602], thanks [@iamnapo])Uses createRequireFromPath to resolve loaders ([#1591], thanks [@arcanis])
Re-releasing v[2.4.0] after discovering that the memory leak is isolated to the [memo-parser], which is more or less experimental anyway.
Re-releasing v[2.4.0] after discovering that the memory leak is isolated to the [memo-parser],
which is more or less experimental anyway.
parseForESLint from custom parser ([#1435], thanks [@JounQin])Improve parse perf when using @typescript-eslint/parser ([#1409], thanks [@bradzacher])
@typescript-eslint/parser ([#1409], thanks [@bradzacher])Yanked due to critical issue in eslint-module-utils with cache key resulting from [#839].
Yanked due to critical issue in eslint-module-utils with cache key resulting from [#839].
filePath into parserOptions passed to parser ([#839], thanks [@sompylasar])allow option to [no-unassigned-import] to allow for files that match the globs ([#671], [#737], thanks [@kevin940726]).no-cycle], [no-relative-parent-import], [no-unresolved], [no-useless-path-segments]) ([#1218], [#1166], [#1035], thanks [@vikr01])[no-anonymous-default-export] rule: report anonymous default exports ([#712], thanks [@duncanbeevers]).
no-anonymous-default-export] rule: report anonymous default exports ([#712], thanks [@duncanbeevers]).order]'s newlines-between option to allow newlines inside import groups ([#627], [#628], thanks [@giodamelio])count option to the [newline-after-import] rule to allow configuration of number of newlines expected ([#742], thanks [@ntdb])no-extraneous-dependencies]: use read-pkg-up to simplify finding + loading package.json ([#680], thanks [@wtgtybhertgeghgtwtg])no-extraneous-dependencies] ([#685], thanks [@ramasilveyra])no-mutable-exports]. ([#660], thanks [@NullDivision])process.hrtime() for cache dates ([#1160], thanks [@hulkish])Corrected a few gaffs in the auto-ignore logic to fix major performance issues with projects that did not explicitly ignore node_modules. ([#654])
node_modules. ([#654])import/ignore setting] was only being respected if the ignored module didn't start with
an import or export JS statementprefer-default-export]: fixed crash on export extensions ([#653], thanks [@adascal])parse: attach node locations by default.moduleVisitor: visitor now gets the full import statement node as a second
argument, so rules may report against the full statement / require call instead
of only the string literal node.Re-releasing v2.1.0 after vetting (again) and unable to reproduce issue.
Re-releasing v2.1.0 after vetting (again) and unable to reproduce issue.
[unambiguous] rule: report modules that are not unambiguously ES modules.
unambiguous] rule: report modules that are not unambiguously ES modules.recommended shared config. Roughly errors and warnings mixed together,
with some parserOptions in the mix. ([#402])react shared config: added jsx: true to parserOptions.ecmaFeatures.no-webpack-loader-syntax] rule: forbid custom Webpack loader syntax in imports. ([#586], thanks [@fson]!)newlines-between: "ignore" to [order] ([#519], thanks [@sompylasar])no-unassigned-import] rule ([#529], thanks [@jfmengels])import/extensions setting] defaults to ['.js']. ([#306], thanks [@benmosher])import/ignore setting] defaults to nothing, and ambiguous modules are ignored natively. This means importing from CommonJS modules will no longer be reported by [default], [named], or [namespace], regardless of import/ignore. ([#270], thanks [@benmosher])newline-after-import]: Removed need for an empty line after an inline require call ([#570], thanks [@sindresorhus])order]: Default value for newlines-between option is now ignore ([#519], thanks [@sompylasar])imports-first is renamed to [first]. imports-first alias will continue to
exist, but may be removed in a future major release.no-unresolved].
Other rules will ignore case-mismatches on paths on case-insensitive filesystems. ([#311])no-internal-modules]: support @-scoped packages ([#577]+[#578], thanks [@spalger])unambiguous no longer exposes fast test regexunambiguous.test() regex is now properly in multiline modeimport/no-deprecated: WIP rule to let you know at lint time if you're using deprecated functions, constants, classes, or modules.
import/namespace: support deep namespaces #119 via #157import/no-deprecated: WIP rule to let you know at lint time if you're using deprecated functions, constants, classes, or modules.From the beta 1.0 release notes:
Update, verified to work with ESLint 2.0.
"Breaking" changes from 0.13.0:
no longer needs/refers to import/parser or import/parse-options. instead, ESLint provided the configured parser + options to the rules, and they use that to parse dependencies.
Shouldn't hurt to leave it there, and I suspect 99.999% of installs have import/parser === parser.
This also means the plugin uses espree instead of babylon if no parser is configured. Wouldn't expect this to hurt in general, but it is a potentially breaking difference.
eslint-config-import is no longer supported. Instead, use the shared configs directly exported by the plugin. See the README for details.
Nothing groundbreaking, but import/parser has been a thorny issue for the whole life of the plugin, and I'm glad to finally be rid of it. :sweat_smile:
no-deprecated]: WIP rule to let you know at lint time if you're using deprecated functions, constants, classes, or modules.namespace]: support deep namespaces ([#119] via [#157], thanks [@benmosher])Update, verified to work with ESLint 2.0.
Update, verified to work with ESLint 2.0.
"Breaking" changes from 0.13.0:
no longer needs/refers to import/parser or import/parse-options. instead, ESLint provided the configured parser + options to the rules, and they use that to parse dependencies.
Shouldn't hurt to leave it there, and I suspect 99.999% of installs have import/parser === parser.
This also means the plugin uses espree instead of babylon if no parser is configured. Wouldn't expect this to hurt in general, but it is a potentially breaking difference.
eslint-config-import is no longer supported. Instead, use the shared configs directly exported by the plugin. See the README for details.
Nothing groundbreaking, but import/parser has been a thorny issue for the whole life of the plugin, and I'm glad to finally be rid of it. :sweat_smile:
import/parser or import/parse-options. Instead, ESLint provides the configured parser + options to the rules, and they use that to parse dependencies.babylon as default import parser (see Breaking)Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
1st rule: you do not import relative files that don't exist.
1st rule: you do not import relative files that don't exist.
Your coding agent can read these notes before it upgrades. Set up the MCP server →