stabilis
A static site generator written in Zig — Markdown in, static HTML out, no backend.
Prerequisites
To build from source you need Zig 0.16.0 or newer. Prefer a prebuilt binary? Skip straight to Install — no toolchain required.
Install
Installs to /usr/local/bin by default (prefix with sudo, or pass --dir ~/.local/bin):
curl -fsSL https://raw.githubusercontent.com/rafaeldelboni/stabilis/main/install.sh | bash
With options:
curl -fsSL .../install.sh | bash -s -- --dir ~/.local/bin
curl -fsSL .../install.sh | bash -s -- --version v0.1.0
Configure
Stabilis reads a site.yaml at the root of your source directory. Only title and base_url are required; everything else falls back to sensible defaults.
title: Example Blog
base_url: https://example.com
menu:
main:
- { name: Home, url: / }
- { name: Posts, url: /posts/ }
Init
Scaffold a new site from the bundled example:
stabilis init -d my-blog # → ./my-blog with a working example site
When run from a release binary it downloads the matching example tarball; when run from source it copies the local example/ directory. Refuses to init into a directory that already exists.
Build
stabilis build -S example -d public # build ./example into ./public
stabilis build -S example -u https://example.com/blog # override base_url
zig build run -- build -S example # or straight from source
-u/--base-url overrides the base_url from site.yaml — useful when deploying to a subdirectory (e.g. GitHub Pages). The path component becomes the prefix for all generated links.
Serve
Build and serve locally while you write:
stabilis serve -S example
stabilis serve -S example -p 3000 -b 0.0.0.0 # custom port and bind
Scaffold content
stabilis new post "Hello World" # → content/posts/hello-world.md
stabilis new page "About" # → content/about.md
Both refuse to overwrite an existing file. Add -h to any command for its options, or run stabilis --version.