Library / SDK
nuxt/nuxt avatar
nuxt/nuxt

Nuxt 4: The Full-Stack Vue Framework That Decides How You Render

Nuxt is a free, open-source full-stack Vue framework offering server-side rendering, static generation and hybrid modes with auto imports and zero-config TypeScript.

61,067 stars5,839 forksTypeScriptMIT

At a glance

What is it?
Nuxt is a TypeScript-based, MIT-licensed framework that turns Vue into a full-stack tool with server-side rendering, static generation, and a server/ directory. The core judgment: it solves routing and rendering complexity, but you must accept its conventions and its fast-moving major version.
Who is it for?
Adopt Nuxt if you build Vue applications that need server-side rendering, static generation, or a built-in server layer, and if you are comfortable with a framework that dictates file conventions and auto-imports. Skip it if you want minimal abstraction over Vue or if your team prefers explicit control over routing and data fetching.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on November 13, 2026, and from our analysis. They are not legal advice.

From daily snapshots

Star history

  • nuxt/nuxt61,067 ★ · +372
Star history
Repository2026-07-282026-11-13
nuxt/nuxt60.7k61.1k

372 Stars in the last 108 days, measured from the daily GitHub snapshot. Compare with other projects

Editorial analysis

What Nuxt Actually Solves

Nuxt addresses the gap between Vue as a client-side library and the needs of a production web application: SEO, performance, and server-side logic. If you use plain Vue, you must assemble your own router, decide on a rendering strategy, and build a separate backend for any server work. Nuxt bundles those decisions into one framework. It gives you server-side rendering, static site generation, hybrid rendering, and edge-side rendering as built-in options. The README also lists automatic routing with code-splitting and pre-fetching, data fetching, state management, and a server/ directory for full-stack work. The target user is a Vue developer who wants to ship a complete application without stitching together multiple libraries. It is not for someone who wants to keep Vue as a thin view layer.

The Rendering Strategy Is the Core Mechanism

Nuxt does not force one rendering mode. The README lists four: server-side rendering, static site generation, hybrid rendering, and edge-side rendering. That is the central architectural choice. You can pre-render pages at build time, render them on a Node server per request, or push rendering to a CDN edge. Hybrid rendering means you can mix these per route, which is a real differentiator over a static-only generator or a pure SPA. The framework handles the transition between client and server, so your Vue components run in both environments. The data fetching and state management features are designed around that duality. This is not a theoretical option list; it changes how you deploy. A static site can go to any CDN, while server-side rendering requires a Node runtime. Edge rendering requires a platform that supports it. The README points to a deployment page for hosting options, but the choice of rendering mode is the first constraint you must settle.

Getting Started: One Command and a Convention-Heavy app.vue

The README gives a single command to start: npm create nuxt@latest <my-project>. That creates a starter project with all necessary files and dependencies. The example app.vue file shows the core conventions. It uses <script setup lang="ts">, meaning TypeScript is the default. It calls useSeoMeta to set the title and description. The template includes <AppHeader />, <NuxtPage />, and <AppFooter />. Those components are auto-imported; you do not write an import statement. NuxtPage is the routing outlet, replacing Vue Router's <router-view>. This is a convention-heavy framework. You do not configure the router; you create pages in a pages/ directory and Nuxt generates routes. You do not import components; you place them in components/ and they become available. That reduces boilerplate but hides the wiring. If you are new to Nuxt, you must learn these implicit rules before you can debug why a component is not found or why a route does not exist.

The server/ Directory Turns Vue Into a Backend Framework

The README explicitly says 'Go full-stack with our server/ directory.' That is a significant shift from Vue's client-only heritage. You can write API endpoints in the same project as your Vue components. The server/ directory is a convention where files become routes, similar to how the pages/ directory works. This means you can handle form submissions, authentication, or database queries without a separate backend service. The data fetching features on the client side are designed to call these server routes. The trade-off is that your deployment target must support a Node server or an edge runtime. A static host like GitHub Pages cannot run server routes. This is where the hybrid rendering option matters: you can pre-render static pages and still have server routes for dynamic data. If you need a full-stack framework in one codebase, this is the feature that justifies Nuxt over a static site generator.

TypeScript Without Configuration, But With a Learning Curve

The README claims 'TypeScript with zero configuration.' The example uses lang="ts" in the script block, and the framework handles the rest. That is a genuine convenience for teams that want type safety without setting up tsconfig, vue-tsc, or path aliases manually. However, zero configuration does not mean zero understanding. You still need to know how Nuxt's type generation works, especially when you create custom composables or modules. The auto-import system means types are resolved globally, which can confuse developers who expect explicit imports. For a new user, the initial setup is fast, but debugging type errors that stem from Nuxt's generated types can take time. This is a trade-off: less config, more magic.

Extensibility Through Modules, But Verify Compatibility

Nuxt has a module system, and the README links to a list of 300+ modules. These modules add functionality like UI libraries, content management, or authentication. The module system is a reason to choose Nuxt over a manual Vue setup, because you can install a module instead of writing integration code. But the number 300+ is a marketing figure, not a quality metric. You must check whether a module supports your Nuxt version. The recent releases are all in the 4.x line (v4.6.4, v4.6.3, v4.6.2), so check that a module supports your Nuxt major version. The README does not state which modules are compatible with which version. Before adopting, you should verify that every module you need has a version matching your Nuxt major. This is a real maintenance cost, because the framework moves fast and module maintainers must keep up.

Limitations: Convention Lock-In and Version Churn

Nuxt's biggest limitation is that it owns your application structure. The auto-imports, the pages/ directory, the server/ directory, and the app.vue entry point are all conventions. If you want to deviate, you fight the framework. This is the wrong tool for a project that needs a custom build pipeline or a non-standard directory layout. Another limitation is the rapid release cadence. The recent releases are v4.6.4 on 2026-11-02, v4.6.3 on 2026-10-27 and v4.6.2 on 2026-10-16, which indicates active development but also means frequent changes. Upgrading between minor versions can introduce breaking changes, and major version upgrades require migration work. For a long-lived project, you must budget time for upgrades. The framework's benefits come at the cost of being tied to its release cycle.

Alternatives: Compare With Vite and a Hand-Rolled Stack

The most direct alternative is to use Vite with Vue Router and a separate backend. Vite gives you fast development and build tooling, but you must configure SSR yourself if you need it. You would add vue-router for routing, a state library like Pinia, and a Node server for API routes. That approach gives you full control over every piece, but it means assembling and maintaining the integration. Nuxt is the opposite: it provides the integration out of the box, but you accept its choices. Another alternative is a static site generator like Astro, which also supports Vue components but focuses on content-heavy sites with minimal JavaScript. Astro's island architecture differs from Nuxt's full-app hydration. If you need a marketing site with a few interactive components, Astro is lighter. If you need a full application with server logic, Nuxt is more complete. The choice depends on whether you want control or convenience.

Maintenance and License: MIT and a Dual Release Line

Nuxt is licensed under MIT, which the README confirms. That means you can use it commercially, modify it, and redistribute it without paying a fee. There is no copyleft obligation, which is a low-risk license for most companies. The maintenance picture is more complex. The repository is actively maintained: the last push was on 2026-11-02 and the latest release is v4.6.4. The README lists professional support through Nuxt Experts and agency partners, which suggests that the maintainers treat enterprise adoption seriously. In short, the license is permissive and the project is alive.

Editorial conclusion

Adopt Nuxt if you build Vue applications that need server-side rendering, static generation, or a built-in server layer, and if you are comfortable with a framework that dictates file conventions and auto-imports. Skip it if you want minimal abstraction over Vue or if your team prefers explicit control over routing and data fetching. Before adopting, verify that the Nuxt version you target (v3 or v4) matches your hosting platform's support for Node server routes or edge rendering, and check the module ecosystem for any dependency you require, since not all Vue libraries have Nuxt wrappers.

Frequently asked questions

What is Nuxt used for?

It is the full-stack Vue framework, used to build server rendered, statically generated, hybrid or edge rendered applications. It also handles automatic routing with code-splitting and pre-fetching, data fetching, meta tags and auto-imports of components, composables and utils.

Is Nuxt free to use?

Yes. The repository carries the MIT licence and the README links the MIT licence text. There is no paid edition mentioned; commercial support is offered separately through the Nuxt Experts and agency partner pages.

What is the difference between nuxt generate and nuxt build?

Both appear in the framework's own scripts against the same playground directory: play:build runs nuxt build playground and play:generate runs nuxt generate playground. Static site generation and server-side rendering are named as separate capabilities in the feature list, and the README links a hosting platforms page.

Should I start on Nuxt 3 or Nuxt 4?

The most recent releases are v4.6.4 (2026-11-02), v4.6.3 (2026-10-27) and v4.6.2 (2026-10-16). The documentation links in the README point at the 4.x path, so read the difference between the two lines before pinning one for a long lived project.

Is it called Nuxt or Nuxt.js?

The project brands itself Nuxt and the homepage is nuxt.com, with documentation under nuxt.com/docs. A new project is created with npm create nuxt@latest.

Official sources

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
Community

Where developers are discussing it

Posts on Hacker News, dev.to and Lobsters that link to this repository, found by our scan of those communities. 1 in the last 30 days; newest first.

Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/nuxt-nuxt.svg)](https://hysenlabs.com/projects/nuxt-nuxt)

Star history chart for your README

markdown
[![Star history](https://hysenlabs.com/chart/nuxt-nuxt.svg)](https://hysenlabs.com/projects/nuxt-nuxt)

Was this useful?