# What changed in enhanced-resolve

> 19 changes in enhanced-resolve 5 from its official release notes, upgrade guides and advisories: 1 breaking, 1 security, 1 new APIs and options. Each one cited. Sources checked 2026-10-19. HTML: https://unstale.sh/npm/enhanced-resolve/

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

## enhanced-resolve 5

### Breaking changes

- Stack entries now declare name as string | undefined rather than as an optional property. (5.26.0) — [release notes](https://github.com/webpack/enhanced-resolve/releases/tag/v5.26.0)

### Security

- Fixes a bypass where an in-root symlink points outside the root, allowing it to evade restrictions. (5.22.1) — [release notes](https://github.com/webpack/enhanced-resolve/releases/tag/v5.22.1)

### New APIs and options

- Exposes the resolved package as packageId and accepts it as context.packageId, allowing unambiguous resolution when package entries share a URL. (5.26.0) — [release notes](https://github.com/webpack/enhanced-resolve/releases/tag/v5.26.0)

### Performance

- Reduces hot-path allocations in the resolve pipeline. (5.24.1) — [release notes](https://github.com/webpack/enhanced-resolve/releases/tag/v5.24.1)

### Behavior and default changes

- Options and the context path now accept file: URL strings wherever a path is accepted. (5.25.0) — [release notes](https://github.com/webpack/enhanced-resolve/releases/tag/v5.25.0)
- The resolver works in browsers, Deno, and Bun as well as Node; browser use requires supplying your own fileSystem. (5.24.0) — [release notes](https://github.com/webpack/enhanced-resolve/releases/tag/v5.24.0)
- The context path and request arguments of resolve, resolveSync, and resolvePromise accept file: URL instances, which are converted to filesystem paths; plain strings remain literal paths. (5.24.0) — [release notes](https://github.com/webpack/enhanced-resolve/releases/tag/v5.24.0)
- Path-like resolve options roots, modules, alias/fallback targets, restrictions, and tsconfig settings now accept file URL instances and convert them to filesystem paths; plain strings remain literal paths. (5.23.0) — [release notes](https://github.com/webpack/enhanced-resolve/releases/tag/v5.23.0)

### Fixes and other changes

- Failed resolution now diagnoses exports or imports fields that place subpaths inside conditions, naming offending keys and showing the supported arrangement; field-processing errors also name their package.json. (5.26.0) — [release notes](https://github.com/webpack/enhanced-resolve/releases/tag/v5.26.0)
- The object form of Plugin no longer types apply with this: Resolver, matching its runtime call where this is the plugin. (5.26.0) — [release notes](https://github.com/webpack/enhanced-resolve/releases/tag/v5.26.0)
- Reads a file: URL the way Node does when parsing a request. (5.25.1) — [release notes](https://github.com/webpack/enhanced-resolve/releases/tag/v5.25.1)
- Discovery now soft-fails when it loads a broken tsconfig, rather than failing outright. (5.24.5) — [release notes](https://github.com/webpack/enhanced-resolve/releases/tag/v5.24.5)
- Relative paths in tsconfig extends remain relative. (5.24.5) — [release notes](https://github.com/webpack/enhanced-resolve/releases/tag/v5.24.5)
- Keeps the original request resolvable when extensionAlias lists its own extension. (5.24.4) — [release notes](https://github.com/webpack/enhanced-resolve/releases/tag/v5.24.4)
- Fixes string restriction boundary checks and normalizes comparisons, including Windows path matching; the same comparison backs tsconfig path matching. (5.24.4) — [release notes](https://github.com/webpack/enhanced-resolve/releases/tag/v5.24.4)
- Treats UNC paths as Windows paths, applying path.win32 semantics for normalization, joining, and walking up instead of treating them as bare module requests. (5.24.4) — [release notes](https://github.com/webpack/enhanced-resolve/releases/tag/v5.24.4)
- Resolves tsconfig extends package specifiers from ancestor node_modules directories, supporting workspace hoisting. (5.24.3) — [release notes](https://github.com/webpack/enhanced-resolve/releases/tag/v5.24.3)
- Callbacks from one synchronous burst are batched into a single tick. (5.24.2) — [release notes](https://github.com/webpack/enhanced-resolve/releases/tag/v5.24.2)
- When a package exports target is filtered out by restrictions, resolution falls back to the next modules entry instead of throwing. (5.22.2) — [release notes](https://github.com/webpack/enhanced-resolve/releases/tag/v5.22.2)
