# parcel-bundler/parcel — codebase unpack

> Canonical page: https://codevetter.com/unpack/parcel

This is a deterministic Repo Unpack scan of parcel-bundler/parcel — a structural map, not a review, security audit, or maintainer-endorsed description.

- Scanned commit: 59484858a1a0bcbb71f74088956bb437a2db6505 (2026-02-01)
- Last upstream commit: v2.16.4
- Generated by codevetter 1.15.0 on 2026-10-02
- 3999 files scanned · 4.5 MB

Source inspection; upstream code and tests were not executed.

## Languages

- JavaScript: 3018 files
- JSON: 846 files
- HTML: 238 files
- CSS: 191 files
- TypeScript: 151 files
- Rust: 61 files
- Markdown: 41 files
- Sass: 35 files

## Repository structure

- packages/ — 3817 files
- flow-libs/ — 55 files
- crates/ — 49 files
- flow-typed/ — 14 files
- .github/ — 13 files
- docs/ — 11 files
- scripts/ — 10 files
- .husky/ — 2 files

Probable source entrypoint: `Cargo.toml` (inferred from the tree, not upstream docs)

## Source layout — packages/

- packages/bundlers/ — 2 files
- packages/compressors/ — 3 files
- packages/configs/ — 5 files
- packages/core/ — 122 files

## Package

- Cargo.toml: null — 0 declared dependencies

## Structural health signals

Average score 6.1/10 across 96 files; 65 hotspots. These are deterministic review leads, not proof of a bug.

## Recent history

- 59484858a1a0 (2026-02-01) v2.16.4
- 9e2f6f137712 (2026-02-01) Add --no-cors option (#10268)
- 73f691d67d22 (2025-12-06) v2.16.3
- b270626ea4a4 (2025-12-06) Fix react-dom import
- 44a112137f68 (2025-12-06) v2.16.2

## Overview

Parcel is a web build tool for application and library developers, with CLI commands for production builds, watch mode, and a development server. Its JavaScript orchestration layer tracks build requests and invalidations, delegates compiler work to Rust bindings, and composes configurable transformer, bundler, packager, optimizer, and reporter plugins. The inspected implementation also supports persistent build caches, on-demand development bundles, browser HMR, Node application execution, project templates, and a browser-based REPL.

## System map

The primary product runs as a Node CLI or an embedded Parcel instance. JavaScript owns request scheduling, graph state, plugin orchestration, reporting, and filesystem boundaries, while native bindings provide compiler and other Rust functionality. Storage combines an abstract cache API with filesystem snapshots. Distribution includes published JavaScript packages, platform-specific native artifacts, and a separately built browser REPL.
- The CLI entrypoint conditionally loads @parcel/babel-register outside production or during self-build, then requires cli.js; Commander registers serve, watch, build, and help. — [packages/core/parcel/src/bin.js#L1-12](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/parcel/src/bin.js#L1-L12) [packages/core/parcel/src/cli.js#L190-240](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/parcel/src/cli.js#L190-L240)
- @parcel/core publishes lib/index.js from src/index.js; Parcel.run() initializes, builds, shuts down, and converts a buildFailure result into BuildError. — [packages/core/core/package.json#L16-24](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/package.json#L16-L24) [packages/core/core/src/Parcel.js#L166-188](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/Parcel.js#L166-L188)
- Parcel owns resolved options, configuration, RequestTracker, reporters, worker references, and a watch queue limited to one concurrent build. — [packages/core/core/src/Parcel.js#L63-89](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/Parcel.js#L63-L89) [packages/core/core/src/Parcel.js#L146-163](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/Parcel.js#L146-L163)
- AssetGraphRequest resolves entries, targets, dependencies, and transformed asset groups; BundleGraph exposes the resulting internal graph through mutable or public wrappers for different plugin stages. — [packages/core/core/src/requests/AssetGraphRequest.js#L463-545](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/requests/AssetGraphRequest.js#L463-L545) [packages/core/core/src/BundleGraph.js#L110-132](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/BundleGraph.js#L110-L132)
- Workers retrieve shared options and cached configuration before running Transformation, Validation, or PackagerRunner; native compiler bindings call parcel_js_swc_core, with asynchronous native transforms scheduled through Rayon. — [packages/core/core/src/worker.js#L93-159](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/worker.js#L93-L159) [crates/node-bindings/src/transformer.rs#L4-42](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/crates/node-bindings/src/transformer.rs#L4-L42)
- resolveOptions selects LMDBCache for NodeFS output and FSCache for other filesystems unless a cache is supplied; LMDB stores binary values while streams and large blobs use separate files. — [packages/core/core/src/resolveOptions.js#L96-115](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/resolveOptions.js#L96-L115) [packages/core/cache/src/LMDBCache.js#L26-34](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/cache/src/LMDBCache.js#L26-L34) [packages/core/cache/src/LMDBCache.js#L68-111](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/cache/src/LMDBCache.js#L68-L111)
- The monorepo uses packages/*/* workspaces and Yarn 4.9.1; root scripts separate JavaScript builds, native and WASM builds, declaration checks, Mocha tests, Cargo tests, and integration tests. — [package.json#L10-33](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/package.json#L10-L33) [package.json#L80-80](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/package.json#L80-L80) [Cargo.toml#L1-6](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/Cargo.toml#L1-L6) [.yarnrc.yml#L1-3](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/.yarnrc.yml#L1-L3)
- Release workflows build macOS, Windows, GNU/Linux, and musl native artifacts before publishing; canary releases are scheduled daily, tagged releases invoke yarn release, and REPL previews are deployed through CI. — [.github/workflows/release.yml#L29-44](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/.github/workflows/release.yml#L29-L44) [.github/workflows/release.yml#L77-111](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/.github/workflows/release.yml#L77-L111) [.github/workflows/canary-release.yml#L6-21](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/.github/workflows/canary-release.yml#L6-L21) [.github/workflows/ci.yml#L153-184](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/.github/workflows/ci.yml#L153-L184)

## Feature catalog

Parcel exposes production bundling and continuous development through both CLI and programmatic interfaces. The default configuration covers web languages, preprocessing tools, images, structured data, and specialized import pipelines. Development features include HTTP serving, HMR, proxy middleware, and execution of Node entry bundles. Separate utilities provide project scaffolding and an interactive browser build environment.
- serve starts development serving and supports lazy async bundles; watch rebuilds continuously; build exposes optimization, scope-hoisting, content-hash, and output-URL controls. — [packages/core/parcel/src/cli.js#L190-232](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/parcel/src/cli.js#L190-L232) [packages/core/parcel/src/cli.js#L530-575](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/parcel/src/cli.js#L530-L575)
- The default transformer map handles JS/JSX/TypeScript, JSON/JSON5, YAML/TOML, GraphQL/GLSL, Sass/Less/Stylus, CSS, HTML/Pug, Vue, raster images, SVG, XML, and native Node assets; some implementations are installed on demand. — [packages/configs/default/index.json#L19-55](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/configs/default/index.json#L19-L55) [packages/configs/default/package.json#L54-78](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/configs/default/package.json#L54-L78)
- Named pipelines support declaration generation, bundle-text and data-url imports, worklets, static React output, and URL assets; their packagers and optimizers can differ from ordinary file processing. — [packages/configs/default/index.json#L4-11](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/configs/default/index.json#L4-L11) [packages/configs/default/index.json#L55-82](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/configs/default/index.json#L55-L82)
- TargetResolver filters package targets by requested names and rejects unknown targets; the default bundler groups entries by target and exposes shared-bundle size, request-count, and manual-bundle settings. — [packages/core/core/src/requests/TargetRequest.js#L200-245](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/requests/TargetRequest.js#L200-L245) [packages/bundlers/default/src/DefaultBundler.js#L29-74](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/bundlers/default/src/DefaultBundler.js#L29-L74) [packages/bundlers/default/src/DefaultBundler.js#L143-152](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/bundlers/default/src/DefaultBundler.js#L143-L152)
- Development serving includes HTML route fallback, source-file serving, configurable proxy middleware, and HMR updates; NodeRunner starts matching Node entry bundles in worker_threads and restarts them when HMR is disabled. — [packages/reporters/dev-server/src/Server.js#L138-170](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/reporters/dev-server/src/Server.js#L138-L170) [packages/reporters/dev-server/src/Server.js#L403-465](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/reporters/dev-server/src/Server.js#L403-L465) [packages/reporters/dev-server/src/HMRServer.js#L293-315](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/reporters/dev-server/src/HMRServer.js#L293-L315) [packages/reporters/dev-server/src/NodeRunner.js#L35-68](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/reporters/dev-server/src/NodeRunner.js#L35-L68)
- CLI diagnostics render messages, code frames, stacks, hints, and documentation; users can add reporters, enable tracing or profiling, and trigger profiling or heap snapshots through terminal shortcuts. — [packages/core/parcel/src/cli.js#L24-43](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/parcel/src/cli.js#L24-L43) [packages/core/parcel/src/cli.js#L351-358](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/parcel/src/cli.js#L351-L358) [packages/core/parcel/src/cli.js#L515-527](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/parcel/src/cli.js#L515-L527)
- create-parcel copies a named template into an empty or new directory, initializes Git, installs dependencies with the invoking package manager, and creates an initial commit; the React client template supplies an editable App component. — [packages/utils/create-parcel/src/create-parcel.js#L51-120](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/utils/create-parcel/src/create-parcel.js#L51-L120) [packages/utils/create-parcel/templates/react-client/src/App.tsx#L1-10](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/utils/create-parcel/templates/react-client/src/App.tsx#L1-L10)
- The REPL worker exposes bundle, watch, readiness, and service-worker coordination over Comlink; its Parcel instance uses an in-memory filesystem and returns bundle content, timing, optional graphs, and sourcemaps. — [packages/dev/repl/src/parcel/ParcelWorker.js#L97-114](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/dev/repl/src/parcel/ParcelWorker.js#L97-L114) [packages/dev/repl/src/parcel/ParcelWorker.js#L250-283](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/dev/repl/src/parcel/ParcelWorker.js#L250-L283) [packages/dev/repl/src/parcel/ParcelWorker.js#L288-322](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/dev/repl/src/parcel/ParcelWorker.js#L288-L322)

## Data flow

Inputs enter through CLI arguments or InitialParcelOptions and become normalized project paths, target settings, and shared worker options. Entry and dependency requests expand an asset graph whose transformations return both asset data and invalidation metadata. Bundling converts that graph into named outputs, followed by packaging, optimization, hash replacement, and compression. Request state and watcher snapshots preserve reuse across invocations.
- CLI run() defaults empty entries to '.', resolves them to absolute paths, normalizes flags, and constructs Parcel; resolveOptions derives projectRoot from an upward lockfile/VCS search and converts entries to project paths. — [packages/core/parcel/src/cli.js#L277-298](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/parcel/src/cli.js#L277-L298) [packages/core/core/src/resolveOptions.js#L77-94](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/resolveOptions.js#L77-L94) [packages/core/core/src/resolveOptions.js#L193-204](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/resolveOptions.js#L193-L204)
- EntryResolver expands globs recursively and reads package targets for directory entries; AssetGraphRequest then attaches resolved entries, targets, dependency paths, and asset-group results to its graph. — [packages/core/core/src/requests/EntryRequest.js#L160-220](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/requests/EntryRequest.js#L160-L220) [packages/core/core/src/requests/AssetGraphRequest.js#L471-511](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/requests/AssetGraphRequest.js#L471-L511) [packages/core/core/src/requests/AssetGraphRequest.js#L514-545](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/requests/AssetGraphRequest.js#L514-L545)
- AssetRequest passes a configuration cache path, shared options reference, and prior dev-dependency information to runTransform; Transformation loads the asset and pipeline, runs transformations, commits results, and returns assets or diagnostics. — [packages/core/core/src/requests/AssetRequest.js#L93-130](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/requests/AssetRequest.js#L93-L130) [packages/core/core/src/worker.js#L93-106](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/worker.js#L93-L106) [packages/core/core/src/Transformation.js#L136-187](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/Transformation.js#L136-L187) [packages/core/core/src/Transformation.js#L192-210](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/Transformation.js#L192-L210)
- Worker transformation results feed file-update/delete/create, environment, option, startup, and build invalidations into RequestTracker; runRequest reuses valid results and waits for an already-running request before rerunning it. — [packages/core/core/src/requests/AssetRequest.js#L139-161](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/requests/AssetRequest.js#L139-L161) [packages/core/core/src/RequestTracker.js#L1177-1204](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/RequestTracker.js#L1177-L1204)
- After asset traversal, symbol propagation updates graph usage information; BundleGraph.fromAssetGraph removes asset groups and retargets dependencies, and BundlerRunner either updates a previous graph or invokes a fresh bundler pass. — [packages/core/core/src/requests/AssetGraphRequest.js#L279-291](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/requests/AssetGraphRequest.js#L279-L291) [packages/core/core/src/BundleGraph.js#L152-165](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/BundleGraph.js#L152-L165) [packages/core/core/src/requests/BundleGraphRequest.js#L286-336](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/requests/BundleGraphRequest.js#L286-L336)
- PackagerRunner.getBundleResult packages each bundle, optimizes each returned result, and generates its sourcemap; optimizer output type changes affect subsequent filename-based plugin selection. — [packages/core/core/src/PackagerRunner.js#L388-423](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/PackagerRunner.js#L388-L423) [packages/core/core/src/PackagerRunner.js#L545-555](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/PackagerRunner.js#L545-L555) [packages/core/core/src/PackagerRunner.js#L569-597](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/PackagerRunner.js#L569-L597)
- WriteBundlesRequest computes final name hashes and skips placeholder outputs; WriteBundleRequest reads cached content, replaces hash references, invokes compressors, and streams their results to target files with recorded size statistics. — [packages/core/core/src/requests/WriteBundlesRequest.js#L70-94](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/requests/WriteBundlesRequest.js#L70-L94) [packages/core/core/src/requests/WriteBundlesRequest.js#L130-155](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/requests/WriteBundlesRequest.js#L130-L155) [packages/core/core/src/requests/WriteBundleRequest.js#L199-225](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/requests/WriteBundleRequest.js#L199-L225) [packages/core/core/src/requests/WriteBundleRequest.js#L245-288](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/requests/WriteBundleRequest.js#L245-L288)
- Shutdown serializes cacheable request results and the request graph alongside a watcher snapshot; startup deserializes the graph, obtains events since that snapshot, and invalidates startup, build, environment, option, and filesystem changes. — [packages/core/core/src/Parcel.js#L183-188](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/Parcel.js#L183-L188) [packages/core/core/src/RequestTracker.js#L1355-1393](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/RequestTracker.js#L1355-L1393) [packages/core/core/src/RequestTracker.js#L1452-1475](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/RequestTracker.js#L1452-L1475)

## Behavior traces

The source walks establish production startup, asset-to-output processing, watch rebuilds, lazy HTTP requests, and persistence restoration. Each trace names the actual execution order and relevant conditional branches. Builds and serving communicate through reporter events rather than a separate application backend. These are source-derived traces; no runtime behavior was exercised.
- Production startup follows bin.js → cli.runCommand() → run() → normalizeOptions() → new Parcel() → Parcel.run() → _init(); initialization awaits sourcemaps/Rust, resolves options, loads configuration, initializes workers/cache/reporters, then restores RequestTracker. — [packages/core/parcel/src/bin.js#L5-12](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/parcel/src/bin.js#L5-L12) [packages/core/parcel/src/cli.js#L273-298](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/parcel/src/cli.js#L273-L298) [packages/core/parcel/src/cli.js#L396-408](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/parcel/src/cli.js#L396-L408) [packages/core/core/src/Parcel.js#L97-163](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/Parcel.js#L97-L163)
- The build enters _build() → createParcelBuildRequest() → createBundleGraphRequest() → createAssetGraphRequest(); AssetGraphRequest.build() traverses queued requests, then runAssetRequest() dispatches AssetRequest → worker.runTransform() → Transformation.run(). — [packages/core/core/src/Parcel.js#L284-297](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/Parcel.js#L284-L297) [packages/core/core/src/requests/ParcelBuildRequest.js#L62-74](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/requests/ParcelBuildRequest.js#L62-L74) [packages/core/core/src/requests/BundleGraphRequest.js#L100-115](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/requests/BundleGraphRequest.js#L100-L115) [packages/core/core/src/worker.js#L93-106](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/worker.js#L93-L106)
- For a fresh bundle graph, BundlerRunner.bundle() calls loadConfigs(), gets the bundler, converts AssetGraph, calls bundler.bundle(), conditionally calls bundler.optimize() in production, then names bundles and applies runtimes; an eligible previous graph instead receives changed asset updates. — [packages/core/core/src/requests/BundleGraphRequest.js#L261-301](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/requests/BundleGraphRequest.js#L261-L301) [packages/core/core/src/requests/BundleGraphRequest.js#L329-355](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/requests/BundleGraphRequest.js#L329-L355) [packages/core/core/src/requests/BundleGraphRequest.js#L411-433](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/requests/BundleGraphRequest.js#L411-L433)
- Output follows ParcelBuildRequest.run() → WriteBundlesRequest → PackageRequest → PackagerRunner.getBundleResult() → package() → optimize() → WriteBundleRequest; bundles without hash references can begin writing before complex name hashes are assigned. — [packages/core/core/src/requests/ParcelBuildRequest.js#L96-106](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/requests/ParcelBuildRequest.js#L96-L106) [packages/core/core/src/requests/WriteBundlesRequest.js#L103-155](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/requests/WriteBundlesRequest.js#L103-L155) [packages/core/core/src/PackagerRunner.js#L388-423](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/PackagerRunner.js#L388-L423) [packages/core/core/src/requests/WriteBundleRequest.js#L132-160](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/requests/WriteBundleRequest.js#L132-L160)
- Watch startup calls watch() → _getWatcherSubscription() → report(watchStart) → queued _startNextBuild(); later filesystem events call respondToFSEvents(), abort an active build when invalidated, and enqueue one replacement build when none is waiting. — [packages/core/core/src/Parcel.js#L212-236](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/Parcel.js#L212-L236) [packages/core/core/src/Parcel.js#L190-209](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/Parcel.js#L190-L209) [packages/core/core/src/Parcel.js#L401-433](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/Parcel.js#L401-L433)
- An HTTP bundle request follows Server.respond() → serveBundle() → event.requestBundle(); a placeholder adds entry asset IDs and queues a rebuild, while a non-placeholder returns immediately, after which serveDist() serves outputFS content. — [packages/reporters/dev-server/src/Server.js#L160-167](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/reporters/dev-server/src/Server.js#L160-L167) [packages/reporters/dev-server/src/Server.js#L245-295](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/reporters/dev-server/src/Server.js#L245-L295) [packages/core/core/src/Parcel.js#L328-362](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/Parcel.js#L328-L362)
- Persistence follows Parcel._end() → RequestTracker.writeToCache() → serialized results/graph plus inputFS.writeSnapshot(); the next _init() calls RequestTracker.init() → loadRequestGraph(), with a fresh graph used when caching is disabled, missing, or restoration throws. — [packages/core/core/src/Parcel.js#L183-188](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/Parcel.js#L183-L188) [packages/core/core/src/RequestTracker.js#L1346-1389](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/RequestTracker.js#L1346-L1389) [packages/core/core/src/RequestTracker.js#L1410-1418](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/RequestTracker.js#L1410-L1418) [packages/core/core/src/RequestTracker.js#L1443-1485](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/RequestTracker.js#L1443-L1485)
- _build() reports buildSuccess before running validation and checking reporter errors; subsequent exceptions become a reported buildFailure, except BuildAbortError is rethrown. Parcel.run() then shuts down before throwing BuildError for a failure result. — [packages/core/core/src/Parcel.js#L367-398](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/Parcel.js#L367-L398) [packages/core/core/src/Parcel.js#L166-180](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/Parcel.js#L166-L180)

## Testing signals

Tests and CI were inspected, not executed; test existence does not establish a passing result. The inspected JavaScript suites use Mocha with Node assertions, Sinon, shared filesystem utilities, and WebSocket clients. Rust includes ordinary #[test] cases, and CI configures cross-platform unit and integration runs plus type and formatting checks. This bounded inspection does not establish complete coverage, browser parity, or security-test completeness.
- Root Mocha discovery targets package tests outside integration-tests and loads Babel registration plus shared setup; test:unit chains Mocha with cargo test --workspace --exclude parcel-node-bindings. — [.mocharc.json#L1-6](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/.mocharc.json#L1-L6) [package.json#L30-33](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/package.json#L30-L33)
- Parcel.test.js checks rejection of an ending worker farm, owned-versus-supplied farm cleanup, shared-reference removal, and unstable transform/resolve APIs; its helper disables caching and uses a configuration without reporters, limiting that suite's persistence/server coverage. — [packages/core/core/test/Parcel.test.js#L21-74](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/test/Parcel.test.js#L21-L74) [packages/core/core/test/Parcel.test.js#L88-127](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/test/Parcel.test.js#L88-L127) [packages/core/core/test/Parcel.test.js#L131-141](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/test/Parcel.test.js#L131-L141)
- RequestTracker.test.js explicitly checks valid-result reuse, reruns after invalidation, parent invalidation through subrequests, failed requests, and removal of obsolete subrequests. — [packages/core/core/test/RequestTracker.test.js#L14-56](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/test/RequestTracker.test.js#L14-L56) [packages/core/core/test/RequestTracker.test.js#L59-107](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/test/RequestTracker.test.js#L59-L107) [packages/core/core/test/RequestTracker.test.js#L109-139](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/test/RequestTracker.test.js#L109-L139)
- Integration cache tests build, mutate inputs, and rebuild with caching enabled; the inspected cases assert changed execution results after a JS edit or new dependency and check that cache content omits project file paths. — [packages/core/integration-tests/test/cache.js#L47-58](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/integration-tests/test/cache.js#L47-L58) [packages/core/integration-tests/test/cache.js#L89-117](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/integration-tests/test/cache.js#L89-L117) [packages/core/integration-tests/test/cache.js#L133-158](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/integration-tests/test/cache.js#L133-L158)
- Server integration tests compare HTTP responses with output files, verify HEAD content length and empty bodies, and exercise source-file and sourcemap serving; HMR tests assert changed JS content and source-map/source-URL annotations over WebSockets. — [packages/core/integration-tests/test/server.js#L36-85](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/integration-tests/test/server.js#L36-L85) [packages/core/integration-tests/test/server.js#L88-139](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/integration-tests/test/server.js#L88-L139) [packages/core/integration-tests/test/hmr.js#L143-171](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/integration-tests/test/hmr.js#L143-L171)
- The Rust resolver's #[test] relative case exercises explicit extensions, omitted extensions, repeated separators, and tilde paths; its fixture root points into the JavaScript resolver fixture tree. — [crates/parcel-resolver/src/lib.rs#L1429-1446](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/crates/parcel-resolver/src/lib.rs#L1429-L1446) [crates/parcel-resolver/src/lib.rs#L1447-1478](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/crates/parcel-resolver/src/lib.rs#L1447-L1478)
- CI configures Node 20/22 across Linux, macOS, and Windows for unit and integration tests, builds native bindings first, and additionally builds JavaScript packages before integration tests; separate jobs run lint, Flow, and declaration checks. — [.github/workflows/ci.yml#L14-49](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/.github/workflows/ci.yml#L14-L49) [.github/workflows/ci.yml#L60-84](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/.github/workflows/ci.yml#L60-L84) [.github/workflows/ci.yml#L95-123](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/.github/workflows/ci.yml#L95-L123)
- Integration Mocha configuration allows 50-second tests and two retries, and CI disables fail-fast with a flakiness comment; HMR client helpers use a 100-ms sleep, so inspecting these tests does not prove deterministic real-browser behavior. — [packages/core/integration-tests/.mocharc.json#L1-8](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/integration-tests/.mocharc.json#L1-L8) [.github/workflows/ci.yml#L95-103](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/.github/workflows/ci.yml#L95-L103) [packages/core/integration-tests/test/hmr.js#L100-119](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/integration-tests/test/hmr.js#L100-L119)

## Risk map

The observed trust boundaries include development HTTP/WebSocket interfaces, executable project configuration and plugins, package-manager subprocesses, and output/cache filesystem writes. Several correctness-sensitive paths depend on graph invalidation, update ordering, and worker cache visibility. Findings below are source observations or explicitly labeled hypotheses, not confirmed vulnerabilities or reproduced defects. The inspection was bounded and does not establish the absence of protections or tests elsewhere.
- The CLI documents listening on all interfaces by default, Server.start() defaults CORS to wildcard headers, and the source endpoint serves inputFS beneath projectRoot; this combination makes development-network exposure a review boundary. — [packages/core/parcel/src/cli.js#L163-176](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/parcel/src/cli.js#L163-L176) [packages/reporters/dev-server/src/Server.js#L35-47](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/reporters/dev-server/src/Server.js#L35-L47) [packages/reporters/dev-server/src/Server.js#L151-159](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/reporters/dev-server/src/Server.js#L151-L159) [packages/reporters/dev-server/src/Server.js#L482-490](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/reporters/dev-server/src/Server.js#L482-L490)
- HMRServer.handle() accepts an editor endpoint file query, preserves absolute paths, joins relative paths to projectRoot, and calls launchEditor(); its shown WebSocket initialization uses new WebSocket.Server({server}) without an origin-verification option. — [packages/reporters/dev-server/src/HMRServer.js#L131-140](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/reporters/dev-server/src/HMRServer.js#L131-L140) [packages/reporters/dev-server/src/HMRServer.js#L185-198](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/reporters/dev-server/src/HMRServer.js#L185-L198)
- Plugins are required through the project package manager, and executable proxy configurations are required and invoked with the Connect app; plugin version and symbol validation are compatibility checks around executable code. — [packages/core/core/src/loadParcelPlugin.js#L180-195](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/loadParcelPlugin.js#L180-L195) [packages/core/core/src/loadParcelPlugin.js#L227-239](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/loadParcelPlugin.js#L227-L239) [packages/reporters/dev-server/src/Server.js#L446-465](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/reporters/dev-server/src/Server.js#L446-L465)
- CLI autoinstall defaults to enabled except disabled flags or production-build CI detection; the npm installer can create package.json and spawns npm install with save flags, making an ordinary build capable of dependency and lockfile mutations. — [packages/core/parcel/src/cli.js#L435-442](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/parcel/src/cli.js#L435-L442) [packages/core/parcel/src/cli.js#L537-549](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/parcel/src/cli.js#L537-L549) [packages/core/package-manager/src/Npm.js#L25-45](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/package-manager/src/Npm.js#L25-L45) [packages/core/package-manager/src/installPackage.js#L165-174](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/package-manager/src/installPackage.js#L165-L174)
- WriteBundlesRequest explicitly refreshes LMDB after worker packaging because a stale main-thread read transaction can miss committed values; removing or reordering this refresh would disturb a documented concurrency safeguard. — [packages/core/core/src/requests/WriteBundlesRequest.js#L118-128](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/requests/WriteBundlesRequest.js#L118-L128) [packages/core/cache/src/LMDBCache.js#L118-123](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/cache/src/LMDBCache.js#L118-L123)
- BundleGraph documents that direct mutation of its exposed _graph can bypass bundle-hash invalidation, with runtime application relying on BundlerRunner to invalidate hashes; graph edits therefore have cross-stage cache consequences. — [packages/core/core/src/BundleGraph.js#L121-132](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/BundleGraph.js#L121-L132)
- buildSuccess is reported before validation, and built-in-server HMR updates may broadcast at the bundled phase before packaging; Node updates use additional readiness coordination, so consumers must distinguish graph readiness, written output, and final validation. — [packages/core/core/src/Parcel.js#L367-375](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/Parcel.js#L367-L375) [packages/reporters/dev-server/src/ServerReporter.js#L43-63](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/reporters/dev-server/src/ServerReporter.js#L43-L63) [packages/reporters/dev-server/src/NodeRunner.js#L119-128](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/reporters/dev-server/src/NodeRunner.js#L119-L128)
- Hypothesis: runEntryRequest() computes didEntriesChange using prevEntries.every(entryId === currentEntries[index]), which appears to disable incremental bundling for identical lists and may miss equal-length substitutions; this warrants targeted investigation rather than a confirmed defect claim. (inferred) — [packages/core/core/src/requests/AssetGraphRequest.js#L480-493](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/requests/AssetGraphRequest.js#L480-L493) [packages/core/core/src/requests/BundleGraphRequest.js#L266-276](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/requests/BundleGraphRequest.js#L266-L276)

## Extension points

Parcel's intended extension model is a staged plugin pipeline with public asset and graph wrappers. Configuration selects plugins by file glob and optional named pipeline, while loaders validate the plugin instance contract. Bundling, transformation, packaging, optimization, compression, resolution, and reporting expose different responsibilities. Core also supports substitution of filesystems, cache, package manager, and worker farm for embedding and browser operation.
- @parcel/plugin exports Transformer, Resolver, Bundler, Namer, Runtime, Validator, Packager, Optimizer, Compressor, and Reporter wrappers that store hooks under Symbol.for('parcel-plugin-config'); loadPlugin unwraps that symbol and rejects invalid exports. — [packages/core/plugin/src/PluginAPI.js#L16-86](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/plugin/src/PluginAPI.js#L16-L86) [packages/core/core/src/loadParcelPlugin.js#L227-239](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/loadParcelPlugin.js#L227-L239)
- ParcelConfig.getNamedPipelines() derives names from colon-prefixed transformer globs, and getTransformers() matches a file/pipeline before loading its plugins, with an allowEmpty branch for missing pipelines. — [packages/core/core/src/ParcelConfig.js#L198-225](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/ParcelConfig.js#L198-L225) [packages/configs/default/index.json#L4-11](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/configs/default/index.json#L4-L11)
- Custom bundlers receive MutableBundleGraph plus configuration, options, logger, and tracer; the default plugin illustrates loadConfig(), bundle(), and optimize() and separates ideal-graph construction from graph decoration. — [packages/core/core/src/requests/BundleGraphRequest.js#L310-336](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/requests/BundleGraphRequest.js#L310-L336) [packages/bundlers/default/src/DefaultBundler.js#L138-155](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/bundlers/default/src/DefaultBundler.js#L138-L155) [docs/DefaultBundler.md#L25-42](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/docs/DefaultBundler.md#L25-L42)
- Transformer hooks include optional parsing and AST reuse, required transformation through MutableAsset, deferred generation, and optional postProcess; pipeline loading preloads each transformer's configuration. — [packages/core/core/src/Transformation.js#L474-500](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/Transformation.js#L474-L500) [packages/core/core/src/Transformation.js#L630-674](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/Transformation.js#L630-L674) [packages/core/core/src/Transformation.js#L677-699](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/Transformation.js#L677-L699)
- Packagers receive named bundles, public BundleGraph, source-map references, and inline-bundle content callbacks; optimizers run sequentially over the prior optimizer's contents, map, and optional changed type. — [packages/core/core/src/PackagerRunner.js#L451-495](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/PackagerRunner.js#L451-L495) [packages/core/core/src/PackagerRunner.js#L569-597](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/PackagerRunner.js#L569-L597)
- Compressor plugins receive cloned output streams and may return a typed stream, append an output suffix, or return null to suppress that output; the default configuration uses @parcel/compressor-raw. — [packages/core/core/src/requests/WriteBundleRequest.js#L199-225](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/requests/WriteBundleRequest.js#L199-L225) [packages/core/core/src/requests/WriteBundleRequest.js#L245-291](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/requests/WriteBundleRequest.js#L245-L291) [packages/configs/default/index.json#L84-86](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/configs/default/index.json#L84-L86)
- Rust Resolver exposes Node CJS, Node ESM, and Parcel constructors, feature flags, extension lists, export conditions, include-node-modules policy, and a custom module-directory resolver callback suitable for alternate lookup mechanisms. — [crates/parcel-resolver/src/lib.rs#L77-110](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/crates/parcel-resolver/src/lib.rs#L77-L110) [crates/parcel-resolver/src/lib.rs#L133-151](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/crates/parcel-resolver/src/lib.rs#L133-L151) [crates/parcel-resolver/src/lib.rs#L213-257](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/crates/parcel-resolver/src/lib.rs#L213-L257)
- Embedding can supply inputFS, outputFS, cache, packageManager, and workerFarm; the REPL uses these substitutions, while CLI --reporter adds reporter packages resolved from the caller's working directory. — [packages/core/core/src/resolveOptions.js#L47-51](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/resolveOptions.js#L47-L51) [packages/core/core/src/resolveOptions.js#L92-115](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/resolveOptions.js#L92-L115) [packages/dev/repl/src/parcel/ParcelWorker.js#L254-278](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/dev/repl/src/parcel/ParcelWorker.js#L254-L278) [packages/core/parcel/src/cli.js#L515-521](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/parcel/src/cli.js#L515-L521)

## Contributor handoff

Start from the relevant product boundary and follow its requests before changing shared graph or cache machinery. Repository scripts, package ownership, Flow annotations, generated declarations, and native prerequisites shape implementation work. Tests and CI were inspected, not executed, and the inventory and investigation are bounded rather than exhaustive. Future agents should preserve that distinction and obtain runtime evidence only when execution is authorized.
- For lifecycle or CLI work, read cli.js, Parcel.js, and resolveOptions.js first; CONTRIBUTING explicitly points newcomers to Parcel.js, and CLI option defaults are translated before the core instance is constructed. — [CONTRIBUTING.md#L23-25](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/CONTRIBUTING.md#L23-L25) [packages/core/parcel/src/cli.js#L277-298](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/parcel/src/cli.js#L277-L298) [packages/core/core/src/resolveOptions.js#L47-65](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/resolveOptions.js#L47-L65)
- Use the repository's Yarn 4.9.1/node-modules setup and existing scripts; source/lib manifest pairs and build-ts scripts distinguish editable sources from built packages and generated TypeScript declarations. — [package.json#L14-21](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/package.json#L14-L21) [package.json#L80-80](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/package.json#L80-L80) [.yarnrc.yml#L1-3](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/.yarnrc.yml#L1-L3) [packages/core/cache/package.json#L17-25](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/cache/package.json#L17-L25)
- Follow Flow-oriented source conventions, @parcel/eslint-config, and Prettier's single quotes, omitted bracket spacing, LF endings, and trailing commas; Lerna uses independent package versions, and CONTRIBUTING says not to modify package versioning. — [packages/core/core/src/Parcel.js#L1-18](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/Parcel.js#L1-L18) [.eslintrc.json#L1-3](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/.eslintrc.json#L1-L3) [.prettierrc#L1-6](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/.prettierrc#L1-L6) [CONTRIBUTING.md#L49-49](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/CONTRIBUTING.md#L49-L49)
- Graph changes require reading symbol propagation and bundler architecture alongside implementation: docs explain down/up symbol passes and per-target ideal graphs, while BundleGraph.fromAssetGraph retargets dependencies based on symbol data. — [docs/Symbol Propagation.md#L25-32](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/docs/Symbol%20Propagation.md#L25-L32) [docs/DefaultBundler.md#L15-29](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/docs/DefaultBundler.md#L15-L29) [packages/core/core/src/BundleGraph.js#L152-165](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/BundleGraph.js#L152-L165)
- Preserve worker ownership and serialized watch scheduling: Parcel ends a farm it creates but only disposes references for a supplied farm; the corresponding tests assert both behaviors and shared-reference cleanup. — [packages/core/core/src/Parcel.js#L74-76](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/Parcel.js#L74-L76) [packages/core/core/src/Parcel.js#L133-140](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/Parcel.js#L133-L140) [packages/core/core/test/Parcel.test.js#L44-74](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/test/Parcel.test.js#L44-L74)
- During authorized plugin development, CONTRIBUTING recommends --no-cache or shouldDisableCache to avoid stale local results; compatibility loading separately checks engines.parcel unless SKIP_PLUGIN_COMPATIBILITY_CHECK is set. — [CONTRIBUTING.md#L74-82](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/CONTRIBUTING.md#L74-L82) [packages/core/core/src/loadParcelPlugin.js#L180-195](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/loadParcelPlugin.js#L180-L195)
- Tests and CI were inspected, not executed. Once execution is authorized, choose the relevant Mocha suite first, then the existing test:unit or integration workspace scripts as appropriate; CI requires native builds and includes lint, Flow, and declaration checks. — [.mocharc.json#L1-6](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/.mocharc.json#L1-L6) [package.json#L28-33](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/package.json#L28-L33) [packages/core/integration-tests/package.json#L10-12](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/integration-tests/package.json#L10-L12) [.github/workflows/ci.yml#L26-49](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/.github/workflows/ci.yml#L26-L49)
- Treat build and utility execution as potentially mutating: configurable cache/watch/output paths cross filesystem boundaries, CLI autoinstall can spawn package installation, and create-parcel performs Git initialization and an initial commit. — [packages/core/core/src/resolveOptions.js#L96-125](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/core/src/resolveOptions.js#L96-L125) [packages/core/package-manager/src/Npm.js#L25-45](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/core/package-manager/src/Npm.js#L25-L45) [packages/utils/create-parcel/src/create-parcel.js#L83-120](https://github.com/parcel-bundler/parcel/blob/59484858a1a0bcbb71f74088956bb437a2db6505/packages/utils/create-parcel/src/create-parcel.js#L83-L120)

Source repository: https://github.com/parcel-bundler/parcel
Full evidence corpus: https://github.com/Codevetter/codevetter/tree/main/benchmarks/repo-unpacks/parcel.json

## Public product links

- [CodeVetter](https://codevetter.com/)
- [Download](https://codevetter.com/download)
- [Documentation](https://codevetter.com/docs/)
- [Source](https://github.com/Codevetter/codevetter)
