CodeVetter
← All unpacks
CodeVetter · Repo Unpack evidence

rolldown/rolldown

Scanned commit 37d60ff510 dated 2026-10-02 — last upstream commit. Generated by codevetter 1.15.0 on 2026-10-02.

github.com/rolldown/rolldown ↗ · 3998 files · 6.3 MB · scan capped

[![MIT licensed][badge-license]][url-license] [![NPM version][badge-npm-version]][url-npm] [![Discord chat][badge-discord]][discord-url] [ ][url-npm] Rolldown Rolldown is a JavaScript/TypeScript bundler written in Rust intended to serve as the future bundler u

Deep analysis by cli:codex via the codex CLI on 2026-10-02 (418s) — every claim below links to its cited source files. Source inspection; upstream code and tests were not executed.

Overview

Rolldown is a Rust-based JavaScript/TypeScript bundler for application developers and tooling authors, exposing Rollup-compatible APIs through TypeScript and Node-API bindings. Its core separates scanning, linking, and output generation, with distinct lifecycle models for independent builds and persistent watch/dev sessions. The inspected source also exposes browser/WASI packaging, parallel plugins, compiler utilities, and experimental Vite integration APIs. This brief describes commit 37d60ff510b4b326f4b587c27f28c606d76373e8 through bounded source inspection; it includes no executed test or performance results.

System map

The implementation crosses TypeScript, Node-API, and Rust boundaries. The public package supports independent builds, while watch and dev APIs introduce longer-lived runtime owners. Persistent state in the inspected architecture consists primarily of module/cache structures and filesystem artifacts. Distribution includes native and WASI/browser builds, with separate documentation deployment.

Feature catalog

The user-facing product is chiefly a CLI and a programmatic bundling API. Output operations support memory generation and filesystem writing, complemented by plugins and compiler utilities. Experimental surfaces expose development-engine callbacks, browser memory filesystems, and Vite-oriented integrations. The following catalog covers inspected capabilities rather than asserting an exhaustive option inventory.

Data flow

Options pass through JavaScript validation and hook processing before becoming binding inputs. Sources arrive through plugin load hooks or filesystem reads and become module, AST, symbol, and statement tables. Linking determines retained behavior, and generation turns that state into chunks and assets. State lifetime and error handling differ between independent builds and retained watch sessions.

Behavior traces

Three concrete flows were followed through their implementations: CLI config bundling, programmatic output generation/writing, and watch initialization/rebuild. The traces preserve meaningful branches such as native versus bundled config loading and generate versus write. Cleanup and recovery are part of the observed behavior, including worker/runtime release and watch registration after failed scans.

Testing signals

Tests and CI were inspected, not executed; test existence is not a passing result. The inspected suites combine Rust fixture tests, Vitest API/CLI/watch tests, Mocha Rollup compatibility tests, and packed-browser smoke tests. Coverage is intentionally split across runtime and platform lanes, with conditional CI execution. This bounded inspection establishes particular assertions and limitations, not whole-repository coverage.

Risk map

The main observed trust boundaries are executable configuration/plugins, output filesystem operations, worker IPC, and package acquisition. Source contains explicit protections and comments about lifecycle/deadlock constraints. The observations below identify behaviors and maintenance hazards; they do not establish exploitable vulnerabilities. Documentation and test limitations are scoped to the inspected files.

Extension points

Plugins are the principal extension mechanism across JavaScript and Rust. Hook adapters preserve metadata and filters across the language boundary, while factories manage state lifetime. Additional APIs expose compiler utilities and experimental dev callbacks. CLI options derive from schema information rather than a standalone hand-maintained command inventory.

Contributor handoff

Future agents should begin with feature-local implementation and lifecycle documentation, then verify it against code. Safe boundaries distinguish public TypeScript sources, NAPI adapters, generated bindings, and Rust core state owners. Tests and CI were inspected, not executed; this brief supplies no passing result and its inventory is bounded. Suggested checks below are for a separately authorized implementation session, not actions performed during this investigation.

Languages

LanguageFilesShare of source
JavaScript710076%
JSON2658docs/config
TypeScript128214%
Rust8789%
Markdown240docs/config
CSS97docs/config
TOML621%
HTML45docs/config

Start reading here

Probable source entrypoint: Cargo.toml — inferred from the directory tree and manifest, not the upstream docs.

Source roots

crates/ (1817 files) packages/ (1814 files)

Source layout — crates/

PathFiles
crates/bench/1
crates/rolldown/263

Repository structure

Top-level pathFiles
crates/1817
packages/1814
examples/110
docs/82
scripts/45
.github/37
internal-docs/37
tasks/18

Docs found: AGENTS.mdCONTRIBUTING.mdREADME.mddocs/.vitepress/theme/components/api.index.mddocs/README.mddocs/acknowledgements.mddocs/apis/bundler-api.mddocs/apis/cli.mddocs/apis/plugin-api.mddocs/apis/plugin-api/file-urls.md

Package

Cargo.toml — , 0 declared dependencies.

CI & config entrypoints

Structural health signals

Average score 8.7/10 across 96 analyzed source files; 3 hotspots surfaced.

These are deterministic review leads — size, churn, and structural signals — not proof of a bug in this project.

Recent history