Gatsby Vs. Next JS
Next.js vs Gatsby, what to choose? This is an age-old question many developers have to ask whenever they start a new React application.
Over the years, they have learned from each other and become very similar to each other when it comes to feature-set. Although we (kind of) talked about both in React static site generators post here we take a deeper look from an eCommerce perspective.
So, which framework to choose in 2022?
Gatsby started in 2015 as a Node-based static site generator technology on top of React and GraphQL. To be fair Gatsby allows you so much more than just outputting static HTML files as it allows you to build complex websites and web apps, but we’ll get to that. Gatsby is backed by Gatsby Inc. which provides hosting for Gatsby sites and applications.
Over the years, Gatsby.js has grown from a static site generator to a React meta-framework that enables developers to build both static pages as well as dynamic applications. The growing adoption of Gatsby is owed much to its growing Plugin and Starters ecosystem purposely build for integration solutions with third-party platforms and solutions. On top of it a recent release of Gatsby v3 and v4, it introduced support for serverless functions and the ability to server render pages.
Gatsby and Crystallize work great together. You can use gatsby-source-graphql to pull data from Crystallize Catalogue GraphQL API into Gatsby's data layer. Beyond that, since you're using GraphQL for everything already, you don't have to switch context whether you're working with Gatsby GraphQL data or Crystallize Search, Order, or PIM API.
You can also grab one of the open-source Gatsby eCommerce boilerplates built to have your storefront set up in a matter of minutes.
Next.js was first released in 2016 as a React static site rendering framework to simplify SSR, routing, data fetching, and overall configuration. Think of it as an all-in-one full-stack modern application building solution. Next.js is developed and backed by the people at Vercel which is one of the top hosting platforms at the moment that enables frontend teams to build and ship great web projects.
Going from the other side of the spectrum, since the release, Next.js has added the static generation aspect just like Gatsby. On top of that, Next.js has doubled down on developer experience, providing a great ergonomics framework that enables front-end developers to build powerful applications.
Just like Gatsby, Next.js also works great with Crystallize. In fact, most of us here at Crystallize are big Next.js fans. Hence a bunch of Crystallize and Next.js eCommerce boilerplates you can check out to see how to integrate the two together or kickstart your next web project, whether it is a classic eCommerce store, modern-day SaaS business, or a conference.
On top of that, updating and upgrading a tech stack is an ongoing process, and lately, we’ve implemented changes to ours by moving our codebase to Typescript and replaying on Turborepo.
Similarities
Gatsby and Next.js are quite similar in nature. They're both meta frameworks powered by React. On the surface, the developer experience may be quite similar with the same features like file-based routing system, server-side rendering, static site generation, and even some optimization on top of that with DSG from Gatsby and ISR from Next.js.
Differences
At their core, Gatsby, and Next.js differ in their philosophy.
Next.js places heavy focus on developer experience and pioneers SSR with React.
- Working on Rust compiler to decrease build-time
- Introducing Middleware on top of Cloudflare Workers for globally-distributed SSR
Gatsby's best selling point is its GraphQL data layer. They introduce the concept of the content mesh, which enables developers to build websites with data from several different data sources (CMS, e-commerce systems, APIs).
- Plugin system
- Theme system
Another subtle point to mention is how Gatsby and Next.js help developers with images. Before we get to this point, let's categorize different types of images that developers need to handle when building on the web:
1. static, local images within the codebase
2. images from a remote location, most likely a CMS like Crystallize
3. user-generated images like user avatar, etc
Both Next.js and Gatsby provide a great image handling experience for the 1st category. With its powerful build-step, Gatsby enables developers to download remote images for image processing while Next.js doesn't quite provide the same level of support. Although this creates a tradeoff of build-time as the more images you want to process, the longer it will take to build your website. For the last category, neither Gatsby nor Next.js provides a solution for that yet.
Server-Side Rendering. Client-Side Rendering. CSR with Prerendering, etc. The differences, trade-offs, and similarities between most common web rendering solutions and why you should care about them as a dev in our practical guide to web rendering.
Gatsby and Next.js are fantastic frameworks, and you really can't go wrong with either. If you haven't already, you should give each of them a try and see which feels better for you.
If you need to process images from a remote location, consider giving Gatsby a try and see if you can make it work for you. Definitely check out Gatsby Cloud as well as it can provide the best build optimization to speed up the time it takes for your website to deploy.
Gatsby and Next.js should both work great for ecommerce projects. Some details that differentiate them are their learning curve and how it works with your existing stack.
As mentioned above, Gatsby has its data layer which increases its learning curve quite a bit. You can get started quickly but in order to fully utilize the power of the data layer, you may need to dive into how things work, which may take some time to explore. On the other hand, Next.js provides a thin API surface on top of your typical React application, which allows developers to get up and running quicker.
On the other hand, once you’re productive with the Gatsby data layer, it may pay off for the right project. The GraphQL data layer is super robust and enables you to pull data together from many different sources. For example, if you have an ecommerce website that has your product information from Shopify, your landing page content from Contentful, your blog articles from WordPress, your FAQ content from Zendesk, etc, Gatsby would be a fantastic solution. Else, if you happen to have all your product, content, articles, etc in a platform like Crystallize, then both Gatsby and Next.js would surely work.
Personal preferences aside, a good rule of thumb to think about Gatsby and Next.js:
- Gatsby is better if you work with different data sources and can utilize the data layer and its plugin ecosystem.
- Next.js is great if you look for a React meta-framework with a lightweight API surface that enables you to build dynamic server-rendered and static pages.
But like I said, you can't really go wrong with either!