Free and open source · Apache-2.0

Write it once.
Own it forever.
Publish anywhere.

colophon is a static site generator for bloggers. You keep a folder of plain Markdown files; colophon turns it into a fast, accessible, beautifully typeset blog with feeds, search and syndication built in, and publishes it to the host of your choice.

Markdown in. Online presence out.

No databases, no admin panel, no lock-in. A post is a Markdown file with a little frontmatter; what readers get is a beautifully typeset page, feeds, search, social cards and syndicated copies, all working without JavaScript, and all yours.

What you write

---
title: Why I still blog
hero: gen:a desk by a window, morning light
audio: true
tags: [writing]
---

The web got loud. My corner of it
doesn't have to be.

> [!note]
> Posts are plain files. Take them
> anywhere, any time.

What readers get

Why I still blog

The web got loud. My corner of it doesn't have to be.

Posts are plain files. Take them anywhere, any time.

Everything a blog should do, out of the box

colophon ships the whole publishing stack as one small binary. Each of these is built in; none of them needs a plugin, a service, or a subscription.

Markdown in

A folder of plain files, nothing more. If that folder happens to be an Obsidian vault, wikilinks, embeds and co-located images just resolve.

Typeset like print

The press theme is an editorial broadsheet: real typography, light and dark, code, maths, diagrams, callouts and pull-quotes all styled.

Feeds and the IndieWeb

RSS, Atom and JSON feeds, WebSub pings, microformats2 and webmentions: your blog is a first-class citizen of the open web.

Syndicate everywhere

POSSE built in: the canonical post lives on your domain, copies go to Bluesky and Mastodon, and a committed ledger keeps re-runs safe.

Search without a server

A static, sharded BM25 index with optional typo tolerance. Visitors search instantly; nothing phones home, nothing to host.

Posts become slide decks

Any post can project itself into a themed deck at /slides/: speaker notes, presenter mode, autocue, and it still reads with JS off.

Optional AI media

Hero images from a one-line gen: prompt and spoken readings of each post, with your own key. Cached in your repo; entirely optional.

Your readers' languages

Drop post.es.md beside post.md and colophon wires the translations together: hreflang, language chips, even per-language pronunciation for readings.

Accessible to AAA

The whole output targets WCAG 2.2 Level AAA: contrast, focus, keyboard access, and every page working before JavaScript arrives.

Your assistant writes in your voice

colophon ships agent skills for Claude Code, Codex, Gemini CLI, Cursor, Copilot and OpenCode: one command teaches your assistant to draft, edit, cross-link, tag and publish posts on your site. Personas capture your tone as a style guide backed by your actual back catalogue, so an LLM-drafted post reads like you wrote it.

Your voice, on file

# personas/default.yaml
style:
  guide: |
    Dry and wry; confident but
    unpretentious. British spelling,
    short sentences, no hype.
# plus every post you've written in
# this voice, as the exemplar corpus
# behind `colophon persona context`

Publish anywhere

Publishers are pure mechanism; environments decide what deploys where. Deploys are incremental (only changed files upload) and production sits behind an --allow-publish latch, so nothing ships by accident.

Page hosts

Cloudflare Pages, GitHub Pages, GitLab and Codeberg Pages. The build lands straight on the host's CDN, one command from your terminal or CI.

Object storage

Amazon S3, Cloudflare R2, Tigris, MinIO, Backblaze, Wasabi: any S3-compatible bucket becomes a website, or just carries your heavy assets.

Or your own pipeline

A git remote, rsync, or any command you care to run. If you can script it, colophon can publish with it.

News

Release notes and notes from the making of colophon. Subscribe.