Just Fucking Use Nuxt.
Build the Vue app you actually came here to build.
Your Vue project is becoming a pile of decisions.
- Which router?
- Which state setup?
- SSR, SSG, SPA, or edge?
- API server or separate backend?
- SEO, data fetching, image handling, deployment?
- Which five plugins will quietly become infrastructure?
Nuxt handles the boring decisions so you can focus on building.
What the fuck is Nuxt?
Nuxt is Vue with the boring, necessary parts already connected: routing, rendering, server endpoints, data fetching, SEO, TypeScript support, and deployment.
You still write Vue. You just stop rebuilding the framework around it.
Zero configuration
Rendering modes
Routing and layouts
Data fetching
Error handling
Transitions
Assets and style
SEO and metadata
Modular by design
Middleware
Type-safe by default
Stop assembling a framework.
Vue gives you an excellent view layer. A production application needs more than a view layer, so the same integration checklist appears in project after project.
Nuxt turns that checklist into conventions you can understand at a glance.
| Starting from Vue | With Nuxt conventions | Example |
|---|---|---|
| Install and configure a router | Create a page | app/pages/about.vue |
| Choose a pattern for server data | Use an SSR-aware composable | useFetch('/api/products') |
| Create and connect a separate API project | Add a server handler | server/api/orders.post.ts |
| Stitch together SEO tooling | Define typed metadata | useSeoMeta({ title }) |
| Commit to one rendering strategy | Choose what each route needs | routeRules: { '/blog/**': { swr: 3600 } } |
| Rework the output for each host | Build portable Nitro output | nuxt build |
Create a page. You have a route. No router ceremony, no extra wiring.
<script setup lang="ts">
const { data: products } = await useFetch('/api/products')
</script>
<template>
<ProductGrid :products="products ?? []" />
</template>
Need an endpoint? Put it beside the app that calls it.
export default defineEventHandler(async (event) => {
const order = await readBody(event)
return { accepted: true, order }
})
Need a route to behave differently? Say so, once.
export default defineNuxtConfig({
routeRules: {
'/blog/**': { swr: 3600 },
'/admin/**': { ssr: false },
},
})
Nuxt does not make your application simple. It stops the setup from becoming an application of its own.
Nuxt Modules are fucking goated.
Nuxt covers the foundation. Modules add the good stuff without making every integration a side quest. They plug into the framework, and it just works.
Nuxt UI
Nuxt SEO
Nuxt Tailwind CSS
VueUse
Nuxt MCP Toolkit
NuxtHub
Nuxt is already in production.
Nuxt is not a clever experiment waiting for a real-world test. It is already doing the work for global brands, technology companies, and public organizations around the world.
Global brands
Technology companies
Public organizations
- Louis Vuitton
- Armani
- The North Face
- GitLab
- Directus
- n8n
- NASA JPL
- Croix-Rouge française
- Explore France
“But isn’t Nuxt overkill?”
For a tiny static page with no application behavior, use HTML. Seriously. Nuxt is a framework, not a personality test.
But when you need routes, shared UI, real data, forms, SEO, authentication, server logic, or a growing team, the foundation starts demanding its own backlog.
Nuxt is not a pile of features you must use on day one. It is Vue with a path forward.
- Start with a single page. Run it as a client-rendered app if that is all it needs to be.
- Add a route when there is another screen. Create a file in
app/pages/, and Nuxt supplies the router. - Add server code when the app needs it. Put a handler in
server/api/, beside the frontend that calls it. - Add rendering where it earns its keep. Pre-render a landing page, server-render content that needs SEO, and keep dashboards on the client.
You scale the application, not the setup. Same project. Same Vue components. More capability only when it solves a real problem.
When should you use Nuxt?
If you are building a Vue application rather than a one-off document, stop treating the same plumbing as a rite of passage. Just use Nuxt.