CodeVetter
← All unpacks
CodeVetter · Repo Unpack evidence

react/create-react-app

Scanned commit 6254386531 dated 2025-02-14 — last upstream commit. Generated by codevetter 1.12.0 on 2026-09-22.

github.com/react/create-react-app ↗ · 505 files · 1.4 MB

Create React App [!CAUTION] ## Deprecated Create React App was one of the key tools for getting a React project up-and-running in 2017-2021, it is now in long-term stasis and we recommend that you migrate to one of React frameworks documented on Start a New Re

Deep analysis by cli:grok via the grok CLI on 2026-09-22 (239s) — every claim below links to its cited source files.

Overview

Create React App is a monorepo that scaffolds opinionated React applications and ships the build, lint, test, and dev-server toolchain those apps use. The CLI (`create-react-app`) copies a template, installs dependencies, and the generated app is then driven by `react-scripts` (webpack, Babel, Jest, ESLint). This brief is grounded in the repo at commit 6254386531d263688ccfa542d0e628fbc0de0b28.

System map

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).

All 13 system map claims →

Feature catalog

User-facing features split into the scaffolder CLI, the four react-scripts commands, the default JS and TS templates, and the documentation site. The generated app is a single-page React demo (logo, edit-src hint, learn-react link) with Jest/Testing Library already wired and a production build that fingerprints assets. Optional capabilities include CSS/Sass/CSS Modules, SVG ReactComponent imports, TypeScript, Jest watch mode, HTTPS dev server, proxy, PUBLIC_URL, and eject.

Data flow

Two data planes exist. Scaffolding: argv and template package contents flow through createApp into a new directory, then init.js materializes package.json, source files, and git state. App runtime: source files, env files, and public/ flow through webpack (Babel, CSS, asset plugins) into either an in-memory dev server or a build/ directory. Jest is a third consumer of the same Babel pipeline via babel-jest and a derived config. Environment variables are the main cross-cutting input: only NODE_ENV, PUBLIC_URL, and REACT_APP_* are inlined into the client bundle.

Behavior traces

Three end-to-end traces matter: creating an app, starting the dev server, and producing a production build. A fourth shorter trace is the Jest test command and a fifth is eject. Each names the functions in call order as they appear in the source.

Testing signals

Tests are split across package-level Jest unit tests and a fixture integration suite under test/ that builds real apps with the local react-scripts. The root test script runs tasks/e2e-simple.sh; full behavior coverage is tasks/e2e-behavior.sh and tasks/e2e-docker.sh. GitHub Actions runs these on pull requests. Unit tests use Jest; a few packages still mention Flow. There is no Cypress/Playwright app suite — e2e here means CLI integration against webpack builds. Coverage of the dev server, eject, and the docs site is thin compared with the fixture build matrix.

Risk map

The highest-risk surfaces are process spawning during install (npm/yarn), the dev server's host check and proxy, env inlining, and eject rewriting package.json. Secrets are not stored in-repo; the dangerous pattern is REACT_APP_* being baked into the client bundle. Several code paths shell out to git. The project is in maintenance mode (v5.1.0) so dependency CVEs in webpack 5 / Jest 27 will linger unless backporting continues. Dead weight includes IE polyfill entrypoints and Flow leftovers.

All 13 risk map claims →

Extension points

CRA's extension model is deliberate and narrow: custom templates, a replaceable react-scripts package (--scripts-version), env vars, package.json fields (proxy, homepage, browserslist, jest, babel), and finally eject. There is no in-process plugin registry. The practical plug-in points inside the repo are the webpack config factory, the Jest config factory, babel-preset-react-app's create() options, and ESLint's optional plugin detection. Community tools (CRACO, react-app-rewired) patch these from outside because the project refuses a first-party override API.

Contributor handoff

Edit the package that owns the behavior, not the docs site, unless the task is documentation. The CLI is packages/create-react-app; compiler behavior is packages/react-scripts/config and scripts; shared helpers are packages/react-dev-utils. Keep Node >=14 assumptions. Do not add a webpack-override API. Verify with the package's Jest tests first, then tasks/e2e-simple.sh for scaffold or config changes. Avoid npm install at the repo root unless the user asked — Yarn workspaces and tasks/build.js are the intended install/pack path. Generated template files are copied verbatim, so a template bug ships to every new app.

Languages

LanguageFilesShare of source
JavaScript27189%
Markdown75docs/config
JSON41docs/config
TypeScript145%
CSS12docs/config
Shell103%
Sass93%
YAML7docs/config

Start reading here

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

Source roots

packages/ (322 files)

Source layout — packages/

PathFiles
packages/babel-preset-react-app/10
packages/eslint-config-react-app/6
packages/react-app-polyfill/7
packages/react-dev-utils/41
packages/react-error-overlay/26
packages/react-scripts/135

Repository structure

Top-level pathFiles
packages/322
test/78
docusaurus/55
tasks/15
.github/11

Docs found: CONTRIBUTING.mdREADME.md

Package

package.json — , 23 declared dependencies.

@testing-library/jest-dom@testing-library/react@testing-library/user-eventalexeslintexecafs-extraget-portglobbyhuskyjestlerna

CI & config entrypoints

Structural health signals

Average score 7.9/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