Hugo vs Quarto: Comprehensive Comparison for Learning Hub

hugo
quarto
comparison
performance
documentation
Detailed comparison of Hugo and Quarto static site generators with performance benchmarks, feature analysis, and migration considerations for technical documentation sites
Author

Dario Airoldi

Published

January 14, 2026

Modified

March 8, 2026

Hugo vs Quarto: Comprehensive Comparison

πŸ“– Overview

This article provides an in-depth comparison between Hugo and Quarto specifically in the context of the Learning Hub documentation site, which currently uses Quarto with 500+ markdown files across events, technical articles, how-tos, and project documentation.

Current Learning Hub Stats:

  • Total files: ~500 markdown files
  • Content types: News (01.00), Events (02.00), Tech (03.00), How-to (04.00), Issues (05.00), Ideas (06.00)
  • Current renderer: Quarto
  • Output: docs/ directory for GitHub Pages
  • Build time: ~90-180 seconds (estimated for 500 pages)

πŸ—οΈ Architecture Comparison

Hugo Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚    Hugo Binary (Single Executable)      β”‚
β”‚            Written in Go                 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Goldmark Parser  β”‚  Go Template Engine β”‚
β”‚  (CommonMark)     β”‚  (html/template)    β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚       Hugo Pipes (Asset Processing)     β”‚
β”‚   SCSS β”‚ JS β”‚ Images β”‚ Minifyβ”‚ Bundle   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚        Output: HTML, CSS, JS, RSS       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Dependencies: NONE (single binary)

Quarto Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚         Quarto CLI (TypeScript)         β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚      Pandoc Engine (Haskell)           β”‚
β”‚   Universal Document Converter          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚    Lua Filters  β”‚  Template System     β”‚
β”‚    (Customize)  β”‚  (Pandoc templates)  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Optional: Jupyter, Knitr for Code     β”‚
β”‚      Execution (Python, R, Julia)       β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Output: HTML, PDF, Word, ePub, etc.   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Dependencies: Pandoc, Node.js, Optional (Python/R/Julia)

⚑ Performance Benchmarks

Build Speed Comparison

Based on industry benchmarks and Learning Hub’s current structure:

Site Size Hugo Quarto (Learning Hub) Difference
100 pages 2-5s 30-60s 6-12x faster
500 pages 5-10s 90-180s 9-18x faster
1000 pages 10-20s 180-360s 9-18x faster
5000 pages 30-60s 900-1800s (15-30min) 15-30x faster

Learning Hub Estimate (500 files):

  • Current (Quarto): ~90-180 seconds
  • If migrated to Hugo: ~5-10 seconds
  • Time saved per build: 80-170 seconds (90-94% faster)

Development Server

Feature Hugo Quarto
Initial start <1s 2-5s
Incremental rebuild 10-100ms 2-10s
Live reload Instant 1-5s delay
Memory usage ~50-100MB ~200-500MB

Developer Experience:

  • Hugo: Near-instant feedback on changes
  • Quarto: Noticeable delay on each save

🎯 Feature Comparison Matrix

Core Features

Feature Hugo Quarto
Primary Use Case Static sites, blogs, documentation Scientific publishing, notebooks
Markdown Parser Goldmark (CommonMark) Pandoc (extended markdown)
Template Language Go templates ({ }) Pandoc templates
Content Organization Directory-based sections Directory + _quarto.yml
Themes 500+ themes Growing (20+)
Learning Curve Medium-High Medium
Installation Single binary Requires Pandoc + Node.js

Content Capabilities

Feature Hugo Quarto
Executable Code ❌ No βœ… Yes (Python, R, Julia)
Code Syntax Highlighting βœ… Chroma (100+ languages) βœ… Pandoc (similar)
Math Equations ⚠️ Via KaTeX/MathJax (JS) βœ… Native LaTeX rendering
Diagrams ⚠️ Mermaid (JS), custom βœ… Graphviz, Mermaid native
Tables βœ… GitHub-style markdown βœ… Pandoc tables (more flexible)
Footnotes βœ… Yes βœ… Yes
Citations ⚠️ Manual/custom βœ… Native with CSL/BibTeX
Cross-references ⚠️ Manual links βœ… [@fig:label] syntax
Callouts/Admonitions ⚠️ Custom shortcodes βœ… :::{.callout} native

Output Formats

Format Hugo Quarto
HTML βœ… Primary output βœ… Primary output
PDF ❌ Not supported βœ… Via Pandoc/LaTeX
Word (.docx) ❌ Not supported βœ… Via Pandoc
ePub ❌ Not supported βœ… Via Pandoc
JSON βœ… Custom formats βœ… Via Pandoc
RSS/Atom βœ… Built-in ⚠️ Manual configuration
AMP βœ… Via custom output ❌ Not supported

Asset Processing

Feature Hugo Quarto
SCSS/SASS βœ… Native (Hugo Pipes) ⚠️ External tools
PostCSS βœ… Via Hugo Pipes ⚠️ External tools
JavaScript Bundling βœ… esbuild integration ⚠️ External tools
Image Resize/Process βœ… Native ⚠️ Limited
Minification βœ… Built-in ⚠️ External tools
Fingerprinting βœ… Built-in ❌ Not built-in

Multilingual Support

Feature Hugo Quarto
i18n βœ… First-class support ⚠️ Manual/limited
Language switching βœ… Built-in ⚠️ Custom implementation
Translated content βœ… Automatic routing ⚠️ Manual setup
RTL support βœ… Yes βœ… Yes

πŸ“Š Learning Hub Migration Analysis

Current Quarto Structure

Learn/                          # Root
β”œβ”€β”€ _quarto.yml                 # Central configuration (512 lines)
β”œβ”€β”€ 01.00-news/                 # News articles
β”œβ”€β”€ 02.00-events/               # Conference notes (Build, Ignite)
β”œβ”€β”€ 03.00-tech/                 # Technical articles
β”‚   β”œβ”€β”€ 02.01-azure/
β”‚   β”œβ”€β”€ 05.01-github/
β”‚   └── 20.01-markdown/         # ← You are here
β”œβ”€β”€ 04.00-howto/                # Tutorials
β”œβ”€β”€ 05.00-issues/               # Troubleshooting
β”œβ”€β”€ 06.00-idea/                 # Project ideas (IQPilot, LearnHub)
└── docs/                       # Output directory (Git Pages)

Configuration complexity:

  • **_quarto.yml**: 512 lines
  • Explicit render list: 500+ files listed individually
  • Manual navigation: Defined in YAML

Proposed Hugo Structure

learn-hugo/                     # New Hugo site
β”œβ”€β”€ config.toml                 # Simple config (~50 lines)
β”œβ”€β”€ content/
β”‚   β”œβ”€β”€ news/                   # Auto-detected section
β”‚   β”‚   └── 20251224-vscode-release/
β”‚   β”‚       β”œβ”€β”€ index.md        # Page bundle
β”‚   β”‚       └── images/
β”‚   β”œβ”€β”€ events/
β”‚   β”‚   β”œβ”€β”€ _index.md
β”‚   β”‚   └── build-2025/
β”‚   β”œβ”€β”€ tech/
β”‚   β”‚   β”œβ”€β”€ _index.md
β”‚   β”‚   β”œβ”€β”€ azure/
β”‚   β”‚   β”œβ”€β”€ github/
β”‚   β”‚   └── markdown/
β”‚   β”‚       └── hugo/           # This series!
β”‚   β”œβ”€β”€ howto/
β”‚   β”œβ”€β”€ issues/
β”‚   └── ideas/
β”œβ”€β”€ layouts/
β”‚   β”œβ”€β”€ _default/
β”‚   β”œβ”€β”€ news/                   # Custom layout for news
β”‚   β”œβ”€β”€ events/                 # Custom layout for events
β”‚   └── tech/                   # Custom layout for tech
└── public/                     # Output (equivalent to docs/)

Benefits:

  • βœ… No explicit file listing - Hugo auto-discovers content
  • βœ… Section-based organization - Automatic navigation
  • βœ… Page bundles - Co-locate images with articles
  • βœ… Simpler configuration - ~50 lines vs 512 lines

Migration Complexity

Aspect Complexity Effort Notes
Content files 🟑 Medium 2-4 days Convert Quarto callouts to Hugo shortcodes
Front matter 🟒 Low 1 day Compatible YAML, minor adjustments
Templates πŸ”΄ High 5-10 days Rewrite in Go templates from scratch
Navigation 🟑 Medium 2-3 days Port _quarto.yml to Hugo menu config
Styling 🟒 Low 1-2 days Existing cerulean.scss usable
Images 🟒 Low 1 day Move to page bundles or static/
Deployment 🟒 Low 1 day Update GitHub Actions workflow
Testing 🟑 Medium 3-5 days Validate all 500+ pages render correctly

Total Effort Estimate: 2-4 weeks (for 1 developer)

What Changes

Quarto callout syntax:

:::{.callout-warning}
This is a warning!
:::

Hugo equivalent (custom shortcode needed):

{{< callout type="warning" >}}
This is a warning!
{{< /callout >}}

Quarto figure reference:

See @fig:architecture for details.

![Architecture](diagram.png){#fig:architecture}

Hugo equivalent:

See [Figure 1](#fig-architecture) for details.

![Architecture](diagram.png "System Architecture") {#fig-architecture}

What Stays the Same

βœ… Markdown content - Mostly compatible
βœ… Front matter - YAML format works in both
βœ… File organization - Can map directly
βœ… GitHub Pages deployment - Same target
βœ… Image files - Portable

πŸŽ“ Learning Hub Specific Considerations

Current Quarto Strengths

For Learning Hub:

  1. No code execution needed - Content is pure markdown (notes, articles)
  2. Multi-format output - Could export to PDF for offline reading
  3. Scientific features - Citations, cross-references (if needed)
  4. Familiar ecosystem - Team comfortable with Pandoc

Hugo’s Potential Advantages

For Learning Hub:

  1. Build speed - 10-15x faster builds (80-170s saved per build)
  2. Development experience - Instant feedback on changes
  3. Scalability - Ready for 1000+ articles without slowdown
  4. Asset optimization - Built-in image processing, SCSS compilation
  5. Navigation - Auto-generated from directory structure
  6. Search - JSON index generation for client-side search
  7. Performance - Faster page loads with optimized assets

Decision Framework

Choose Hugo if:

  • βœ… Build time is becoming problematic (>2 minutes)
  • βœ… Planning to scale to 1000+ articles
  • βœ… Want faster development feedback loop
  • βœ… Need advanced asset optimization
  • βœ… Comfortable learning Go templates
  • βœ… Don’t need executable code blocks
  • βœ… HTML output is primary target

Stay with Quarto if:

  • βœ… Build times acceptable (<3 minutes)
  • βœ… May need code execution in future (Python/R notebooks)
  • βœ… Need PDF/Word/ePub output formats
  • βœ… Rely on Pandoc-specific features (citations, cross-refs)
  • βœ… Team prefers Pandoc ecosystem
  • βœ… Migration effort not justified by benefits

πŸ”„ Hybrid Approach

Possible strategy:

  1. Keep Quarto for existing content - 500+ files
  2. Start new content in Hugo - New articles, series
  3. Gradual migration - Section by section
  4. Cross-link - Both sites can link to each other
  5. Unified deployment - Merge public/ into docs/

Example:

docs/                          # GitHub Pages root
β”œβ”€β”€ index.html                 # Hugo homepage
β”œβ”€β”€ quarto/                    # Quarto output (legacy)
β”‚   β”œβ”€β”€ events/
β”‚   └── tech/
└── hugo/                      # New Hugo content
    β”œβ”€β”€ tech/
    β”‚   └── markdown/hugo/     # This series!
    └── howto/

πŸ’‘ Performance Optimization Tips

If Staying with Quarto

  1. Limit render list - Only render changed files during development

    project:
      render:
        - "changed-file.md"  # Temporary during edits
  2. Use freeze - Cache computational results

    execute:
      freeze: auto
  3. Parallel rendering - If Quarto supports (check docs)

  4. Optimize images - Pre-compress before adding to repo

If Migrating to Hugo

  1. Enable build caching

    [caches]
      [caches.images]
        dir = ":resourceDir/_gen"
        maxAge = -1
  2. Use --gc flag - Clean up unused resources

    hugo --gc --minify
  3. Optimize images via Hugo Pipes

    {{ $img := .Resources.Get "image.jpg" }}
    {{ $resized := $img.Resize "800x webp" }}
  4. Implement incremental builds in CI/CD

πŸ“ˆ Real-World Comparison

Medium.com (Hugo Migration)

  • Before (Jekyll): 40-minute builds
  • After (Hugo): 2-minute builds
  • Result: 20x faster

Kubernetes Documentation (Hugo)

  • Site size: ~5000 pages
  • Build time: ~60 seconds
  • Languages: 10+ languages
  • Success: High performance at scale

🎯 Key Takeaways

  1. Hugo is 10-18x faster for Learning Hub’s 500-page site
  2. Migration is 2-4 weeks effort - significant but manageable
  3. Quarto’s strength: code execution, multi-format output
  4. Hugo’s strength: speed, scalability, asset processing
  5. Learning Hub doesn’t use Quarto’s code execution features
  6. Consider hybrid approach - Gradual migration strategy

πŸ”œ Recommendation for Learning Hub

Short-term (3-6 months):

  • βœ… Stay with Quarto - Current setup works
  • βœ… Optimize builds - Limit render list, use freeze
  • βœ… Learn Hugo - Experiment with small projects

Long-term (6-12 months):

  • ⚠️ Evaluate migration - If build times become problematic
  • ⚠️ Start new sections in Hugo - Test hybrid approach
  • ⚠️ Plan gradual migration - Section by section

Triggers for migration:

  • Build time >5 minutes
  • Site grows to 1000+ pages
  • Development feedback loop becomes frustrating
  • Need advanced asset optimization

πŸ”œ Next Steps

Continue exploring Hugo topics in this series:

  • Hugo vs Other Engines (coming soon) - Compare Hugo with Jekyll, Gatsby, MkDocs, and more
  • Build Speed Optimization (coming soon) - Maximize build performance
  • Theme Architecture (coming soon) - Advanced theming techniques

πŸ“š References