What is Next.js and Why is Next 13 a game changer in 2023?

Next.js is a powerful framework that has gained a lot of popularity among developers in recent years, but what is it and how can it help your business grow?

Dan Spratling sitting in a bar window with a drink, smiling

Dan Spratling

What is Next.js and Why is Next 13 a game changer in 2023?

Published

May 22, 2023

Last Edited

Oct 19, 2023

Read Time

7 mins

Category

Jamstack

Introduction

Next.js is a powerful framework that has gained a lot of popularity among developers in recent years. It's built on top of React, the most popular JavaScript library for building user interfaces, and adds server-side rendering and other important features that make building complex applications a breeze.

In this post, I will explain what Next.js is, highlight its benefits, and dive into its architecture and features. I'll also provide you with resources to help you get started with Next.js, compare it to similar frameworks, and discuss how it can be deployed and optimized for production.

Benefits of Next.js

For Businesses

Next.js is designed to make applications easier to build and maintain for teams, while making many features more easily accessible. Out of the box it provides many benefits, including faster page load times, better search engine optimization (SEO), and improved user experience. By providing server-side rendering, Next.js enables your web pages to be rendered on the server, resulting in faster initial load times and a better user experience.

Next.js also makes it easy to optimize your web pages for SEO. By using server-side rendering, search engines can crawl your web pages more effectively, resulting in better search rankings and increased traffic to your site.

If you’re more focused on applications, it’s great for that too. With the release of Next.js v13 the app folder provides shared functionality meaning your site works more efficiently, making development easier and further improving user experience.

Next.js is the leader in the frontend framework market because of its wide and mature ecosystem, and it’s focus on how many different types of businesses might need to use it.

For Developers

Next.js makes it easy for developers to build complex web applications with React. By providing an opinionated framework, Next.js simplifies the process of building and deploying applications. Developers can focus on building their application, rather than configuring and maintaining the infrastructure required to run it.

Next.js also provides many useful features for developers, including automatic code splitting, file-based routing, and support for serverless functions. These features allow developers to build fast, scalable web applications with ease.

How Next.js Works

Next.js is built on top of React and provides server-side rendering (SSR), static site generation SSG), and other important features that make building complex applications easier. Next.js is designed to be flexible, allowing developers to use it in a variety of ways, from building simple static websites to complex web applications.

Overview of the Next.js Architecture

Next.js architecture is based on three important concepts: Pages, API Routes, and Static Files. Pages are React components that define the layout and content of your web pages. API Routes are serverless functions that provide backend functionality for your web application. Static Files are files that are served directly to the client, such as images, videos, and other assets.

💡 In Next.js 13, the app folder is preferred over the pages folder. The app folder provides similar functionality to pages, but with modern features like React Server Components optimising development builds further.

Getting Started with Next.js

You can create a new Next.js project using the following command:

npx create-next-app@latest --experimental-app

This will create a new Next.js project with all the necessary files and folders on the most recent version.

💡 Next.js v13 is still in beta. This guide talks about the benefits of v13 as they are big changes that significantly modernize the state of the web, but many of the benefits of Next.js have come from previous versions and still apply too.

Basic Project Structure

The basic project structure for a Next.js project is as follows:

- app/ // Mordern pages with new features, v13 and later
  - page.tsx
	- layout.tsx
- pages/ // Legacy pages, v12 and earlier
	- index.js
- public/
  - favicon.ico
- next.config.ts
- package.json
- README.md

The app/ directory (v13 only) is where you’ll define the bulk of your application, and is used to define pages, layouts and components. app is built to take advantage of new Next.js and React features.

The pages/ directory is where you'll define any pages for your application that can’t take advantage of v13’s new features. This folder will exist alongside app/ for some time, but cannot take advantage of more modern react features.

The public/ directory is where you'll put static files that will be served directly to the client.

The styles/ directory is where you'll put your CSS styles.

The next.config.js file is where you can configure your Next.js application. For example, you can use this file to configure your webpack configuration.

You can add additional folders to your Next.js file structure if you’d like. For example, you might want to create a components/ file, or a cypress/ file for testing. Other than a few presets, next.js is fairly unopinionated in how you structure your project.

Next.js Framework Features

Next.js comes with many powerful features that make it easy to build complex web applications.

Dynamic Imports

Dynamic imports allow you to load modules on demand, which can improve the performance of your application by reducing the amount of components loaded. In Next.js 13 dynamic imports are built into React Server Components, so unused components are stripped out during Server-Side Rendering. In 'use client' components or within the pages/ folder, you can use dynamic imports to perform a similar function by importing the next/dynamic package.

Head Tag Management

Next.js provides a <Head> component that allows you to manage the contents of the HTML <head> tag. This is useful for things like adding custom meta tags or including external stylesheets.

Image Optimization

Next.js comes with built-in support for optimizing images. When you use the <Image> component in your application, Next.js will automatically optimize the image for the device it's being viewed on.

TypeScript Support

Next.js has excellent support for TypeScript. When you create a new Next.js project with TypeScript, Next.js will automatically configure your project to use TypeScript.

Next.js Plugins and Add-ons

Next.js has a vibrant ecosystem of plugins and add-ons that extend its functionality.

For example, the next-offline plugin allows you to build offline-capable web applications with ease.

Because the Next.js ecosystem is so large, there are always new plugins, add-ons and support articles being created to help you be more efficient.

Deployment and Production

Deploying a Next.js application is easy. Next.js provides many deployment options, including serverless deployment and content delivery network (CDN) deployment.

Deployment Options

Next.js applications can be deployed to a variety of platforms, including Heroku, Vercel, and AWS Lambda. Next.js also provides built-in support for serverless deployment, which allows you to deploy your application without having to manage a server.

Optimizing for Production

Optimizing your Next.js application for production is important for ensuring that it performs well and is scalable. There are several things you can do to optimize your application for production:

Serverless Deployment

Serverless deployment is a great way to optimize your Next.js application for production. By deploying your application serverlessly, you can ensure that it scales automatically based on demand.

Content Delivery Network (CDN)

Using a content delivery network (CDN) is another great way to optimize your Next.js application for production. A CDN can cache your static assets, resulting in faster load times for your users.

Performance Optimization

There are several other things you can do to optimize the performance of your Next.js application, including code splitting, lazy loading, and caching.

Comparison with Similar Frameworks

Next.js is not the only framework for building complex web applications. There are many different opinions on how frontends should work, though many seem to be converging on a similar approach. Here's how Next.js compares to some other popular frameworks:

Next.js vs. Remix

Remix is a new framework for building web applications that was released in 2021. Like Next.js, Remix is built on top of React and provides server-side rendering. However, Remix takes a different approach to building web applications, providing a more opinionated framework.

One of the main differences between Next.js and Remix is how they handle routing. Next.js uses file-based routing, while Remix uses a centralized router. This makes it easier to manage complex routing in Remix.

Another difference between Next.js and Remix is how they handle server-side rendering. In Next.js, server-side rendering is handled automatically, while in Remix, you need to explicitly define which components should be rendered on the server.

Overall, Next.js and Remix are both powerful frameworks for building complex web applications. If you're looking for a more opinionated framework, Remix might be a better choice. If you prefer a more flexible framework, Next.js is the way to go.

Next.js vs. Gatsby

Gatsby is another popular framework for building web applications. Like Next.js, Gatsby is built on top of React and provides server-side rendering. However, Gatsby takes a different approach to building web applications, providing a static site generator.

One of the main differences between Next.js and Gatsby is how they handle data. Gatsby (almost) explicitly expects data to pass through its GraphQL layer. This is a very opinionated way of handling data and while often beneficial for developers, may not suit everyone’s needs. Next.js can accept data from any source without transforming it, making it far less opinionated when it comes to data fetching.

Overall, Next.js and Gatsby are both powerful frameworks for building web applications. If you're looking for a static site generator, Gatsby might be a better choice. If you need a more flexible framework that allows you to source data at runtime, Next.js might be the way to go.

Next.js vs. Nuxt

Nuxt is a framework for building server-side rendered (SSR) web applications with Vue.js. Like Next.js, Nuxt provides server-side rendering and file-based routing.

One of the main differences between Next.js and Nuxt.js is the underlying JavaScript library. Next.js is built on top of React, while Nuxt.js is built on top of Vue.js. This means that if you're more familiar with React, Next.js might be a better choice. If you prefer Vue.js, Nuxt.js might be the way to go.

Next.js and Nuxt also differ on how opinionated they are, with Nuxt being very opinionated in how it expects you to work providing helpers that can speed up development in some ways, but can also make other approaches difficult. Next.js in comparison very sticks to being as unopinionated as possible which can often give you more flexibility.

Overall, Next.js and Nuxt are both powerful frameworks for building SSR web applications. If you're more familiar with React, Next.js might be a better choice. If you prefer Vue.js, Nuxt.js might be the way to go.

Next.js vs. Astro

Astro is a new framework for building web applications that was released in 2021. Like Next.js, Astro is built on top of React and provides server-side rendering. However, Astro takes a different approach to building web applications, providing a static site generator.

The biggest difference between Next.js and Astro is that Astro is unopinionated about what language you choose to write your templates in. You can write in Astro’s own template language, or React, Vue, Svelte, Plain HTML, or a combination of them.

Astro has also released a stable version of dynamic islands in JavaScript, which is a very similar approach to React Server Components - building static content on the server where possible and only sending small bundles of dynamic content to the client where it’s needed. This was a big departure from the Hydration model that every framework relied on previously.

Overall, Next.js and Astro are both powerful frameworks for building web applications. Astro is a big driving force for change in the industry and as it is powered by a smaller team, allows for faster changes. Next.js on the other hand is designed to be stable, so while it might take a little longer for new features to emerge the ecosystem around it is far larger and already supporting a huge range of different types of businesses.

Conclusion

Next.js is a powerful framework for building complex web applications. It's built on top of React and provides server-side rendering, static site generation, and other important features that make building web applications easier.

If you're interested in learning more about Next.js, I encourage you to check out the official Next.js documentation and other third-party tutorials and articles. You can also take courses or read books on Next.js to help you master the framework.

Thanks for reading, and happy coding!

References and Resources

When you're ready, there are 4 ways I can help you:

1. SkywardUI (coming soon) - Speed up your development with a fully customisable UI library. Start with a strong foundation and adapt it to your needs without reinventing the wheel.

2. CTO Support - Learn where your software is holding you back and how to improve it. Get expert support from Dan to help you save money, work more efficiently and release faster

3. Hire Skyward - Bring your project ideas to life. Hire the Skyward team to drive forward the user experience of your websites & applications, and futureproof your software

4. Refer and earn - Know someone who we could help? Introduce them to us and earn 10% of the project value* once we start working together
(*up to $10,000)