Compact Go blog engine โ git-driven content, distroless container.
Just add markdown.
docker pull ghcr.io/khaines/blogflow:latest
click to copy
Push markdown to a git repo. BlogFlow syncs and serves. No build step.
Theme โ content โ config โ embedded defaults. First match wins. Override anything.
Nonroot (UID 65532), read-only root FS, no shell, no package manager.
Watch (dev), webhook (instant), sidecar (K8s), poll (HA). Pick what fits.
RED metrics, overlay FS counters, Grafana dashboard included.
Update site.yaml, BlogFlow picks it up. Zero-downtime reconfiguration.
# A working blog with embedded sample content docker run -p 8080:8080 ghcr.io/khaines/blogflow:latest
# docker-compose.yaml services: blogflow: image: ghcr.io/khaines/blogflow:latest ports: - "8080:8080" volumes: - ./content:/data/content:ro
# Install with Helm โ sidecar, webhook, or watch strategy helm install blogflow deploy/helm/blogflow/ # Or apply plain manifests kubectl apply -f examples/k8s/sidecar/
# site.yaml โ only override what you need site: title: "My Blog" base_url: "https://blog.example.com" description: "Thoughts on code and craft" sync: strategy: webhook cache: enabled: true