Skip to content

Releases: raspbeguy/pigo

v0.1.0

21 Apr 13:26
v0.1.0
3bdb8a2

Choose a tag to compare

First tagged release of pigo — a Go reimplementation of the Pico flat-file CMS. Drop an existing Pico content/, themes/, and config/ into pigo, point a single static binary at it, and you're serving. Pico itself reached end of life; pigo exists so you can keep running Pico sites on maintained software.

This is an early release. Breaking changes are possible between pre-1.0 versions — pin the tag, skim the notes on each bump. Core rendering is solid: both template engines work, the test suite is green under -race, and CI enforces a mechanically-measured parity diff against Pico v2.1.4.

What works

  • Twig templates via stick (Twig 1.x). Sixteen upstream PRs landed to bring stick's coverage up to what real Pico themes need — ordered hashes, spaceless, max/min, range/cycle/random/attribute, in on strings, parser fixes for is defined and chained or, and more. See docs/upstream-stick-prs.md for the full list.
  • Go html/template as an alternative engine (template_engine: go).
  • Markdown via goldmark with GFM extensions enabled to match Parsedown Extra's output.
  • Plugin system with events one-for-one mirroring Pico's PHP hooks. Two reference plugins ship: PicoFilePrefixes and PicoRobots.
  • Structured logging via log/slog--log-level, --log-format text|json, one request line per HTTP response, 500s logged with cause.
  • Root-level static files (favicon.ico, robots.txt, google-verify tokens) served out of --root/ with a Pico-style deny list (config/, content/, lib/, plugins/, dotfiles). Toggleable via serve_root_static.
  • Cross-platform binaries for Linux (amd64/arm64/armv7), macOS (amd64/arm64), and Windows (amd64). Each archive includes a .sha256.

Name-surface parity with Pico v2.1.4

Mechanically checked in CI, full breakdown in docs/parity/SUMMARY.md:

  • Plugin events: 28 shared, 2 pigo-only (onThemeLoaded, onCurrentPageDiscovered).
  • Config keys: 20 shared, 5 pigo-only (template_engine, log_level, log_format, serve_root_static, plugins).
  • Template variables: all 14 Pico vars shared, plus pages_by_id and page_tree.
  • Meta headers, Twig filters, Twig functions: full parity.

Known limitations

  • Pico's PHP plugins do not load — port to Go against the same event names. docs/porting-pico-plugins.md walks through a full port.
  • Markdown output isn't byte-identical to Parsedown Extra; whitespace and a few extended constructs can differ.
  • The root-static deny list compares paths as-is; case-insensitive filesystems (macOS HFS+, Windows NTFS) need a webserver in front.

Install

Prebuilt binary from this release, or from source with Go 1.26+:

go install github.com/raspbeguy/pigo/cmd/pigo@v0.1.0
pigo --root /path/to/your/pico/site --addr :8080

Acknowledgements

Thanks to @tyler-sommer for reviewing and merging sixteen PRs against stick — pigo's Twig story rests entirely on that work. And to @PhrozenByte and the PicoCMS contributors for a CMS worth preserving.