Home / Devlog / Patch sprint: AbsURL, SQL quoting, health improvements, and a proper 404

Patch sprint: AbsURL, SQL quoting, health improvements, and a proper 404

20 March 2026 release patch

A focused session today — no new features, just making Forge sharper and more correct in four areas that matter in real-world use.

forge.AbsURL()

forge.URL() has always returned root-relative paths by design. That's the right default for internal links, but og:url and <link rel="canonical"> need absolute URLs — and until today, developers had to manually prepend BaseURL themselves. Not anymore. forge.AbsURL(base, path) handles it cleanly, and forge-cms.dev is already using it throughout.

SQL identifier quoting

SQLRepo generates SQL from struct tags at runtime. If you happened to name a field order, group, or another reserved keyword, you'd get a cryptic SQL error with no obvious cause. All generated column names are now double-quoted, which is ANSI SQL and supported by both SQLite and PostgreSQL. Reserved keywords just work.

Framework versions in /_health

The health endpoint used to return {"status":"ok"} — useful for liveness checks but not much else. It now includes the versions of forge core and any companion modules (like forge-mcp) pulled directly from the binary's embedded build info. No extra build flags, no manual version strings. Deploy, hit /_health, and know exactly what's running.

As a bonus, the same versions are logged at startup, so they show up in docker logs right where you'd look first.

Health endpoint HTTPS bypass

Config.HTTPS: true previously caused /_health to return a 301 redirect — which breaks Caddy's health_uri check entirely. The endpoint now responds directly on plain HTTP regardless of the HTTPS setting. Internal infrastructure checks work correctly; external traffic still gets redirected.

Styled 404 pages

Forge has always enforced the content lifecycle correctly — archived, draft, and scheduled posts return 404, as they should. The presentation was just bare. There's now a styled 404 template that matches the site design, and unknown paths go through Forge's error handler so the experience is consistent everywhere.


Five small things. Each one closes a gap between "technically correct" and "actually pleasant to work with."