Started using Nuxt because I was tired of the Vue setup dance. Every new Vue project meant configuring routing, SSR, build tools, and praying none of it exploded. Nuxt supposedly handles this automatically. Originally they copied Next.js but for Vue, which is fine - why reinvent the wheel?
The Tools Under The Hood
Three main pieces hold this thing together:
- Vue.js 3 - At least it's not React hooks hell
- Vite - Fast builds when it works, webpack replacement
- Nitro - Server thing, deploys places I guess
Deployment is pretty smooth. Tried it on Vercel, Netlify, AWS Lambda, and a random Digital Ocean droplet. Usually just npm run build
and hope for the best. Beats fighting with Next.js deployment configs for hours.
What Doesn't Suck About It
File-based routing finally works. Drop a pages/user/[id].vue
file and get /user/123
routes. No React Router bullshit, no manual configuration. Nested routes? Use folders like a normal human. Someone actually thought about developer experience.
Data fetching mostly works. useFetch
and useAsyncData
work on server and client when they feel like it. Beats the Next.js getServerSideProps
vs getStaticProps
guessing game. Sometimes the caching works, sometimes it doesn't and you clear everything and try again. DevTools help when they're not eating 4GB of RAM.
Auto-imports work until they don't. Drop a component in components/
and use it. Works great until TypeScript loses its mind and can't find anything. Restart the dev server, restart VS Code, run npx nuxt prepare
, sacrifice a goat. One of those usually fixes it.
Module ecosystem is decent. 200+ modules and maybe 80% work on first install. Tailwind CSS installs cleanly. Nuxt Content is solid. Supabase auth worked after I figured out the session persistence thing. Stripe payments took three tries but eventually worked.
Add a module to your config, restart dev server, hope it doesn't break something else. Usually works but sometimes you get weird dependency conflicts and spend an afternoon debugging why your build suddenly hates life.
What Actually Works in Development
TypeScript finally makes sense. Nuxt 4.0 fixes the server/client type mixing nightmare. API routes get separate type checking. No more importing server code in client components and wondering why everything broke. Auto-imports work with TS now.
DevTools are worth using. Shows all your routes, performance, component trees, API responses, bundle analysis, SSR debugging. It's like Vue DevTools for your entire app. Press Shift + Alt + D
to see what's actually happening instead of guessing.
Just don't enable DevTools on Windows with Node 22+ unless you enjoy memory leaks.
What Randomly Breaks At 3AM
DevTools killed my laptop. Took me weeks to figure out it was the DevTools memory leak on Windows with Node 22+. Laptop fans going full jet engine mode, 4GB RAM just vanishing. Fix: devtools: { enabled: false }
. Still don't know why this only happens sometimes.
Hot reload dies about once a week. Just stops working, no error message, no warning. Restart dev server. Sometimes that doesn't work either and you delete .nuxt/
and restart. Sometimes you restart VS Code. Sometimes you restart your computer. One of those usually works.
SSR hydration mismatches are the fucking worst. Error message says something broke in component X but the actual problem is in component Y. Or it's a date formatting issue. Or you're using Math.random()
somewhere. Or it's Tuesday and the JavaScript gods are angry. <ClientOnly>
wrapper fixes most of it.
TypeScript randomly forgets what auto-imports are. One day everything works, next day VS Code can't find any of your components. Run npx nuxt prepare
, restart TypeScript server, restart VS Code, delete node_modules
and reinstall. Usually takes 2-3 tries to get it working again.