Create React App launched this week, and it's the most significant React ecosystem development since Redux. Not because of what it does—setting up React projects—but how it does it: zero configuration, hidden complexity, sane defaults.
This is Facebook acknowledging JavaScript tooling is too complex and doing something about it.
The Tooling Complexity Problem
Starting a React project in 2016 requires:
- webpack configuration (dozens of options)
- Babel configuration (presets, plugins)
- Development server setup
- Hot module replacement config
- Test framework setup
- Linting configuration
- Build optimization config
This is hours of work before writing first component. Tutorials focus on configuration, not React. New developers are overwhelmed.
Create React App eliminates this:
npm install -g create-react-app
create-react-app my-app
cd my-app
npm start
You're done. Development server runs, hot reloading works, production builds optimize automatically. No configuration files.
How It Works
Create React App uses react-scripts package containing all tooling. Your project has zero config files—everything is in react-scripts.
{
"dependencies": {
"react": "^15.2.0",
"react-dom": "^15.2.0",
"react-scripts": "0.2.0"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
}
}
When you run npm start, react-scripts handles webpack, Babel, dev server, everything. You never see the config.
This is radical. Most tools expose configuration for flexibility. Create React App hides it for simplicity.
The Eject Escape Hatch
If you need custom configuration, run npm run eject. This copies all configuration into your project:
- webpack configs
- Babel configs
- Scripts
- Dependencies
Now you have full control. But you can't "uneject"—this is one-way door.
The philosophy: most projects don't need custom config. Those that do can eject. But default is zero config.
What's Included
Create React App provides:
- webpack with optimized config
- Babel with ES6 and JSX support
- Dev server with hot reloading
- Jest for testing
- Production builds with minification
- CSS autoprefixer
- Error overlay in development
- Service worker for offline (optional)
This is comprehensive. Not every possible feature, but 90% of needs covered.
What's Not Included
Notably missing:
- Server-side rendering
- CSS preprocessors (Sass, Less)
- TypeScript support
- Decorator syntax
- Alternative state management setup
These are intentional omissions. Create React App targets common use cases, not every possible configuration.
For features not included: eject and configure yourself. Or use different starter.
The Trade-off
Create React App trades flexibility for simplicity:
Pros:
- Zero config for most projects
- Updates happen via
react-scriptsversion bump - Consistency across projects
- Onboarding is trivial
Cons:
- Can't customize without ejecting
- Ejecting is one-way, loses update path
- Opinionated choices might not match your needs
- Not suitable for complex requirements
For typical SPAs, the trade-off is good. For edge cases, other tools work better.
The Update Story
Traditional approach: copy starter project, modify config, never update tooling again. Config diverges, maintaining build gets painful.
Create React App approach: zero local config means updates are npm update react-scripts. Tooling improvements land automatically.
This is significant. Keeping tooling current has been unsolved problem. Create React App's abstraction makes updates trivial.
Comparison to Other Starters
Many React starters exist:
- react-boilerplate: More features, more complexity
- react-starter-kit: Includes SSR
- next.js: (Just released) Full framework with SSR
- nwb: Similar zero-config approach
Create React App's advantage is Facebook backing. It's official, maintained, and will evolve with React ecosystem.
The Philosophy Shift
Create React App represents philosophy shift: prefer convention over configuration.
This is common in other ecosystems:
- Rails: Convention over configuration
- Ember: Strong conventions
- Create React Native App: Same approach for React Native
JavaScript ecosystem historically valued flexibility over convention. Create React App pushes back: maybe conventions are better for most projects.
Who This Helps Most
Create React App is valuable for:
- Beginners learning React
- Experienced developers starting new projects
- Teams wanting consistent tooling
- Prototypes and experiments
It's less useful for:
- Projects with unusual requirements
- Teams with established custom tooling
- Applications needing server-side rendering
- Projects where control matters more than convenience
Looking Forward
Create React App's success or failure will influence JavaScript tooling broadly. If it works, expect similar zero-config tools for other frameworks.
The trend is toward abstracting complexity. webpack 2 improved defaults. Parcel (future) promises zero config. Tools are recognizing configuration burden is problem worth solving.
Whether this helps or just hides complexity that needs understanding is debatable. But for getting started quickly, Create React App is substantial improvement.
Resources: