Summary:Next js introduced static site generation feature in 2020 which means it is also a static site generator and an alternative to GatsbyJS. Here is a detailed comparison which will help you to choose between Next.js and GatsbyJS.
I published a post about the pros and cons of static site generators and mentioned that I was playing with Next.js and GatsbyJS. Both are popular and there are many differences and similarities between them.
Both of them are React.js toolkits for building modern applications with extended features. They are getting more popular for modern world web development.
It is hard to choose between Next.js and GatsbyJS for a project because they are similar in most features and use cases. Both of them are in rapid development with new features and fixing the problems.
I have tried to cover all points which will help you to decide between GatsbyJS and Next.js for a specific project.
What is Next.js?
Next.js is a popular React.js framework for server-side rendering. Generally, it requires a Node.js server but things are changed and we have options for the build.
In 2020 it is not limited to server-side rendering only, Next.js is also capable of exporting static sites like other static site generators. It means that we can easily host the exported sites to any CDN's without Node.js server.
In short, Next.js is a server-side rendering framework for React.js which is also a static site generator. We can choose to use SSR (server side rendering) or static site according to our need.
What is GatsbyJS?
GatsbyJS is a popular static site generator. It does not need any server to run. GatsbyJS is only meant to export static site and forget.
Static site generator generates static HTML pages on the build time. After new update in the source a new build is triggered.
GatsbyJS is popular for its themes and plugins collection which are very easy to use. There is a plugin for every problem from SEO to image lazy loading.
It uses GraphQL to query data from multiple sources like the file system and CMS API. With the introduction of incremental build feature, it has no more scalability issues and has a bright future.
Similarities between Next.js and GatsbyJS
Next.js and GatsbyJS are similar in many ways as mentioned below.
Create Single Page Applications (SPA)
Both of the toolkits create single-page applications which are obvious because they are based on React.js.
The single-page applications have an advantage that only required components need to update at each page which saves bandwidth and provides flash loading speed.
Static site generation
Next.js was primarily an SSR framework for React.js but with version 9.3 it introduced static HTML export feature.
Now, both GatsbyJS and Next.js are static site generators.
This is an amazing feature which is going to change the future of Static Site Generators.
Incremental build means only the updated pages will be build.
Both Gatsby.js and Next.js are optimized for SEO.
GatsbyJS is a bit ahead in terms of simplicity in implementing SEO because of its plugins. Next.js has also incredible features like server-side rendering, prefetching, prerendering which provides SEO benefits.
As both are able to export custom HTML pages which we can easily host on any CDN to achieve very fast loading time. It is also an SEO advantage because Google officially announced page loading speed as a critical SEO factor.
Differences in Next.js vs GatsbyJS
Next.js is capable of server-side rendering which provides huge scalability advantages as compared to GatsbyJS.
GatsbyJS, on the other hand, is only a static site generator which does its job best but lacks server-side rendering. There are other ways to achieve high scalability like real-time data fetching but GatsbyJS is not a best fit for that purpose.
Plugins and Themes Ecosystem
GatsbyJS has a huge advantage of plugins and themes ecosystem which makes it very simple to use.
There is a plugin for SEO, analytics, image optimization, lazy loading images, table of contents and much more.
Next.js also has plugins but very low as compared to GatsbyJS.
GatsbyJS primarily recommend using GraphQL because it is optimized for the same. Several features like incremental builds are dependent on GraphQL.
You can also use REST API's with GatsbyJS but it comes with some disadvantages like speed, performance, lazy loading.
In Next.js we can use any data source which we want. For example, I am using REST API's to source data to Next.js static site export on one of my side projects and it works best.
Choose Next.js or GatsbyJS in 2020
Now the biggest question is that Next.js or GatsbyJS for next project. Here are the factors which will help you to decide with examples.
When to use GatsbyJS?
GatsbyJS is best to use with a website which will not grow to be an encyclopedia.
If your website has less number of authors and new contents are published once or twice a day then GatsbyJS may be fine.
There is no theoretical limit on the number of posts GatsbyJS can handle but I have observed to use GatsbyJS only for websites less than 10k pages or posts.
The major problem with GatsbyJS is the build time. Incremental build feature will definitely solve this problem but the future is yet to come because Incremental builds are in Beta right now.
When to use Next.js?
Next.js is best to use for server-side rendering. If your application grows quickly like a multi-author blog with hundreds or thousands of posts daily.
You can also use it as static site generator to export your site as static HTML pages. But again build time would be a problem until incremental build gets mature.
Next.js provides the best scalability solution with all SEO benefits in a React.js application.
There is a downside that you need a powerful server to process a large site for better performance.
The major difference between Next.js and GatsbyJS is that Next.js is scalability, themes, plugins and community. Next.js is well suited for scalable applications while GatsbyJS is best for rapid development because of lots of plugins and themes for small applications like a personal blog.
For HolyCoders I am moving ahead of developing a new architecture with Next.js. The reason is I need a scalable architecture with various contents.