# What changed in parcel

> 53 changes in parcel 1 to 2 from its official release notes, upgrade guides and advisories: 15 breaking, 1 security, 11 new APIs and options. Each one cited. Sources checked 2026-11-15. HTML: https://unstale.sh/npm/parcel/

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

## parcel 2

### Security

- Bumps the package to fix a vulnerability. (2.16.2) — [release notes](https://github.com/parcel-bundler/parcel/releases/tag/v2.16.2)

### New APIs and options

- Adds a dev server option to disable CORS headers. (2.16.4) — [release notes](https://github.com/parcel-bundler/parcel/releases/tag/v2.16.4)
- Compiled bundle contents can be embedded inside another bundle, such as an image embedded as a data URL. (2.0.0) — [upgrade guide](https://parceljs.org/blog/v2/)
- A new plugin type can compress or encode output bundles at the end of the build; multiple compressors can produce versions simultaneously without affecting the final content hash. (2.0.0) — [upgrade guide](https://parceljs.org/blog/v2/)
- Run Parcel with this CLI option to see detailed scope hoisting bailout information and the causes of tree shaking failures. (2.0.0) — [upgrade guide](https://parceljs.org/blog/v2/)
- Prefix URL dependencies with `npm:` to resolve them like JavaScript imports from node_modules rather than as relative URLs. (2.0.0) — [upgrade guide](https://parceljs.org/blog/v2/)
- Add this compressor to `.parcelrc` to emit `.br` files alongside original bundles. (2.0.0) — [upgrade guide](https://parceljs.org/blog/v2/)
- Add this compressor to `.parcelrc` to emit `.gz` files alongside original bundles. (2.0.0) — [upgrade guide](https://parceljs.org/blog/v2/)
- Import the package to access a manifest of generated URLs and a version hash for pre-caching service worker assets. (2.0.0) — [upgrade guide](https://parceljs.org/blog/v2/)
- The XML transformer processes URL references in RSS and Atom feeds and runs embedded HTML through Parcel's HTML pipeline. (2.0.0) — [upgrade guide](https://parceljs.org/blog/v2/)
- A fully extensible plugin system adds well-defined APIs for transformation, bundling, optimizing, and compressing output. (2.0.0) — [upgrade guide](https://parceljs.org/blog/v2/)

### Performance

- CSS is preloaded as soon as the RSC payload loads, without waiting for it to mount, enabling pre-fetching. (2.16.2) — [release notes](https://github.com/parcel-bundler/parcel/releases/tag/v2.16.2)
- Improves performance of React Server Components builds. (2.16.1) — [release notes](https://github.com/parcel-bundler/parcel/releases/tag/v2.16.1)
- A C++ file watcher uses low-level operating system APIs for fast, granular cache invalidations, including across Parcel restarts. (2.0.0) — [upgrade guide](https://parceljs.org/blog/v2/)
- A new JavaScript compiler written in Rust contributes to Parcel's performance improvements. (2.0.0) — [upgrade guide](https://parceljs.org/blog/v2/)
- In development, Parcel builds only files requested by the browser, improving dev server cold startup times. (2.0.0) — [upgrade guide](https://parceljs.org/blog/v2/)
- Parcel's new Rust source maps library makes source maps faster and more accurate. (2.0.0) — [upgrade guide](https://parceljs.org/blog/v2/)

### Behavior and default changes

- The cache is more reliable and portable across machines, and automatically tracks configs, plugins, and development dependencies without configuration. (2.0.0) — [upgrade guide](https://parceljs.org/blog/v2/)
- Lossless JPEG and PNG optimization is enabled by default in production; Parcel also supports resizing and conversion to modern image formats. (2.0.0) — [upgrade guide](https://parceljs.org/blog/v2/)
- Parcel uses SWC to transpile JavaScript by default, while still picking up an existing Babel config. (2.0.0) — [upgrade guide](https://parceljs.org/blog/v2/)
- Tree shaking is enabled by default, with support for ES modules, CommonJS, dynamic imports, and CSS modules. (2.0.0) — [upgrade guide](https://parceljs.org/blog/v2/)

### Tooling

- Parcel automatically splits code and deduplicates common modules into shared bundles that can be loaded and cached in parallel. (2.0.0) — [upgrade guide](https://parceljs.org/blog/v2/)
- Diagnostics include syntax-highlighted code frames, hints, and links to documentation. (2.0.0) — [upgrade guide](https://parceljs.org/blog/v2/)
- Parcel automatically ships modern JavaScript syntax to browsers supporting native ES modules and falls back for older browsers. (2.0.0) — [upgrade guide](https://parceljs.org/blog/v2/)
- Parcel supports building libraries with ES module, CommonJS, and TypeScript definition output. (2.0.0) — [upgrade guide](https://parceljs.org/blog/v2/)
- Improved hot reloading includes support for React Fast Refresh. (2.0.0) — [upgrade guide](https://parceljs.org/blog/v2/)
- Parcel includes an optimizer based on SVGO to minify SVGs and reduce their sizes. (2.0.0) — [upgrade guide](https://parceljs.org/blog/v2/)
- Parcel processes SVG external dependencies, scripts, styles, inline elements, and presentation attributes through the relevant pipelines, and supports SVG-to-JSX conversion. (2.0.0) — [upgrade guide](https://parceljs.org/blog/v2/)
- Worker support includes native ES module workers, worklets, and service worker manifests. (2.0.0) — [upgrade guide](https://parceljs.org/blog/v2/)

### Fixes and other changes

- Fixes HTML minification incorrectly removing siblings after an <svg> element. (2.16.2) — [release notes](https://github.com/parcel-bundler/parcel/releases/tag/v2.16.2)
- Fixes a cache key clash in the React static packager. (2.16.2) — [release notes](https://github.com/parcel-bundler/parcel/releases/tag/v2.16.2)
- Fixes using inline string transformers with the React static packager. (2.16.2) — [release notes](https://github.com/parcel-bundler/parcel/releases/tag/v2.16.2)
- Fixes macro location information. (2.16.1) — [release notes](https://github.com/parcel-bundler/parcel/releases/tag/v2.16.1)

## parcel 1

### Breaking changes

- Babel configuration overrides Parcel's default rather than merging with it; projects with custom Babel plugins other than Flow need to add @babel/preset-flow. (1.0.0) — [upgrade guide](https://parceljs.org/migration/parcel-1)
- Parcel no longer transpiles JavaScript by default; set browserslist in package.json to define supported browser targets and enable transpilation. (1.0.0) — [upgrade guide](https://parceljs.org/migration/parcel-1)
- The --out-dir CLI option is renamed to --dist-dir, matching the distDir package.json option. (1.0.0) — [upgrade guide](https://parceljs.org/migration/parcel-1)
- The option is removed without a replacement. (1.0.0) — [upgrade guide](https://parceljs.org/migration/parcel-1)
- Configure bundling packages from node_modules for Node.js targets in target configuration using includeNodeModules, instead of the --bundle-node-modules CLI option. (1.0.0) — [upgrade guide](https://parceljs.org/migration/parcel-1)
- Log levels now use names instead of numbers: none, error, warn, info, and verbose. (1.0.0) — [upgrade guide](https://parceljs.org/migration/parcel-1)
- The --no-minify option is renamed to --no-optimize. (1.0.0) — [upgrade guide](https://parceljs.org/migration/parcel-1)
- The CLI option is removed; specify the output path in package.json instead. (1.0.0) — [upgrade guide](https://parceljs.org/migration/parcel-1)
- The npm package name changes from parcel-bundler to parcel; update the dependency in package.json. (1.0.0) — [upgrade guide](https://parceljs.org/migration/parcel-1)
- Use the @parcel/core package rather than parcel-bundler for programmatic use; the API has changed significantly. (1.0.0) — [upgrade guide](https://parceljs.org/migration/parcel-1)
- Parcel 2 uses SWC instead of tsc for TypeScript transpilation; projects needing compiler options beyond supported options can configure @parcel/transformer-typescript-tsc. (1.0.0) — [upgrade guide](https://parceljs.org/migration/parcel-1)
- Parcel 2 plugins are configured in .parcelrc rather than being enabled automatically by listing them in package.json dependencies; Parcel 1 plugins are incompatible. (1.0.0) — [upgrade guide](https://parceljs.org/migration/parcel-1)
- Classic script tags no longer support imports or exports; use type="module" for modules. Module scripts are deferred, and Parcel generates a nomodule version for older browsers based on browserslist. (1.0.0) — [upgrade guide](https://parceljs.org/migration/parcel-1)
- The CLI option no longer configures the compilation environment; configure targets in package.json, for example with an engines.node or engines.electron field. (1.0.0) — [upgrade guide](https://parceljs.org/migration/parcel-1)
- Listen for build events through watch's callback, checking buildEvent.type for buildSuccess or buildFailure. (1.0.0) — [upgrade guide](https://parceljs.org/migration/parcel-1)

### New APIs and options

- Scope hoisting is enabled by default; use --no-scope-hoist to disable it. (1.0.0) — [upgrade guide](https://parceljs.org/migration/parcel-1)

### Behavior and default changes

- When Parcel sees main, it infers the project is a library and uses that value as the output path; remove it for most web apps or set targets.main to false to ignore it. (1.0.0) — [upgrade guide](https://parceljs.org/migration/parcel-1)
- Parcel's default cache location changes from .cache to .parcel-cache, so update .gitignore or similar. (1.0.0) — [upgrade guide](https://parceljs.org/migration/parcel-1)

### Tooling

- Parcel supports preset-env, preset-typescript, and preset-react features automatically; projects using only these presets can remove their Babel config and use Parcel's faster default transpiler. (1.0.0) — [upgrade guide](https://parceljs.org/migration/parcel-1)
- For non-code asset types without default support, use the URL constructor or a url: import specifier to reference the asset URL. (1.0.0) — [upgrade guide](https://parceljs.org/migration/parcel-1)
