# Hugo / Zola + Caddy

Static files you build and serve. Hugo is Apache-2.0; Zola is EUPL-1.2; Caddy is Apache-2.0 — GitHub Pages, Cloudflare Pages, and Carrd without the hosted pages seat.

**Replaces:** GitHub Pages / Cloudflare Pages / Carrd

**Tier:** Easy

## Problem

GitHub Pages and Cloudflare Pages are hosted static-site runtimes next to a git host or a CDN. Carrd is a visual one-pager — this stack is files you build, not Carrd's editor. You wanted a generator and a file server you run. Hugo is Apache-2.0 (gohugoio/hugo; last push 24 Oct 2026). Zola is EUPL-1.2 (getzola/zola; last push 19 Oct 2026). Caddy is Apache-2.0 and already in the catalog. This is not GitHub Actions minutes, Cloudflare Workers (/replace/cloudflare-workers), or a CMS. Ghost stays a publication — /replace/medium. Coolify is a PaaS — /replace/heroku. Forgejo is the git host — /replace/github. A link-in-bio page stays on /replace/linktree. A visual builder stays on /replace/webflow.

## Stack

- [Hugo](https://gohugo.io) — Apache-2.0 static site generator — the published GitHub Pages path
- [Zola](https://www.getzola.org) — EUPL-1.2 single-binary generator if Hugo is not the shape
- [Caddy](https://caddyserver.com) — Apache-2.0 file server with automatic HTTPS

## Estimated SaaS cost saved

| You stop paying | Typical / year | Self-host instead |
|---|---:|---|
| GitHub Pages / Cloudflare Pages (small site) | $1,200 | Hugo or Zola + Caddy |

**About $1,200 / year** on a small team, before you count lock-in.

## Deploy on Railway

Placeholder: build Hugo or Zola in CI, serve public/ with Caddy (or any file server) plus a volume if you copy the output onto the box. No one-click template in this repo yet — Start on Railway. A CMS stays on /stacks/ghost-cms. A git host stays on /stacks/forgejo-git.

[Start on Railway](https://c17.io/go/railway/hugo-static?from=%2Fstacks%2Fhugo-static.md)

[Ghost if this is a CMS publication, not static files](https://c17.io/stacks/ghost-cms)

## AGENT_PROMPT

```
Replace GitHub Pages or Cloudflare Pages with Hugo (preferred) or Zola, served by Caddy.

- Build the site in CI or on the box. Serve the output directory. Persist nothing unless you copy artifacts onto a volume. Do not claim Workers, Actions minutes, or a CMS.
- Ghost if the job is a publication — /stacks/ghost-cms. Forgejo if the pain is the git host — /stacks/forgejo-git.
- Write AGENT_PROMPT.md.
```

## FAQ

### Hugo or Zola?

Hugo if you want the common Apache generator (the published GitHub Pages path). Zola if you want that Rust binary — /compare/hugo-vs-zola.

### Is this Netlify?

Netlify-shaped app hosting stays on /replace/netlify. This page is static files.

### Is this Carrd?

Carrd is a visual one-pager. This page is Hugo or Zola files — /replace/carrd. A bio page stays on /replace/linktree. A visual builder stays on /replace/webflow.

### Are these free?

Hugo and Caddy are Apache-2.0. Zola is EUPL-1.2. You pay hosting. Template users never pay c17.

Source: https://c17.io/stacks/hugo-static
