Paste a <form>
We handle storage, double opt-in, consent records, and delivery. You ship a form tag.
Paste a form. No backend. Your lists and campaigns live in your repo.
No credit card required.
Capture from a plain <form>, write campaigns in Markdown, and let your coding agent run the rest.
<!-- no backend: posts straight to CodeOutbox --> <form action="https://co.app/f/newsletter" method="POST"> <input type="email" name="email" required /> <button>Subscribe</button> </form>
--- campaigns/launch.md --- --- subject: Launch week is here 🚀 group: newsletter --- Hey there, here's what shipped this week… $ co send campaigns/launch.md --live ✓ sent to 1,204 confirmed subscribers
# your coding agent, over MCP you ▸ send the launch note to my newsletter claude ▸ send_broadcast(group: "newsletter", confirm: true) ✓ 1,204 sent · skipped 3 suppressed · 0 failed
We handle storage, double opt-in, consent records, and delivery. You ship a form tag.
Groups and campaigns are files — codeoutbox.json and Markdown — reviewed in PRs, deployed by CI.
An MCP server lets Claude Code create lists, check counts, and send — no dashboard required.
Authenticate a domain in one command. Inbox-grade defaults, on by default.
Pay by subscribers. No "contact sales." Open source and self-hostable.
No credit card required · cancel anytime · or self-host for free.
Yes. Your <form> posts straight to CodeOutbox. We store subscribers, handle double opt-in and consent, and send the email. You ship a form tag — nothing to host, nothing to maintain.
It lives in CodeOutbox — or in your own instance if you self-host. Export to CSV or JSON anytime; there's no lock-in. "No backend" means no backend for you, not that we hide your data.
Double opt-in on by default, SPF/DKIM/DMARC, one-click unsubscribe, automatic bounce and complaint suppression, and graduated sending. To send larger broadcasts you authenticate your own domain — and your coding agent does the DNS setup in one command.
Everything. An MCP server exposes tools to create lists, check counts, preview and send broadcasts, and set up domain auth — all from your editor, no dashboard required. Your lists and campaigns live in your repo as files.
Yes. The core is open source and runs from a single container (docker compose up). Hosted is for convenience; self-host is for control. Same features either way.
Free forever up to 1,000 subscribers — no credit card, no trial clock. Paid plans start at $9/mo only when you outgrow it, billed by subscribers.
The CodeOutbox newsletter — captured and sent with CodeOutbox itself. Double opt-in, unsubscribe anytime.