# Feature catalog — react/create-react-app

> Canonical page: https://codevetter.com/unpack/create-react-app/feature-catalog

# Feature catalog — react/create-react-app

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

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.
- CLI create-react-app <project-directory> accepts --verbose, --info, --scripts-version <version>, --template <name>, and --use-pnp. --info prints environment diagnostics via envinfo and exits. Template names are normalized: cra-template prefix is added unless the name contains a scope or file: prefix. — [packages/create-react-app/createReactApp.js#L140-280](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/create-react-app/createReactApp.js#L140-L280) [README.md#L1-80](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/README.md#L1-L80)
- init.js is the post-install initializer. It copies the template (excluding template.json), merges template.json into package.json (dependencies, scripts, eslintConfig, browserslist), renames gitignore to .gitignore, tries git init and an initial commit, and prints the success message with cd/npm start instructions. — [packages/react-scripts/scripts/init.js#L40-250](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/react-scripts/scripts/init.js#L40-L250)
- react-scripts start loads env, chooses a port (default 3000 via choosePort), creates a webpack compiler from configFactory('development'), starts WebpackDevServer, opens the browser unless --no-open or BROWSER=none, and installs SIGINT/SIGTERM handlers that close the server. — [packages/react-scripts/scripts/start.js#L1-180](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/react-scripts/scripts/start.js#L1-L180) [packages/react-scripts/config/webpackDevServer.config.js#L1-80](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/react-scripts/config/webpackDevServer.config.js#L1-L80)
- react-scripts build empties paths.appBuild, runs the production webpack compiler, prints gzip file sizes via FileSizeReporter, copies public/ (minus index.html) into build/, and warns when the build is not deployed to the root because PUBLIC_URL or homepage is set. — [packages/react-scripts/scripts/build.js#L40-220](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/react-scripts/scripts/build.js#L40-L220)
- react-scripts test is a thin wrapper around Jest. It sets BABEL_ENV and NODE_ENV to test, injects a watch mode (unless CI or --watchAll/--watchAll=false), and forwards argv to jest.run. Config comes from packages/react-scripts/scripts/utils/createJestConfig.js. — [packages/react-scripts/scripts/test.js#L1-120](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/react-scripts/scripts/test.js#L1-L120) [packages/react-scripts/scripts/utils/createJestConfig.js#L1-80](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/react-scripts/scripts/utils/createJestConfig.js#L1-L80)
- react-scripts eject copies webpack, Babel, and ESLint config into the app, removes the react-scripts dependency, and is irreversible. The eject script checks the git status is clean unless --force or --no-git is passed, then rewrites package.json scripts from react-scripts <cmd> to node scripts/<cmd>.js. — [packages/react-scripts/scripts/eject.js#L1-120](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/react-scripts/scripts/eject.js#L1-L120)
- The default JS template App renders a header with img logo (logo.svg), a paragraph telling the user to edit src/App.js, and an anchor to https://reactjs.org. App.css, index.js (ReactDOM.createRoot or ReactDOM.render depending on template version), and public/index.html with %PUBLIC_URL% placeholders ship alongside it. — [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) [packages/cra-template/template/src/index.js#L1-30](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/cra-template/template/src/index.js#L1-L30) [packages/cra-template/template/public/index.html#L1-40](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/cra-template/template/public/index.html#L1-L40)
- cra-template-typescript ships App.tsx, react-app-env.d.ts, and tsconfig.json. Its template.json adds typescript, @types/node, @types/react, @types/react-dom, and @types/jest. The typecheck fixture App.tsx exists to assert tsc behavior in integration tests. — [packages/cra-template-typescript/template.json#L1-40](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/cra-template-typescript/template.json#L1-L40) [packages/cra-template-typescript/template/src/App.tsx#L1-40](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/cra-template-typescript/template/src/App.tsx#L1-L40) [test/fixtures/typescript-typecheck/src/App.tsx#L1-30](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/test/fixtures/typescript-typecheck/src/App.tsx#L1-L30)
- Dev server features in webpackDevServer.config.js include hot reloading, historyApiFallback, gzip, public/ static directory, optional proxy from package.json proxy, HTTPS when HTTPS=true, and allowedHosts driven by HOST / DANGEROUSLY_DISABLE_HOST_CHECK. SockJS and webpack-dev-server client overlay integrate with react-error-overlay. — [packages/react-scripts/config/webpackDevServer.config.js#L40-200](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/react-scripts/config/webpackDevServer.config.js#L40-L200) [packages/react-dev-utils/webpackHotDevClient.js#L1-40](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/react-dev-utils/webpackHotDevClient.js#L1-L40)
- Asset pipeline: file-loader/asset modules for images and fonts; babel-plugin-named-asset-import turns SVG imports named ReactComponent into SVGR components; CSS and CSS Modules via css-loader; Sass via sass-loader when the user installs sass. PostCSS applies autoprefixer using browserslist. — [packages/babel-plugin-named-asset-import/index.js#L1-60](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/babel-plugin-named-asset-import/index.js#L1-L60) [packages/react-scripts/config/webpack.config.js#L200-450](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/react-scripts/config/webpack.config.js#L200-L450) [packages/babel-preset-react-app/create.js#L1-80](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/babel-preset-react-app/create.js#L1-L80)
- eslint-config-react-app enables eslint:recommended, plugin:react/recommended, react-hooks, jsx-a11y, and (when the typescript parser is present) @typescript-eslint. jest and testing-library plugins are turned on only when those packages resolve from the app. confusing-browser-globals supplies restricted globals (event, name, length, etc.). — [packages/eslint-config-react-app/index.js#L1-120](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/eslint-config-react-app/index.js#L1-L120) [packages/confusing-browser-globals/index.js#L1-40](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/confusing-browser-globals/index.js#L1-L40)
- PWA support is conditional: webpack.config.js adds Workbox InjectManifest or GenerateSW only when src/service-worker.js (or serviceWorker.ts) exists. The modern templates do not include a service worker by default; older template copies may still reference serviceWorkerRegistration. — [packages/react-scripts/config/webpack.config.js#L600-750](https://github.com/react/create-react-app/blob/6254386531d263688ccfa542d0e628fbc0de0b28/packages/react-scripts/config/webpack.config.js#L600-L750)

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)
