Starting a React application used to require days of manually configuring tools like Webpack, Babel or ESLint. Over time, preconfigured templates appeared, followed by build tools that hide complexity, and eventually meta frameworks that provide routing, hybrid rendering and support for React’s most advanced features, all in a single package. This article traces that evolution: boilerplates, Create React App, Parcel, Vite, Next.js and others, so you can evaluate which option fits your next project best and how the choice varies depending on scale and goals.
Back in 2015, starting a React application meant deciding from scratch which version of Babel to use, how to integrate ESLint, which Webpack rules to apply… The result: several days of work before writing the first line of UI code.
This led to memes like this one circulating on Twitter:

In response, empty but preconfigured repositories began to appear. A notable example was Max Stoiber’s react-boilerplate. Copying a boilerplate saved time, though it came with two common drawbacks:
In 2016, the React team released Create React App (CRA). Its key innovation was hiding almost everything inside the react-scripts dependency. The initial directory remained clean, and if someone wanted to use Sass or run tests with Jest, installing the corresponding dependency was enough, since the configuration was already handled.
Several bundlers have taken over from CRA by offering zero initial configuration and minimal startup times.
A meta-framework extends an existing framework with production-ready features such as routing, hybrid rendering, performance optimizations, and more.
All these options share React as their foundation, so moving an application from one system to another is usually feasible. Entire sites have, for example, migrated from Gatsby to Next.js without major rewrites. The practical takeaway is: don’t get stuck comparing options, start with the one that fits best, and refactor later if needed. That’s usually the winning strategy.
The community has come a long way since the days when every developer assembled their own toolchain. Today, we have solutions ranging from minimalist bundlers to full-fledged production-ready platforms. Assess the project’s complexity, desired performance, and acceptable learning curve, and choose accordingly. Switching will always be possible, but the time not spent configuring tools can be used to create real value for users.