# System map — react/create-react-app

> Canonical page: https://codevetter.com/unpack/create-react-app/system-map

# System map — react/create-react-app

Scanned commit 6254386531d263688ccfa542d0e628fbc0de0b28 (2025-02-14). Generated by codevetter codevetter 1.12.0 on 2026-09-22.

The published surface is a Lerna/Yarn workspaces monorepo under packages/. Users invoke the create-react-app binary, which delegates project creation to react-scripts/scripts/init.js and then leaves the app running on react-scripts start/build/test. Runtime boundaries are Node for the CLI and scripts, webpack-dev-server for development, Jest for tests, and static file output for production. Docs live in docusaurus/website and deploy via Netlify. CI is GitHub Actions (build-and-test, lint, e2e).
- Root package.json names the monorepo create-react-app, marks it private, requires Node >=14, and uses Yarn workspaces for packages/*. Scripts include create-react-app (node tasks/cra.js), build (node tasks/build.js), test (tasks/e2e-simple.sh), e2e (tasks/e2e-simple.sh + tasks/e2e-behavior.sh), e2e:docker (tasks/e2e-docker.sh), eslint, format, and prettier. — [package.json#L1-90](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/package.json#L1-L90)
- lerna.json pins Lerna 3.22.1 with version 5.1.0, npmClient yarn, and useWorkspaces true, so package publishes are version-locked together rather than independently versioned at publish time. — [lerna.json#L1-20](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/lerna.json#L1-L20)
- The user-facing CLI entry is packages/create-react-app/index.js. It checks Node >=14 via semver, validates the project directory with createApp, then spawns react-scripts/scripts/init.js through executeNodeScript, passing root, appName, verbose, originalDirectory, and template. — [packages/create-react-app/index.js#L1-80](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/create-react-app/index.js#L1-L80) [packages/create-react-app/package.json#L1-40](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/create-react-app/package.json#L1-L40)
- create-react-app's bin is create-react-app -> index.js and its only runtime dependency is react-scripts. CLI flags include --scripts-version, --template, --use-pnp, --verbose, and --info (which delegates to envinfo). — [packages/create-react-app/createReactApp.js#L1-160](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/create-react-app/createReactApp.js#L1-L160) [packages/create-react-app/package.json#L1-50](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/create-react-app/package.json#L1-L50)
- react-scripts is the toolchain package (bin react-scripts -> bin/react-scripts.js). Its dependencies include webpack 5, webpack-dev-server 4, babel-loader, @babel/core, Jest 27, eslint 8, css-minimizer-webpack-plugin, postcss-loader, sass-loader, workbox-webpack-plugin, and html-webpack-plugin. — [packages/react-scripts/package.json#L1-120](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/react-scripts/package.json#L1-L120) [packages/react-scripts/bin/react-scripts.js#L1-80](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/react-scripts/bin/react-scripts.js#L1-L80)
- react-scripts bin switches on process.argv[2]: start, build, and test require the matching scripts/* module; eject runs scripts/eject. Unknown commands print a hint that CRA commands are start, build, test, and eject. — [packages/react-scripts/bin/react-scripts.js#L20-180](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/react-scripts/bin/react-scripts.js#L20-L180)
- Webpack configs are three modules under packages/react-scripts/config: webpack.config.js (shared factory), webpackDevServer.config.js, and an env loader (env.js) plus paths.js and modules.js. babel-preset-react-app and eslint-config-react-app are sibling packages consumed by those configs. — [packages/react-scripts/config/webpack.config.js#L1-80](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/react-scripts/config/webpack.config.js#L1-L80) [packages/react-scripts/config/paths.js#L1-80](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/react-scripts/config/paths.js#L1-L80) [packages/babel-preset-react-app/package.json#L1-40](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/babel-preset-react-app/package.json#L1-L40) [packages/eslint-config-react-app/package.json#L1-40](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/eslint-config-react-app/package.json#L1-L40)
- Docs site package cra-docs (docusaurus/website) is a Docusaurus 2 app. Scripts are start (docusaurus start), build, deploy, and swizzle. netlify.toml publishes docusaurus/website/build with NODE_VERSION 16.8.0 and a docs redirect from / to /docs/getting-started. — [docusaurus/website/package.json#L1-40](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/docusaurus/website/package.json#L1-L40) [netlify.toml#L1-40](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/netlify.toml#L1-L40)
- CI workflow build-and-test.yml runs on push to main and on pull_request. Jobs include a build job and an e2e-docker job that calls the reusable workflow e2e-base.yml. lint.yml runs separately. — [.github/workflows/build-and-test.yml#L1-80](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/.github/workflows/build-and-test.yml#L1-L80) [.github/workflows/e2e-base.yml#L1-80](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/.github/workflows/e2e-base.yml#L1-L80) [.github/workflows/lint.yml#L1-40](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/.github/workflows/lint.yml#L1-L40)
- The default app template is packages/cra-template (template.json + template/public and template/src). TypeScript variant is packages/cra-template-typescript. Templates declare package.json dependencies (react, react-dom, react-scripts, web-vitals, testing-library) and scripts start/build/test/eject. — [packages/cra-template/template.json#L1-40](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/cra-template/template.json#L1-L40) [packages/cra-template-typescript/template.json#L1-50](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/cra-template-typescript/template.json#L1-L50) [packages/cra-template/template/src/App.js#L1-40](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/cra-template/template/src/App.js#L1-L40)
- react-dev-utils is the shared Node library for the CLI and scripts: WebpackDevServerUtils, createCompiler, FileSizeReporter, InterpolateHtmlPlugin, ModuleScopePlugin, eslintFormatter, and browsersHelper. react-error-overlay is a separate iframe overlay package built with its own webpack config. — [packages/react-dev-utils/package.json#L1-50](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/react-dev-utils/package.json#L1-L50) [packages/react-error-overlay/package.json#L1-40](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/react-error-overlay/package.json#L1-L40)
- There is no application database. Persistence is the generated project directory on disk (files copied from the template, package.json written by init, yarn.lock or package-lock from the installer) plus webpack's in-memory dev middleware and the build/ output folder. — [packages/react-scripts/scripts/init.js#L1-60](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/react-scripts/scripts/init.js#L1-L60) [packages/react-scripts/config/paths.js#L40-120](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/react-scripts/config/paths.js#L40-L120)
- External integrations at runtime are the npm registry (template and dependency install), browserslist/caniuse via react-dev-utils/browsersHelper, optional Sentry-unrelated envinfo for --info, and Google Fonts only inside the docs site CSS — not the generated app. Workbox is bundled for optional PWA service workers when src/service-worker.js exists. — [packages/create-react-app/createReactApp.js#L200-400](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/create-react-app/createReactApp.js#L200-L400) [packages/react-dev-utils/browsersHelper.js#L1-40](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/react-dev-utils/browsersHelper.js#L1-L40) [packages/react-scripts/config/webpack.config.js#L500-700](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/react-scripts/config/webpack.config.js#L500-L700)

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)
