Astro vs Hugo — TypeScript ergonomics vs raw speed
Pick Astro for TypeScript teams and interactive components. Pick Hugo if build time is the hard constraint at 10K+ pages. Here is where the line sits.
By Ethan
1,369 words · 7 min read
Pick Astro if your team is TypeScript-native, you need interactive components, or you’re pulling content from multiple CMS sources. Pick Hugo if build time is the hard constraint, you have 10K+ pages, or you want a single binary with zero Node dependency. Everything else is details — the section headings below tell you whether those details matter for your project.
Who this is for
Frontend engineers and technical content teams choosing between two modern static-site generators. If you’re already using one and it’s working fine, there’s no reason to switch — this article is for greenfield decisions and teams hitting the wall with their current tool.
What we tested
Astro v6.3.3 (the latest stable release as of May 2026) against Hugo v0.161.1 (released April 29, 2026). Build speed measurements use Zach Leatherman’s published SSG build benchmark (zachleat.com) against real Markdown corpora, not synthetic hello-world setups. DX observations come from both tools’ documentation and the engineering patterns that show up in their GitHub issue trackers and migration guides.
Findings
Build speed
Hugo is the fastest static-site generator in common use. The numbers:
| Pages | Hugo | Astro |
|---|---|---|
| 1,000 | 0.171s | 5.098s |
| 4,000 | 0.684s | 22.907s |
Source: Zach Leatherman’s SSG build benchmark (Hugo v0.101.0, Astro 1.0.1; raw Markdown corpora, 2022).
A few things to read into that table carefully.
Hugo at 1,000 pages (0.171s) is roughly 30× faster than Astro (5.098s). The ratio holds at larger corpora: at 4,000 pages, Hugo finishes in 0.684s against Astro’s 22.907s.
Below a few hundred pages both tools finish well under a second from a cold build. At that scale, choosing based on build speed is noise.
The practical breakpoint: if you have several thousand pages and every build counts (CI minutes, preview deploys on every PR), Hugo’s speed is a genuine operational advantage. If you have a typical product blog or documentation site in the hundreds-to-low-thousands of pages, this criterion doesn’t decide anything.
Developer experience
This is where the tools diverge most sharply, and where you should spend the most time deciding.
Astro is built for teams that think in TypeScript. The .astro component format is JSX-adjacent — close enough that React or Vue developers are productive the same day. Content Collections give you Zod-validated frontmatter schemas, which means type errors on malformed content at build time rather than runtime surprises in production. MDX is first-class, so you can use JSX components inline in Markdown without a plugin dance.
Astro v5 brought Content Layer, which adds type-safe loaders for remote sources (Storyblok officially; Notion via community-maintained loaders) and dramatically speeds up Markdown build times. Server Islands (server:defer) let you defer dynamic content loading on otherwise static pages, and astro:env gives you validated, type-safe environment variables. These are features that show up in real architectures, not just in release notes.
Hugo runs on Go templates. If you know Go templates, you know Hugo — they’re powerful and fast. If you don’t, you’re learning a templating language with a quirky syntax that is meaningfully different from what JavaScript teams are used to. There is no JSX, no TypeScript, no component model in the React sense. The trade-off is real: Hugo ships as a single binary with no Node dependency, which makes CI setup trivial and eliminates an entire category of supply-chain and version-pinning headaches.
The migration direction tells the story: JS/TS teams who picked Hugo for speed and then wanted component composition end up paying down the rewrite cost. Teams that started on Astro and wanted Hugo’s raw build throughput are much rarer — and usually solve it by switching to Astro’s Content Layer rather than migrating away.
Hugo’s multilingual support — content translation by filename or directory, locale-aware date and number formatting, and clean locale routing — is the most complete of the major SSGs. If you’re publishing content in 5+ languages with complex locale routing, Hugo handles it with less ceremony than Astro.
If JavaScript SSR frameworks are also in scope, SvelteKit vs Next.js covers a similar framework-selection decision for teams weighing SSR alongside static output.
Ecosystem
Astro: ~3M weekly npm downloads (npm registry, week of May 10–16 2026), ~59K GitHub stars (as of May 2026; GitHub). Native integration with React, Vue, Svelte, Solid, Preact, and Lit. The ecosystem is large enough that you will find a community integration for almost any third-party service.
Hugo: ~370+ themes in the official gohugoio/hugoThemes repository, a Go module system for shared components, and a mature community skewed toward content-heavy publishing sites. Its ecosystem is smaller than Astro’s by npm standards, but its themes tend toward polished, content-focused designs that work well out of the box.
Astro’s component model means you can use npm packages directly inside .astro files. Hugo’s Go template approach means third-party integrations require either Hugo Modules or external build steps — doable, but more friction when your team’s mental model is npm install.
If Next.js is also on your shortlist, Next.js vs Astro compares Astro’s Islands model against App Router’s SSG and SSR capabilities for React teams.
Deployment
Both tools produce static HTML, so they work with any CDN or static host. The substantive difference is Vercel support.
- Netlify: full support for both.
- Cloudflare Pages: full support for both.
- Vercel: Astro works via the official Vercel adapter (
@astrojs/vercel); Hugo on Vercel’s official build script pins v0.160.0 — one minor version behind the current 0.161.1. Check Hugo’s host-on-Vercel documentation for the pinned version before deploying.
Output performance
Both tools produce static HTML. For a content-only page with no client-side JavaScript, Core Web Vitals scores are equivalent — the HTML is the HTML.
The gap is what happens when you add interactivity:
- Astro’s Islands architecture (
client:load,client:idle,client:visible) ships JavaScript only for the components that need it. You can build interactive search, live previews, or authenticated widgets without blowing up your LCP. - Hugo ships no JavaScript runtime at all. Hugo Pipes handles image processing, SCSS compilation, and fingerprinting at build time. If your site needs no interactivity, Hugo’s output is leaner by default. If it does need interactivity, you’re wiring up JavaScript yourself — either a vanilla approach or a separate JS bundler — and that gap with Astro gets expensive.
For marketing sites and documentation with minimal interactivity, Hugo’s zero-JS baseline is genuinely attractive. For product sites, developer tools, or anything with user-facing state, Astro’s Islands model handles it more cleanly.
Verdict
Pick Astro if:
- Your team writes TypeScript and expects JSX-adjacent templating.
- You’re pulling content from multiple sources (Notion, Storyblok, a headless CMS, plus local Markdown).
- You need interactive components — search, live filtering, authenticated widgets, anything with state.
- You’re on Vercel and want SSG.
- Your page count is under 10,000 and build speed is not the deciding factor.
Pick Hugo if:
- Build time is a hard operational constraint (10K+ pages, CI on every PR, tight bill).
- You want a single binary with zero Node dependency and minimal supply-chain surface area.
- Your content is pure Markdown with no interactivity requirements.
- You need best-in-class multilingual support with complex locale routing.
- You’re comfortable with Go templates, or your team already is.
Neither tool is wrong for a general-purpose site. They solve different problems at different scales.
Caveats
Hugo’s Vercel build script pins v0.160.0 as of May 2026 — one minor version behind current. Check Hugo’s host-on-Vercel documentation for the pinned version before deploying.
The build speed numbers use Zach Leatherman’s 2022 benchmark (Hugo v0.101.0, Astro 1.0.1). Both tools have improved since. Your corpus structure, frontmatter complexity, and image processing load will shift absolute times — run your own measurements before treating the ratios as a firm contract.
We have no affiliate relationship with Astro, Hugo, Netlify, Cloudflare Pages, or Vercel.
References
- Astro v6.3.3 release notes
- Hugo v0.161.1 release notes
- Astro Content Layer announcement
- Astro Server Islands
- Hugo on Vercel — official build script
- SSG build benchmark — Zach Leatherman
- Astro npm downloads (npm registry, week of May 10–16 2026)
- Astro GitHub repository
- Hugo themes repository (gohugoio/hugoThemes)
- Astro community loaders (includes Notion)