Build web apps the boring way.

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

What this is

  1. The skill. Type /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.
  2. The templates. The exact deploy.sh, Caddyfile, app.service, and Litestream config used in real production. Drop them in, replace the hostnames, ship. Zero magic.
  3. The manifesto. Seven principles for shipping software that stays out of your way. Quote it, link it, fork it. Read the manifesto.
  4. The movement. A weekly newsletter on how to build with Boring Stack: real costs, boring decisions, restore drills, launch notes, template changes, and war stories from people running the stack.

The movement

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.

Join the movement

Get Boring Stack Weekly

One practical email each week on how to build with Boring Stack: what shipped, what broke, how the bill changed, which agent defaults improved, and what the latest restore drill taught. The newsletter is where the build stays public.

Install

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.

What gets written, per tool
ToolFile 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
AiderCONVENTIONS.md (appended)
Gemini Code AssistGEMINI.md (appended)
Windsurf.windsurfrules
Zed.rules
Anything elseAGENTS.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.

What the skill picks

Templates

The configs the skill ships with. Each one is derived from real production use, lightly edited to use placeholder hostnames.