When you’ve been running a Hexo blog for a while, you eventually hit a familiar fork in the road:
Hexo still "just works":hexo g -d, push to Git, static files everywhere, life is simple.
But you keep seeing people rave about Next.js and Nuxt: App Router, SSR, SSG, ISR, Edge Functions… and suddenly your very normal static blog starts to feel a bit old-school.
This article is a structured, engineer-style teardown of that choice:
What are the strengths and weaknesses of building a static blog with Next and Nuxt?
How do they compare with a traditional static blog framework like Hexo?
And, more importantly: when is switching worth the engineering effort, and when is it just overkill?
1. Different Missions: Blog Generator vs Web App Framework
Before comparing features, it’s important to recognize that these three tools were designed for very different missions.
Hexo: A dedicated static blog generator. Feed it Markdown, it spits out static HTML/CSS/JS. Everything is optimized for the “blog / docs site” use case.
Next: A general-purpose React-based web application framework. It supports SSR, SSG, ISR, Edge rendering, API routes, and more. A blog is just one use case among many.
Nuxt: The Vue equivalent of Next. Also a general-purpose web app framework, with SSR, static generation, and hybrid modes.
Consequences of this difference
Hexo’s main path is laser-focused: Write Markdown → generate static site → deploy to static hosting.
Next/Nuxt give you a full-blown app scaffold first, then let you choose:
All static, all SSR, or a hybrid.
React/Vue components, APIs, state management, etc.
Using Next/Nuxt for a simple blog is a bit like using a high-end FPGA for something an 8-bit MCU could handle. It works. It’s powerful. But you need to be honest about what you’re buying: flexibility and modern capabilities at the cost of complexity and maintenance overhead.
2. Developer Experience: Hexo’s Single Pipeline vs Next/Nuxt’s Engineering Universe
From a developer’s point of view, the biggest contrast is how “heavy” the project feels.
npm install -g hexo-clihexo init blogcd blognpm installhexo g && hexo s
You don’t think about routing. You don’t think about bundlers. You rarely think about data fetching. The mental model is closer to “build firmware and flash it once” than “develop a running service”.
The trade-off is obvious: when you want something non-blog-like (e.g., an interactive dashboard on the homepage, complex animations, app-like navigation), you start feeling the board is “fixed wiring” with very few extension points.
Next / Nuxt: Full Web App Engineering
Typical directory layout:app/ or pages/, components/, lib/, public/, etc.
Features: File-system routing, dynamic routes, API routes, middleware, layouts.
npx nuxi init my-blogcd my-blogpnpm installpnpm dev
These are not “blog generators”. They are web app workbenches.
You can:
use React/Vue component libraries,
pull content from Markdown, MDX, headless CMS, REST, GraphQL, or a database,
add auth, dashboards, multi-tenant layouts.
But even for a simple blog you must now think in terms of:
routes and layouts,
data fetching strategies,
build/serve pipelines,
environment variables.
Summary:
Hexo is a one-purpose appliance: turn it on and it just prints your blog.
Next/Nuxt are modular workstations: powerful, extensible, but you’re responsible for the wiring.
3. Rendering and Performance: Hybrid Superpowers vs Pure Static Simplicity
Rendering is where Next and Nuxt fundamentally operate in a different dimension from Hexo.
Hexo: Pure Static
Run hexo generate.
All Markdown → HTML + CSS + JS in public/.
Deploy static assets to any CDN or static host.
Pros:
Everything can be cached at the CDN level.
No server to manage, no cold starts.
Extremely small failure surface: if files exist and CDN works, your blog is up.
Next / Nuxt: Multiple Rendering Modes
Both frameworks support:
Static Generation (SSG): Build-time HTML generation, similar to Hexo.
Server-Side Rendering (SSR): HTML rendered per request.
Incremental Static Regeneration (ISR): Static pages that can be updated after a certain TTL or when triggered.
Edge Rendering: Rendering logic running at edge locations (on platforms like Vercel).
This lets you mix modes:
Most posts as SSG (super cacheable).
Some pages (e.g., dashboards, user-specific views) as SSR or Edge.
Some content with ISR (semi-static but auto-refreshing).
Hexo simply cannot play this game. That’s perfect for a “pure content” blog, but limiting if, for example:
Your homepage is a dynamic dashboard (GitHub activity, stats, live data).
You want user-specific content.
You want to run logic server-side for search, recommendations, or analytics.
Hardware Analogy:
Hexo is like a ROM: flash once, read forever.
Next/Nuxt are SoCs: they can behave like ROM, but they also have RAM and configurable logic blocks when you need them.
4. Markdown and Content Flow
For a blog, authoring experience in Markdown matters a lot.
Hexo: Markdown-First
Articles live under source/_posts.
Front matter is straightforward.
The whole ecosystem is designed around “write Markdown, generate a blog”.
This feels like picking up an oscilloscope: you plug the probe and see the waveform. You don’t need to think about what’s behind the panel.
Next / Nuxt: Markdown as Data
In Next/Nuxt, Markdown is just one type of content source. Typical approaches:
Manual fs + gray-matter to read Markdown.
Using content systems:
Next: contentlayer, custom file loaders, MDX.
Nuxt:@nuxt/content as a first-class content engine.
Or skipping Markdown entirely in favor of a headless CMS.
A Next-style Markdown loader might look like:
typescript
import fs from 'node:fs'import path from 'node:path'import matter from 'gray-matter'const postsDirectory = path.join(process.cwd(), 'content/posts')export function getPostBySlug(slug: string) { const fullPath = path.join(postsDirectory, `${slug}.md`) if (!fs.existsSync(fullPath)) { return null } const fileContents = fs.readFileSync(fullPath, 'utf8') const { data, content } = matter(fileContents) return { slug, frontMatter: data, content }}
In Nuxt with @nuxt/content, you can query content with built-in utilities and generate routes automatically.
Trade-offs:
For plain writing, Hexo feels smoother and more “writer-centric”.
For unifying blog, docs, product pages, and marketing site into one content system, Next/Nuxt are much more scalable.
5. Ecosystem and Extensibility
Hexo: Rich but Narrow
Plugins and themes are abundant, but almost all aimed at typical blog features (SEO, deployment, comments).
A theme often becomes a “mini-framework” on its own. Stepping outside of that theme’s structure can feel awkward.
Next / Nuxt: Standing on the Whole React/Vue World
You can tap into the entire React or Vue ecosystem:
UI: Tailwind, Shadcn UI, MUI, Ant Design, Vuetify.
Animation: Framer Motion, GSAP.
Data: SWR, React Query, Pinia.
Your “blog” stops being “just pages” and starts being a shell for interactive modules. From an engineer’s perspective, this is extremely addictive: your blog becomes your personal “lab board” where you can slot in whatever you’re currently experimenting with.
Warning: For a pure writer, that flexibility can be a distraction. You might spend more time refactoring components than writing.
6. Deployment and Ops
Hexo Deployment
Build: hexo generate
Deploy public/ to GitHub Pages, Netlify, Vercel, or S3.
Complexity: 0.5/5. If static hosting is up, your site is up.
Next / Nuxt Deployment
Two main modes:
Static Export (SSG): Similar complexity to Hexo. Deploy static files.
SSR / Edge: Deploy to platforms like Vercel or Netlify.
You now care about Node runtime versions, memory limits, and cold starts.
Complexity: 2–3/5. Manageable, but you’re running services, not just files.
7. Real Migration Cost: Moving from Hexo to Next/Nuxt
Looking at a shiny Next/Nuxt blog template, it’s easy to underestimate the migration cost. For a blog with historical content, migration is a proper engineering project.
Typical costs:
Markdown structure migration: Directory changes, front matter normalization.
URL compatibility: Reproducing Hexo’s URL structure to avoid SEO damage.
Template rewrite: EJS/Swig templates must be rewritten as React/Vue components.
Pipeline changes: Switching build/deploy commands and CI/CD configs.
Hardware Term: This is not “replace one capacitor”. It’s “keep the external connectors (URLs) but redesign the entire PCB and swap the main chip”.
8. Summary Comparison Matrix
Feature
Hexo
Next.js
Nuxt
Primary Goal
Static Blog Generator
React Web Framework
Vue Web Framework
Learning Curve
Low (Config & Go)
Medium/High (React/TS)
Medium (Vue/Nuxt)
Rendering
Static (SSG)
Hybrid (SSR, SSG, ISR)
Hybrid (SSR, SSG, ISR)
Extensibility
Plugins (Blog specific)
Infinite (React ecosystem)
Infinite (Vue ecosystem)
Markdown
First-class citizen
Data source (MDX/CMS)
First-class (@nuxt/content)
Performance
Excellent (Static)
Excellent to Variable
Excellent to Variable
Best For
Pure writers, simple blogs
React devs, app-like sites
Vue devs, integrated content
9. When to Choose What?
Choose Hexo if…
Your primary goal is writing and publishing.
You don’t need complex interactivity.
You want minimal maintenance and zero DevOps.
Choose Next if…
You’re comfortable with React + TypeScript.
You want your blog to evolve into a personal platform (portfolio + docs + experiments).
You care about fine-grained control and performance tuning.
Choose Nuxt if…
You prefer Vue and its ecosystem.
You want the power of a framework but like the structured approach of @nuxt/content.
You plan to evolve your site into a larger app.
10. Final Thoughts
If you’re currently hovering over the “migrate” button, ask yourself:
Priority: In the next year, do you want to write more or code more?
Skill: Are you comfortable maintaining a React/Vue app long-term?
Pain: Is Hexo actually limiting you, or do you just want something shiny?
My practical bias:
If your desire to switch is mostly aesthetic, stick with Hexo.
If you already live in React or Vue every day and want a "lab board" for your experiments, plan a phased migration.
Framework choices aren’t about “which is cooler” but about which fits your energy budget. Hexo, Next, and Nuxt are all excellent at what they were designed to do. The crucial part is being honest about what you actually need right now.