Deploy targets — where your published site goes

A StaticOwl build renders your content into plain static artifacts. A deploy target decides where those artifacts land. Most sites never choose one — the default serves the preview hosts and custom domains described in Publishing & environments — but it's worth knowing the options, because one of them is the reason your content is never locked in.

There are three, and they can run together.

Target What you get Best for
Static export (default) Plain HTML/CSS/JS at predictable URLs Hosting anywhere — the "take your site and leave" promise
Git mirror Your compiled site plus its metadata pushed to a repo you own Owning your content outright; free hosting via Git-watching services
Managed CDN Atomic releases with instant rollback and point-in-time replay Teams that want zero-downtime deploys and audit-grade history

Static export (the default)

The build writes ordinary files — one HTML page per URL, plus sitemap.xml, rss.xml, any rendered JSON endpoints, and your assets:

index.html
blog/post-1/index.html
sitemap.xml
rss.xml
assets/main.css

Because the output is just files, it serves from anything: StaticOwl's own hosting (the preview hosts and your custom domain), or S3 + CloudFront, Netlify, Vercel, Cloudflare Pages, GitHub Pages, or your own web server. This is the front-door promise — you can take your site and host it anywhere.

The one trade-off: a plain file sync has a brief window during a deploy where some pages are new and some are old. For most sites that's invisible; if you need atomic swaps, use the managed CDN below.


Git mirror — your content in a repo you own

The Git target pushes your compiled site and its metadata to a GitHub repository you control, one commit per deploy:

/index.html
/blog/post-1/index.html

/_meta/pages/blog/post-1.json     ← one sidecar per page
/_meta/types.json                 ← your content-type definitions
/_meta/theme.json                 ← your site theme
/_meta/routes.json                ← the route map
/_meta/release.json               ← what this deploy shipped

Each page gets a sidecar JSON next to the HTML with its full field values and references:

{
  "id": "article:my-post",
  "slug": "my-post",
  "title": "My Post",
  "contentType": "article",
  "path": "/article/my-post/index.html",
  "fields": { "...": "all field values" },
  "references": { "author": ["author:alice"] },
  "deployedAt": "2026-04-28T12:00:00.000Z"
}

Two things this buys you:

The mirror is push-only — StaticOwl writes to the repo and never reads it back, so if you edit the repo by hand your next deploy overwrites those edits. Connecting a repo needs a token with write access to it; your StaticOwl operator sets that up.


Managed CDN — atomic releases and replay

The managed CDN target stores every artifact by content hash and flips a single pointer to go live. That makes a few things possible that a plain file sync can't:

The trade-off is that it runs on StaticOwl's CDN runtime rather than being plain files on any host. Running it alongside the static export (so you keep a portable copy too) is a supported combination.


Choosing

You want Target
A marketing site, blog, or project hosted on StaticOwl or self-hosted anywhere Static export
Your content and its metadata in a Git repo you own Git mirror
Auto-deploy via GitHub Pages / Cloudflare Pages / Vercel / Netlify Git mirror
Atomic deploys, instant rollback, and replay Managed CDN
A portable export and the managed CDN Both

The deploy target is set at the account or install level, not per build — on StaticOwl's hosted plans it's managed for you, and on a self-hosted install your operator configures it. Day to day you just run builds; see Publishing & environments.


See also

Related docs

Resolved at build time via {% similar %} — cosine similarity over embeddings, not tag overlap. Zero arguments.

HTTP API
68% match
Publishing & environments
67% match
Zero to deployed — the 5-minute quickstart
66% match