# System map — preactjs/preact

> Canonical page: https://codevetter.com/unpack/preact/system-map

# System map — preactjs/preact

Scanned commit 45728eb4315bcb22c5d50b8fec0bbac419eaa799 (2026-10-02). Generated by codevetter codevetter 1.15.0 on 2026-10-02.

Source inspection; upstream code and tests were not executed.

The repository packages a DOM renderer and several addons under one public npm package. Core rendering owns VNode trees, component instances, and DOM mutations; hooks and compatibility extend it through shared options callbacks. Server rendering crosses into an optional external package, while the demo is a separate Vite application inside the workspace. Rollup, Babel, and Terser produce the distributable modules, and GitHub Actions define validation and staged release workflows.
- src/index.js exports render, hydrate, createElement/h, Fragment, refs, cloning, Component, context, portals, child flattening, and options as the core API. — [src/index.js#L1-14](https://github.com/preactjs/preact/blob/45728eb4315bcb22c5d50b8fec0bbac419eaa799/src/index.js#L1-L14)
- The root package is preact 11.0.0; its export map publishes core, compat, debug, devtools, hooks, test-utils, JSX runtimes, and compatibility client/server/scheduler adapters. — [package.json#L1-17](https://github.com/preactjs/preact/blob/45728eb4315bcb22c5d50b8fec0bbac419eaa799/package.json#L1-L17) [package.json#L19-87](https://github.com/preactjs/preact/blob/45728eb4315bcb22c5d50b8fec0bbac419eaa799/package.json#L19-L87)
- compat and debug manifests are private source/build metadata with separate dist modules; CONTRIBUTING describes addon manifests as publishing metadata rather than workspace projects. — [compat/package.json#L1-15](https://github.com/preactjs/preact/blob/45728eb4315bcb22c5d50b8fec0bbac419eaa799/compat/package.json#L1-L15) [debug/package.json#L1-15](https://github.com/preactjs/preact/blob/45728eb4315bcb22c5d50b8fec0bbac419eaa799/debug/package.json#L1-L15) [CONTRIBUTING.md#L14-16](https://github.com/preactjs/preact/blob/45728eb4315bcb22c5d50b8fec0bbac419eaa799/CONTRIBUTING.md#L14-L16)
- The pnpm workspace adds only demo; package.json selects pnpm 11.3.0 and Node 22.22.2, and workspace configuration enforces that Node engine. — [pnpm-workspace.yaml#L1-4](https://github.com/preactjs/preact/blob/45728eb4315bcb22c5d50b8fec0bbac419eaa799/pnpm-workspace.yaml#L1-L4) [pnpm-workspace.yaml#L23-25](https://github.com/preactjs/preact/blob/45728eb4315bcb22c5d50b8fec0bbac419eaa799/pnpm-workspace.yaml#L23-L25) [package.json#L215-218](https://github.com/preactjs/preact/blob/45728eb4315bcb22c5d50b8fec0bbac419eaa799/package.json#L215-L218)
- render stores the previous root on parentDom._children, while Component owns state and _nextState; these inspected core paths retain runtime state in objects associated with the DOM tree. — [src/render.js#L24-31](https://github.com/preactjs/preact/blob/45728eb4315bcb22c5d50b8fec0bbac419eaa799/src/render.js#L24-L31) [src/component.js#L35-59](https://github.com/preactjs/preact/blob/45728eb4315bcb22c5d50b8fec0bbac419eaa799/src/component.js#L35-L59)
- scripts/build.mjs enumerates seven bundles and uses Rollup, Babel property renaming, a custom rest transform, and Terser; addons externalize preact imports. — [scripts/build.mjs#L23-31](https://github.com/preactjs/preact/blob/45728eb4315bcb22c5d50b8fec0bbac419eaa799/scripts/build.mjs#L23-L31) [scripts/build.mjs#L82-106](https://github.com/preactjs/preact/blob/45728eb4315bcb22c5d50b8fec0bbac419eaa799/scripts/build.mjs#L82-L106) [scripts/build.mjs#L137-172](https://github.com/preactjs/preact/blob/45728eb4315bcb22c5d50b8fec0bbac419eaa799/scripts/build.mjs#L137-L172)
- Server compatibility exports string, pipeable-stream, and readable-stream rendering from preact-render-to-string; the root declares it an optional peer. — [compat/server.mjs#L1-17](https://github.com/preactjs/preact/blob/45728eb4315bcb22c5d50b8fec0bbac419eaa799/compat/server.mjs#L1-L17) [package.json#L207-213](https://github.com/preactjs/preact/blob/45728eb4315bcb22c5d50b8fec0bbac419eaa799/package.json#L207-L213) [CONTRIBUTING.md#L75-75](https://github.com/preactjs/preact/blob/45728eb4315bcb22c5d50b8fec0bbac419eaa799/CONTRIBUTING.md#L75-L75)
- The demo uses Vite with automatic JSX and source aliases for core, hooks, devtools, JSX runtimes, React, and ReactDOM. — [demo/package.json#L4-14](https://github.com/preactjs/preact/blob/45728eb4315bcb22c5d50b8fec0bbac419eaa799/demo/package.json#L4-L14) [demo/vite.config.js#L24-46](https://github.com/preactjs/preact/blob/45728eb4315bcb22c5d50b8fec0bbac419eaa799/demo/vite.config.js#L24-L46)
- Repository scripts define build, addon-specific watch modes, lint, formatting, minified Vitest tests, and separate core/compat TypeScript checks. — [package.json#L95-115](https://github.com/preactjs/preact/blob/45728eb4315bcb22c5d50b8fec0bbac419eaa799/package.json#L95-L115)
- Release automation responds to 11.* tags, consumes the tested npm-package artifact, creates a draft GitHub release, and stages npm publication with provenance; CONTRIBUTING describes a subsequent npm review and 2FA step. — [.github/workflows/release.yml#L3-20](https://github.com/preactjs/preact/blob/45728eb4315bcb22c5d50b8fec0bbac419eaa799/.github/workflows/release.yml#L3-L20) [.github/workflows/release.yml#L52-76](https://github.com/preactjs/preact/blob/45728eb4315bcb22c5d50b8fec0bbac419eaa799/.github/workflows/release.yml#L52-L76) [.github/workflows/release.yml#L127-128](https://github.com/preactjs/preact/blob/45728eb4315bcb22c5d50b8fec0bbac419eaa799/.github/workflows/release.yml#L127-L128) [CONTRIBUTING.md#L209-216](https://github.com/preactjs/preact/blob/45728eb4315bcb22c5d50b8fec0bbac419eaa799/CONTRIBUTING.md#L209-L216)

Every claim links to its cited files at the pinned commit. Citations identify source evidence; they do not establish runtime correctness. Independent CodeVetter scan — not reviewed by upstream maintainers.

## Public product links

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