Next.js vs. Gatsby vs. Create React App


Jonathan Wong / November 12, 2019

3 min read––– views

Next.js Trend

It's never been a better time to learn React. If you're just getting started, you might have heard about these three options:

However, it's not exactly clear when or why you would choose one over the other. This post will highlight the key similarities and differences between the three solutions.


Next.js is the React framework that evolves with your product.

  • Static Sites – Blazing-fast JAMstack websites.
  • Server Side Rendering – Great for SEO and load performance.
  • Pre-Rendering – Best of both worlds. Blazing-fast website + scale traffic effortlessly.

Next is unique among front-end and JAMstack frameworks because it seamlessly allows developers to grow from static sites to server-rendered sites as requirements change. It's also rapidly growing in popularity.

  • 350k+ Next.js devs (30% of all React devs)
  • 60+ Alexa top 10k sites built using Next.js
  • Over 35,000 production sites
  • 300k weekly NPM downloads
  • Used by companies like Nike, Uber, Hulu, Twitch, and GitHub


  • ✅ Server-side rendering out of the box
  • ✅ Support for full applications, as well as static sites
  • ✅ Built-in TypeScript support
  • ✅ Incredible developer experience


  • ⛔️ Framework-specific knowledge (_app.js, _document.js)
  • ⛔️ No plugin system (yet)
  • ⛔️ Server-rendering adds complexity


The key difference between Next.js and Gatsby is that Gatsby doesn't use a server. While Gatsby's main use case is for static sites, it can also re-hydrate into a fully-functional React application. Many other Next.js vs. Gatsby comparisons miss the fact that Next.js can also be used as a static site generator.

Gatsby comes bundled with GraphQL for data fetching. Here's a short example.

import React from 'react';
import { graphql } from 'gatsby';

const HomePage = ({ data }) => {
  return <div>{}</div>;

export const query = graphql`
  query HomePageQuery {
    site {
      siteMetadata {

export default HomePage;

You can use Gatsby without GraphQL if you absolutely must/want, but it's one of the key features it promotes.


  • ✅ Robust plugin library
  • ✅ GraphQL integration
  • ✅ Well-written documentation & tutorials


  • ⛔️ GraphQL knowledge potentially needed
  • ⛔️ Potentially large build times (e.g. lots of images/fetches)

Create React App#

CRA helps you get started building React apps immediately with client-side rendering (CSR). There's much less to digest and understand. Unfortunately, that also means there's less you get for free as you scale your application.


  • ✅ Easiest to learn (no extra framework)
  • ✅ Created & maintained by React team
  • ✅ Built-in TypeScript support


  • ⛔️ No server-side rendering
  • ⛔️ No code-splitting out of the box (can be configured)
  • ⛔️ Requires client-side routing library (e.g. React Router)
  • ⛔️ "Ejecting" for custom use cases can add complexity


Still not sure which one to choose? I would highly recommend reading Rendering on the Web for a deep-dive on where your rendering logic should live.

Rendering on the Web

Discuss on TwitterEdit on GitHub
Spotify album cover