A high-performance blog engine built with Go. MarkGo combines file-based content management with a dynamic web server.
Download a release from GitHub Releases, or build from source:
git clone https://github.com/vnykmshr/markgo && cd markgo
make build
./build/markgo init --quick
./build/markgo serve
# Visit http://localhost:3000See Getting Started Guide for detailed setup instructions.
Performance
- Server ready in under 1 second
- 30MB memory footprint, ~27MB binary
- In-memory caching with no external dependencies
- No runtime requirements (Node.js, PHP, databases)
Content Management
- Markdown files with YAML frontmatter
- Git-based workflow for version control
- CLI tools for article creation and export
Production Ready
- Docker deployment support
- Static site export (GitHub Pages, Netlify, Vercel)
- Built-in security: rate limiting, CORS, input validation
- SEO automation: sitemaps, Schema.org, Open Graph, Twitter Cards
- Full-text search and RSS/JSON feeds
Developer Experience
- Clean architecture with separated concerns
- Unified CLI with subcommands
- Environment variable configuration
- Extensive documentation
markgo init [--quick] # Initialize a new blog
markgo serve # Start the web server
markgo new [--title "..." --tags "..."] # Create an article
markgo export --output ./public # Export to static siteConfigure via environment variables. Copy .env.example to .env:
BLOG_TITLE="Your Blog Title"
BLOG_AUTHOR="Your Name"
BASE_URL="https://yourdomain.com"
CACHE_ENABLED=true
SEARCH_ENABLED=trueSee Configuration Guide for complete options.
Static export (GitHub Pages, Netlify, Vercel):
markgo export --output ./public --base-url https://yourdomain.comDocker:
docker compose up -dManual (systemd):
make build
scp build/markgo server:/usr/local/bin/
sudo cp deployments/markgo.service /etc/systemd/system/
sudo systemctl enable --now markgoSee Deployment Guide and Static Export Guide for details.
make dev # Start dev server with hot reload
make build # Build for current platform
make build-release # Build for all platforms
make fmt # Format code
make lint # Run linter (golangci-lint v2)
make test # Run tests
make test-race # Run tests with race detection
make coverage # Generate coverage report- Getting Started - Setup walkthrough
- Configuration - All configuration options
- Deployment - Production deployment strategies
- Static Export - GitHub Pages, Netlify, Vercel
- Architecture - Technical architecture and design
- API - HTTP endpoints and responses
- Runbook - Operations and troubleshooting
- Benchmarks - Performance metrics
Contributions welcome. See Contributing Guide for details.
MIT License - see LICENSE file.
Made with Go