# What changed in eslint-plugin-n

> 30 changes in eslint-plugin-n 17 to 18 from its official release notes, upgrade guides and advisories: 5 breaking, 6 new APIs and options. Each one cited. Sources checked 2026-10-17. HTML: https://unstale.sh/npm/eslint-plugin-n/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## eslint-plugin-n 18

### Breaking changes

- The TypeScript peer dependency version constraint was updated, affecting which TypeScript versions are compatible. (18.0.1) — [release notes](https://github.com/eslint-community/eslint-plugin-n/releases/tag/v18.0.1)
- The plugin migrated from CommonJS to ESM, changing how projects load it. (18.0.0) — [release notes](https://github.com/eslint-community/eslint-plugin-n/releases/tag/v18.0.0)
- The rule now disallows extra properties in its options. (18.0.0) — [release notes](https://github.com/eslint-community/eslint-plugin-n/releases/tag/v18.0.0)
- The plugin now requires Node.js >=20 and ESLint >= 8.57.1. (18.0.0) — [release notes](https://github.com/eslint-community/eslint-plugin-n/releases/tag/v18.0.0)
- The no-sync rule's ts-declaration-location dependency moved to peerDependencies. (18.0.0) — [release notes](https://github.com/eslint-community/eslint-plugin-n/releases/tag/v18.0.0)

### New APIs and options

- Implements the prefer-import/assert-strict rule. (18.3.0) — [release notes](https://github.com/eslint-community/eslint-plugin-n/releases/tag/v18.3.0)
- Adds the prefer-process-get-builtin-module rule. (18.3.0) — [release notes](https://github.com/eslint-community/eslint-plugin-n/releases/tag/v18.3.0)
- Adds module.exports support for require(esm) interop. (18.2.0) — [release notes](https://github.com/eslint-community/eslint-plugin-n/releases/tag/v18.2.0)
- Support was added for devEngines.runtime in package.json. (18.1.0) — [release notes](https://github.com/eslint-community/eslint-plugin-n/releases/tag/v18.1.0)

### Behavior and default changes

- The no-extraneous rules now support pnpm workspaces. (18.4.0) — [release notes](https://github.com/eslint-community/eslint-plugin-n/releases/tag/v18.4.0)
- Classifies util.styleText as experimental. (18.3.0) — [release notes](https://github.com/eslint-community/eslint-plugin-n/releases/tag/v18.3.0)
- The rule allows dependencies declared at the workspace root. (18.1.0) — [release notes](https://github.com/eslint-community/eslint-plugin-n/releases/tag/v18.1.0)
- The rule was removed from the recommended configuration. (18.0.0) — [release notes](https://github.com/eslint-community/eslint-plugin-n/releases/tag/v18.0.0)

### Fixes and other changes

- The rule now properly handles extension override mappings. (18.4.1) — [release notes](https://github.com/eslint-community/eslint-plugin-n/releases/tag/v18.4.1)
- The rule now covers fs.watch. (18.4.1) — [release notes](https://github.com/eslint-community/eslint-plugin-n/releases/tag/v18.4.1)
- Handles import.meta paths in no-path-concat. (18.3.0) — [release notes](https://github.com/eslint-community/eslint-plugin-n/releases/tag/v18.3.0)
- Supports brace expansion and extglobs in package files. (18.3.0) — [release notes](https://github.com/eslint-community/eslint-plugin-n/releases/tag/v18.3.0)
- Reports object, array, and template literals. (18.2.2) — [release notes](https://github.com/eslint-community/eslint-plugin-n/releases/tag/v18.2.2)
- HTTP imports are ignored by no-missing-import. (18.2.2) — [release notes](https://github.com/eslint-community/eslint-plugin-n/releases/tag/v18.2.2)
- Ensures the package's types have valid syntax. (18.2.1) — [release notes](https://github.com/eslint-community/eslint-plugin-n/releases/tag/v18.2.1)
- The rule now handles type-only @types dependencies. (18.1.0) — [release notes](https://github.com/eslint-community/eslint-plugin-n/releases/tag/v18.1.0)
- Leading forward slashes are now allowed in the files field. (18.1.0) — [release notes](https://github.com/eslint-community/eslint-plugin-n/releases/tag/v18.1.0)
- The rule's support data now covers Node.js 22.20–22.21 and 24.0–24.12. (18.0.0) — [release notes](https://github.com/eslint-community/eslint-plugin-n/releases/tag/v18.0.0)
- The rule now recognizes the fs.promises APIs cp, glob, lutimes, opendir, rm, and statfs. (18.0.0) — [release notes](https://github.com/eslint-community/eslint-plugin-n/releases/tag/v18.1.0), [release notes](https://github.com/eslint-community/eslint-plugin-n/releases/tag/v18.0.0)
- An explicit mapping was added for TypeScript extensions. (18.0.0) — [release notes](https://github.com/eslint-community/eslint-plugin-n/releases/tag/v18.0.0)

## eslint-plugin-n 17

### New APIs and options

- Adds the prefer-global/crypto rule. (17.24.0) — [release notes](https://github.com/eslint-community/eslint-plugin-n/releases/tag/v17.24.0)
- Adds the prefer-global/timers rule. (17.24.0) — [release notes](https://github.com/eslint-community/eslint-plugin-n/releases/tag/v17.24.0)

### Fixes and other changes

- Handles directory index imports when checking file extensions in imports. (17.23.2) — [release notes](https://github.com/eslint-community/eslint-plugin-n/releases/tag/v17.23.2)
- Handles files with dots in their basenames when checking file extensions in imports. (17.23.2) — [release notes](https://github.com/eslint-community/eslint-plugin-n/releases/tag/v17.23.2)
- Resolves full typed names for ignore patterns. (17.23.2) — [release notes](https://github.com/eslint-community/eslint-plugin-n/releases/tag/v17.23.2)
