Forge v1.0.0 — what shipped
Forge v1.0.0 shipped in March 2026 after nine milestones of development. Here is what is in it.
Core
Every content type embeds forge.Node — a struct that carries UUID identity, a URL slug, and the full content lifecycle. The lifecycle is always enforced. Non-published content never appears on public endpoints, sitemaps, feeds, or AI indexes. This is not configurable. It is the point.
type Post struct {
forge.Node
Title string `forge:"required,min=3"`
Body string `forge:"required"`
Tags []string
}
What a module gives you
Register a content type as a module and Forge wires the following automatically:
- GET /posts — list of published items (JSON, HTML, or Markdown)
- GET /posts/{slug} — single item with content negotiation
- POST /posts — create (requires Author role or above)
- PUT /posts/{slug} — update and publish (lifecycle enforced)
- DELETE /posts/{slug} — delete (requires Editor role or above)
- GET /posts/feed.xml — RSS 2.0 feed
- GET /posts/{slug}/aidoc — token-efficient AI format
- Entry in /llms.txt and /llms-full.txt
- Entry in /sitemap.xml
SEO and metadata
Implement Head() forge.Head on your content type and Forge generates the full <head> block: title, meta description, canonical URL, Open Graph, Twitter Card, breadcrumb JSON-LD, and robots directives for non-published content.
Storage
forge.SQLRepo[T] provides a production-ready repository backed by any *sql.DB. Switch from SQLite to PostgreSQL by changing one line — the application code does not change.
Zero dependencies
The forge core package has zero third-party dependencies. One go get, one binary, one database file.
What is next
Milestone 10 is MCP support — exposing Forge modules as typed MCP tools so AI assistants can create, update, and publish content directly. After that, Phase 2 focuses on the production foundation: shared template partials, native analytics, webhooks, and forge-admin.