gitmyhub

Foundry

Go ★ 188 updated 3d ago

A Markdown-first CMS written in Go with themes, plugins, and an integrated admin UI

A Markdown-first CMS written in Go that can run as a static site generator or a live server with an admin panel.

GoMarkdownDockerPlaywrightsetup: moderatecomplexity 3/5

Foundry is a content management system written in Go that stores pages and posts as Markdown files with frontmatter instead of a database. It is built for teams who want a file based writing workflow while still keeping CMS features like taxonomies, themes, plugins, RSS and sitemap output, and an admin interface.

The README explains that Foundry can run two ways. In "build" mode it generates a static site into a public folder, ready to deploy behind a CDN or object storage. In "serve" mode it runs as a long running process with a themeable admin panel mounted at /__admin and a live JSON API, so it works as a headless CMS as well. Content is stored the same way in both modes, so a project can move between static and server setups without changing how content is written or tracked in git. The admin login on a fresh install is admin and admin, and the README recommends setting a proper session secret before using it for anything real.

Foundry supports two kinds of plugins: compiled Go plugins for deep integration, and separate out of process plugins that run isolated from the main program. Themes control layout, and the system tracks dependencies between documents, templates, and data files so that only what changed gets rebuilt during development, which speeds up the local preview server's live reload.

The quickest way to run it locally is through Docker, using a provided setup script and docker compose file. A separate production compose file requires explicit secrets, runs with a read only filesystem, drops Linux capabilities, and stores only hashed session tokens rather than plain ones. The project layout separates the CLI, admin code, content loading, rendering, and plugin systems into distinct Go packages, and it uses Playwright for local browser testing of its default themes.

Where it fits