The Most Popular Node.js Frameworks in 2023

Node.js remains the most popular JavaScript runtime after years of steady reign. But the landscape of Node.js frameworks has changed dramatically in recent history. More and more frameworks are built as hybrid (meta) solutions, catering not only to back-end but also full-stack developers. This article addresses the current trends, and explores the most popular Node.js frameworks.

The Most Popular Node.js Frameworks

Express.js is as old as Node.js, and while Express is still a phenomenal back-end framework, a new breed of tools and kits is leaving its mark.

Most notably, the trend has shifted towards meta frameworks, where a popular framework like React is repurposed to support full-stack development. The advantage of this approach is that you can maintain your expertise in a specific framework and simultaneously work on back-end stuff. In other words, do full-stack development.

How was this data sourced?

All data has been sourced from surveys such as the State of JavaScript, Stack Overflow Developer Survey, and personal experience working with various projects. This is not a review based on which Node.js framework has the most GitHub stars.

Instead, I've compared the number of stars gained in the past year. This is a solid indicator of how active a certain project is and how well developers respond to it.

If you want to try any of these frameworks in a real-time environment, check out my article on hosting platforms for developers. Each platform has a free plan, and almost all of them let you import a GitHub repo and host it directly. 

E.g. You can take any repo and have it live in a matter of minutes.

You'll notice throughout this post that many of the frameworks mentioned in this article are based on top of a front-end framework. This is also referred to as a meta-framework. So, what's the deal with this, and why this approach?

If we look at something like React, the way it renders a page is done through CSR - Client-Side Rendering. Once a request is made, the browser is given a barebones HTML file without the actual page content. So, the browser makes a second-round trip to get the JavaScript document that contains the page content, then delivers it and renders the actual page.

And this will keep happening every time the user interacts with the page. Even though the HTML remains as is, different route requests mean the browser must keep going back and forth to render the content the user wants.

This is also often referred to as SPA or a Single Page Application.

And here are the downsides to this - CSR - approach:

  • Caching - Since all the page content is rendered through JavaScript, there is no actual HTML content on the page that can be cached.
  • SEO - While crawlers are getting "smarter", there are definitive issues with having robots index content dependent solely on JavaScript.
  • Rendering - The initial render is often slow and non-responsive until all the JavaScript has finished loading.

So, in this context, the idea behind frameworks like Next and Nuxt is to take the front-end framework, but give it SSR (Server-Side Rendering) through Node.js.

Speaking of SSR - Nick Johnstone published an interesting gist titled, "The absurd complexity of server-side rendering". And there is also a corresponding Hacker News thread with quite a lot of discussion on the topic. While not much will change in the near future, I believe some of these concepts will drive a significant change in how some frameworks operate.


#1 - Next.js

Next.js by Vercel

More than being a React Framework - Next.js keeps growing in popularity thanks to an absurdly high development pace. Next.js 10 to Next.js 12 took only a year.

The core concept behind Next.js is that it uses React as the foundation, but performs all the server-side rendering structure through its own specification. Because rendering is done server-side, you don't have to render pages on the client-side, providing enormous performance benefits and SEO where it is concerned.

One of the reasons why Next has seen such mass adoption is that it eliminates the need to build your own back-end. All the while, providing meaningful ways to optimize the performance of your apps out of the box. Vercel maintains it.

#2 - Nest

NestJS

NestJS has quietly managed to attract significant approval from the back-end community. One of the main philosophies behind Nest is that while frameworks like React accelerate front-end development, many such frameworks struggle to solve the application architecture issue. Nest solves this through an architecture-first approach.

Which is specific to the back-end, of course.

Nest is based on three core components (inspired by Angular) - Controllers, Providers, and Modules. The use of Modules is how Nest tries to solve the problem of complex application hierarchy. Each component can be categorized in a separate module, within which you configure its own controllers, dependencies, and specific providers.

#3 - Strapi

Strapi

Headless is all the rage in the current front-end narrative. And Strapi has done a great job at positioning itself as one of the leading Headless CMS frameworks.

So, what is Strapi? In the most practical terms, Strapi is the back-end of your front-end application. In a sense, Strapi eliminates the need for you to learn a framework like Express because it can do most of the legwork through its API.

That includes managing your content through a custom UI, on-the-fly endpoints for GraphQL & REST, user management (roles, etc.), and a separate plugin interface you can build upon. Strapi is completely framework-agnostic and integrates with practically any language, framework, or front-end library.

#4 - Remix

Remix

Remix is a full-stack framework built by the people who made React Router.

I believe Remix is also one of the fastest-growing full-stack frameworks we've seen in recent years. So, how come? For one, Remix tries to integrate as much as possible with Web Standards by providing concise APIs for common status codes and user interactions.

Unlike a traditional framework, Remix doesn't create waterfall (component) based structures. Instead, the data is loaded in parallel on the server-side and then served as an HTML page. This also means that JavaScript-based features (like form submissions) won't break the site if the user has JavaScript disabled.

#5 - Nuxt

NuxtJS

Nuxt 3 (for Vue 3) is in open-beta: keep an eye out.

Nuxt builds on Vue as a full-stack framework for building robust applications. It's also a meta-framework, created to improve the experience of full-stack Vue development drastically. Nuxt supports SSR, SPA, and Static Generated Pages.

The main advantage for Vue developers is that Nuxt can pre-render views and serve them as static files. This naturally has great results for SEO optimization and provides a significant boost in interactivity. But there are some downsides, too.

Whereas Vue has a persistent client-side channel, Nuxt doesn't. So, interacting with the DOM after Nuxt has already rendered the page might prove difficult.

#6 - SvelteKit

SvelteKit

Svelte has the cool kid status in the current front-end era, and the team is working on SvelteKit - a full-stack framework that builds on top (replaces it) of Sapper. SvelteKit stands out with an intricate file-based routing system.

The primary goal of SvelteKit is to accelerate web development by removing some of the more common bottlenecks. By implementing Snowpack, Vite, and other external tools - SvelteKit can provide a feature-rich development experience.

Lastly, SvelteKit implements the process of Hydration. The ability to retain active state for DOM elements that have been server-side rendered.

#7 - Fastify

Fastify

The Fastify framework is all about performance, and individual benchmarks have shown it can handle up to 60,000 requests per second. You can extend Fastify (on top of already great tooling) through Hooks and Plugins. And, despite not being a TypeScript-first framework, Fastify does support TypeScript.

Speaking of Plugins, a lot of Fastify development happens through them. So much so that Fastify has an official repository for both community-made and plugins made by the Fastify team. The idea behind plugins is that it provides a clean system architecture, and removes the need to jump to alternative frameworks. This makes Fastify particularly useful for building low-overhead APIs with strong real-time performance.

#8 - Redwood

Redwood

Do you love APIs? Do you like JAMStack? If the answer is yes, you are going to love RedwoodJS. It's a full-stack web app framework utilizing a lot of modern technologies. And those technologies include GraphQL, Prisma, Storybook, and Jest. The front end in Redwood is built on top of React, and you also get full-on TypeScript support.

The framework has a powerful routing system and a declarative approach to provide a smooth developer experience, allowing you to build web applications quickly and easily. Additionally, Redwood's modular architecture allows you to scale your application as it grows, ensuring that it remains performant and maintainable.

#9 - Express

Express Node.js Framework

Has Express fallen from grace? Not exactly. The framework is still extremely popular and loved, just not as much as the other big players. For a team that has been working with Express for years, it doesn't make sense to switch to something else since there aren't any fundamental issues. A lot of frameworks still build upon Express.

With Express, you can easily define routes and handle HTTP requests, making it a great choice for building APIs and other web-based applications. And it is highly extensible, with a wide range of plugins and middleware available to add extra functionality. Express is also (to this day) the primary framework that MDN uses for its Node.js tutorials, so if you're a complete beginner - it's super quick to learn the basics.

#10 - Adonis

Adonis

Adonis is a TypeScript-first back-end MVC framework built for Node.js. Keep in mind that despite Adonis describing itself as a back-end framework, it's just as fine to do full-stack development with it.

One of the key reasons developers love Adonis is its native support for TypeScript.

But also, support for ORM (Object Relational-Mapping), strong security practices, and easy-to-follow documentation.

Last but not least, Adonis integrates with the Node.js ecosystem on a fundamental level, so having prior experience in Node development is pretty much a must-have.

#11 - Keystone

Keystone

The last Node.js framework in this list is Keystone. And much like Express, it has been around almost since day one. This makes Keystone a mature framework, providing concrete tooling and integrations to create a developer-friendly experience.

Some notable features (many of which have been refined over the years) in Keystone include automated CRUD through the GraphQL API, which you can further extend. Additionally, you can create and implement your own React.js components.

Keystone is used in various development fields and works fine with mobile apps, practical websites, eCommerce storefronts, and much more.

Meta, native, and a pinch of Headless

It has been quite a while since I last did an overview like this. Things were a lot simpler back then, and while Compound and Locomotive are nowhere to be found, it's nice to see Keystone and Express make their way through the test of time.

I can also say that there's quite a bit of buzz surrounding Node.js. I do believe some people are unhappy and feel stuck with it. And the idea of package managers (npm) is also starting to grow old as packages keep adding piles upon piles of unnecessary bundle sizes to an otherwise small-scale project.

But, whatever the case may be, each framework's popularity speaks for itself. Overall, developers are happy to work with meta frameworks, and it might have to do with the fact that it also streamlines full-stack development. This mostly eliminates the need to relearn a new favorite framework from scratch.