An open-source AI coding skill, battle-tested templates, and a weekly field note for builders who want their software to stay legible. Go, SQLite, Litestream, Caddy, systemd, a $5 VPS.
$ boringstack cost --last 30d hetzner cx22 $4.59 cloudflare r2 $0.12 boringstack.org dns $1.25 resend (free tier) $0.00 ──────────────────────────── total $5.96/mo
/boring-stack in any Claude Code session and Claude loads opinionated defaults for that project. Pushes back on Postgres, Vercel, ORMs, Docker, and microservices when they don't fit the archetype. Two sentences plus a question per pushback. Always defers to your call.deploy.sh, Caddyfile, app.service, and Litestream config used in real production. Drop them in, replace the hostnames, ship. Zero magic.Boring Stack is for builders who would rather ship a small, understandable system than rent a distributed platform before the product earns it. The movement is the public practice: publish the defaults, publish the costs, publish the failures, and make the simple path easier to choose next time.
The repo gives agents better defaults. The newsletter keeps those defaults honest by showing how they hold up in real products built by people running the stack.
One line. Works with every major AI coding tool.
$ curl -fsSL https://boringstack.org/install.sh | bash
That clones the repo to ~/.boring-stack and wires it into the tools that have a user-level config (Claude Code, Codex CLI). For tools that only support per-project rules, run this from inside any project where you want the boring stack defaults:
$ curl -fsSL https://boringstack.org/add.sh | bash
Auto-detects your project's existing AI tool configs and drops the right file in each. Falls back to AGENTS.md (the portable convention) if nothing's set up yet.
| Tool | File written |
|---|---|
| Claude Code | ~/.claude/skills/boring-stack/SKILL.md (user) or .claude/skills/boring-stack/SKILL.md (project) |
| Codex CLI (OpenAI) | ~/.codex/instructions.md (appended) |
| Cursor | .cursor/rules/boring-stack.mdc |
| GitHub Copilot | .github/copilot-instructions.md (appended) |
| Cline | .clinerules |
| Continue.dev | .continuerules |
| Aider | CONVENTIONS.md (appended) |
| Gemini Code Assist | GEMINI.md (appended) |
| Windsurf | .windsurfrules |
| Zed | .rules |
| Anything else | AGENTS.md (portable fallback) |
Force a specific tool: … | bash -s -- --tool cursor. Update later by re-running either install command — both are idempotent.
tip: the skill is MIT and stays MIT. Use it, fork it, ignore it, write a better one.
pgloader + a connection string.
.sql files. No runtime layer. Read your own queries.
Restart=on-failure is one line. journalctl is your log aggregator.
<script> tag (htmx from a pinned CDN, swap to self-hosted any time), no build step, no node_modules. Companion JS (Alpine, Stimulus, vanilla) picked by interactivity need. Full SPA toolchain stays in scope when the product genuinely needs one (Figma/Linear class); backend stays boring.
The configs the skill ships with. Each one is derived from real production use, lightly edited to use placeholder hostnames.