Files
Arian Tron 61f56f997c
Some checks failed
Test examples / Test Examples (20) (push) Has been cancelled
Test examples / Test Examples (22) (push) Has been cancelled
Lock Threads / action (push) Has been cancelled
Trigger Release / start (push) Has been cancelled
Stale issue handler / stale (push) Has been cancelled
Update Font Data / create-pull-request (push) Has been cancelled
build-and-deploy / deploy-target (push) Has been cancelled
build-and-deploy / build (push) Has been cancelled
build-and-deploy / stable - aarch64-unknown-linux-musl - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-unknown-linux-musl - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-unknown-linux-gnu - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-unknown-linux-gnu - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-pc-windows-msvc - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-pc-windows-msvc - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-apple-darwin - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-apple-darwin - node@16 (push) Has been cancelled
build-and-deploy / build-wasm (nodejs) (push) Has been cancelled
build-and-deploy / build-wasm (web) (push) Has been cancelled
build-and-deploy / Deploy preview tarball (push) Has been cancelled
build-and-deploy / Potentially publish release (push) Has been cancelled
build-and-deploy / publish-turbopack-npm-packages (push) Has been cancelled
build-and-deploy / Deploy examples (push) Has been cancelled
build-and-deploy / thank you, build (push) Has been cancelled
build-and-deploy / Upload Turbopack Bytesize metrics to Datadog (push) Has been cancelled
Rspack Next.js development integration tests / Rspack integration tests (push) Has been cancelled
Rspack Next.js production integration tests / Rspack integration tests (push) Has been cancelled
Turbopack Next.js development integration tests / Next.js integration tests (push) Has been cancelled
Turbopack Next.js production integration tests / Next.js integration tests (push) Has been cancelled
Update Rspack test manifest / Update and upload Rspack development test manifest (push) Has been cancelled
Update Rspack test manifest / Update and upload Rspack production test manifest (push) Has been cancelled
Upload bundler test manifests to areweturboyet.com / Upload test results (push) Has been cancelled
Update React / create-pull-request (push) Has been cancelled
test-e2e-project-reset-cron / reset-test-project (push) Has been cancelled
Notify about the top 15 issues/PRs/feature requests (most reacted) in the last 90 days / run (push) Has been cancelled
first commit
2026-03-10 19:37:31 +03:30
..
2026-03-10 19:37:31 +03:30
2026-03-10 19:37:31 +03:30
2026-03-10 19:37:31 +03:30
2026-03-10 19:37:31 +03:30

turbopack-ecmascript-runtime

This crate contains Turbopack's ECMAScript runtimes. These include:

  • Development runtimes for the browser, Node.js, and Edge-like runtimes;
  • Production runtimes for the browser, Node.js, and Edge-like runtimes (only Node.js is implemented for now).

<reference path="...">

The TypeScript files corresponding to the runtime itself all use <reference path="..."> instead of import/export to import dependencies. This is because the runtime doesn't use a module system. Instead, the files are concatenated together in a specific order.

As such, the <reference path="..."> statements more closely map to the way the runtime is actually built. They also allow us to refer to top-level declarations in another file without having to import/export them, which makes no sense in the context of a runtime.

Why is everything in one crate?

The runtime-agnostic code (js/src/shared) was originally placed in turbopack-ecmascript, and the runtime-specific code (js/src/{build,dev}) in turbopack-{build,dev}.

However, <reference path="..."> statements only support relative paths. You can't refer to a file in a dependency. For the typings to work properly, and for them to be usable from outside of this repo (e.g. in the Next.js repo), it's much easier to have everything in one package.

Why so many tsconfig.json?

Since different runtimes are meant to run in different environments, they use different tsconfig.json files to customize what APIs are available to them. For example, the browser runtime can use window and document, but the Node.js runtime can't.

All of these tsconfig.json files extend tsconfig.base.json, which contains the common configuration for all runtimes.