The Broadcast Blog

Notes from building a self-hosted email platform

Technical deep-dives, design decisions, and lessons from the Broadcast team, written for developers who care about how things actually work.

Featured

Broadcast Fits on a 2 GB Server Again

Each new background worker in Broadcast is a full copy of the application, and a 2 GB server started to swap during large sends. Broadcast 2.44 adds Low memory mode: the whole job server runs in one process, chosen on the Jobs page, with no SSH needed.

SC
Simon Chiu
Read article

Topics covered

self-hosted email marketing low memory server 2gb vps email marketing on a small server newsletter software low ram sendy alternative

More posts

Login Codes No Longer Wait Behind Your Newsletter

How Broadcast now decides which email goes first, keeps part of each server’s hourly limit for login codes, and makes large broadcasts wait without going over the limit.

Simon Chiu Read

I Priced Out Vibe-Coding a Copy of My $250 App

I used Broadcast’s full git history to estimate what it costs to rebuild it with Claude Opus 5.5, on the API and on a Claude Max plan. The numbers, the method, and when building your own is the right call.

Simon Chiu Read

Let Subscribers Choose Which Emails They Get, Instead of Losing Them Entirely

Broadcast 2.41 adds subscriber topics, per-topic unsubscribe, a hosted preference page and a consent webhook for every choice.

Simon Chiu Read

Your Team Should Not Need English to Send Your Newsletter

Broadcast 2.39 lets every user run the email marketing dashboard in one of twelve languages, chosen per person, without changing what subscribers see.

Simon Chiu Read

When a Send Breaks Halfway, Pick Up Where It Stopped

Broadcast 2.38 resumes failed broadcasts without double-sending, holds webhook events through an outage, and shows the source of every suppression.

Simon Chiu Read

How to Build a Salesforce Email Template With a Free Drag-and-Drop Builder

Design a responsive HTML email in a free drag-and-drop builder, then paste it into Salesforce Lightning Email Templates or Account Engagement (Pardot). Menu paths, merge field syntax, and the limits to watch for.

Simon Chiu Read

One Webhook When You Purge a List, Not Thousands

Broadcast sends a single subscribers.purged webhook when you purge a channel’s subscribers, and subscribers.purge_failed if the purge stops partway, so connected tools can keep up.

Simon Chiu Read

Was passiert, wenn das Data Privacy Framework fällt?

Das EU-US Data Privacy Framework steht unter Druck. Was ein Wegfall für Newsletter-Tools aus den USA bedeuten würde, plus eine Checkliste für den DSB.

Simon Chiu Read

Let Claude Code Run Your Email Marketing, and Script Your Team

Broadcast 2.35 adds a built-in MCP server at /api/mcp for Claude Code and other clients, a Users API for provisioning users and permissions, per-token API rate limits, and a Last Emails tab that shows every email a subscriber received.

Simon Chiu Read

A Drag-and-Drop Email Builder That Starts From Your Brand

Broadcast 2.34 adds a drag-and-drop email builder for broadcasts, templates and sequences, with a channel brand kit, a preview as any subscriber, and emails rendered as table-based HTML that works in Outlook.

Simon Chiu Read

Two-Factor Authentication, and Letting Cloudflare Do It for You

Broadcast 2.32 adds two-factor authentication with recovery codes, installation-wide enforcement with a grace period, and automatic sign-in for users who pass Cloudflare Access.

Simon Chiu Read

Working in Two Channels at Once, Without Them Getting Mixed Up

Broadcast now puts the channel in each page’s address, so two browser tabs can work in two different channels without interfering with each other.

Simon Chiu Read

DigitalOcean blocks ports 25, 465, and 587. Here is what to do.

DigitalOcean blocks outbound SMTP on ports 25, 465, and 587. Confirm the block from your droplet in one command, get email sending again on port 2525 today, and appeal the block.

Simon Chiu Read

This and this, but not that

Why Broadcast’s segment builder hid its AND condition in plain sight, what 2.30 changes about it, and the data-loss bug that turned up while fixing it.

Simon Chiu Read

The upgrade that never finished

Why a self-hosted upgrade can hang forever on a Postgres lock, what Broadcast 2.28 changes about it, and the Postmark stream and multi-server work that shipped alongside.

Simon Chiu Read

Verify every address you send from, not just the first one

Broadcast now verifies every sender identity on a channel with your email provider, deep-links the warnings to the address they name, and reconciles DNS Health with the provider’s own verdict.

Simon Chiu Read

Announce every release automatically, with an email you still get to approve

Broadcast autopilots can now watch your releases and draft a product update email for each new version, complete with your screenshots and docs links, ready for review.

Simon Chiu Read

Permissions You Can Read at a Glance, and Grant Twenty Channels at a Time

Broadcast 2.24 rebuilds channel permissions around readable roles, plain-language summaries, and bulk apply across many channels at once.

Simon Chiu Read

Knowing When Your Own Server Goes Down

Broadcast 2.25 adds opt-in server health monitoring with down and recovery emails, a diagnose command that collects a support bundle, and a fix command that repairs installation drift.

Simon Chiu Read

One Bounce Should Block an Address Everywhere

Copy a channel’s suppression list to the global list in one action, and manage both lists through the API: how suppressions work across multiple channels in Broadcast 2.23.

Simon Chiu Read

The Segment That Quietly Matched Nobody

Broadcast 2.21 adds a Maintenance section that finds imported data the app cannot use (starting with dates) and repairs it after showing you exactly what would change.

Simon Chiu Read

You Should Know What an Error Report Sends

Broadcast 2.20.1 fixes the Send Report button on the error page and shows you exactly what it will transmit, with email addresses, keys and tokens stripped out.

Simon Chiu Read

Your Install Should Tell You When It’s Out of Date

Broadcast 2.20 tells you when a newer version is available, lets you turn that check off, and lets you reopen the What’s New tour for any past release.

Simon Chiu Read

Export What You’re Looking At: CSV for Subscribers, Broadcasts and Activity

Broadcast 2.19 adds CSV export for subscribers, broadcast performance, and per-recipient activity, scoped to whatever your current search and filters are showing.

Simon Chiu Read

One Customer’s Feedback Email, Shipped

Broadcast 2.18 ships a round of customer-requested improvements: domain search, a sortable per-recipient activity table, template and segment cloning, template tags, and opens and clicks in subscriber activity.

Simon Chiu Read

A Backup on the Same Server Isn’t a Backup

Broadcast 2.17 adds automatic off-server backups to any S3-compatible object storage, with connection testing, upload status, retry, and remote retention.

Simon Chiu Read

The 200 That Didn’t Do What You Asked

Broadcast 2.16 adds API response warnings for successful-but-surprising requests, an Idempotency-Key header for transactional email, and confirmed_at on subscriber creation.

Simon Chiu Read

Ask AI: An Email Marketing Assistant You Actually Own

Ask AI is Broadcast’s in-app assistant. Bring your own API key, pick the model, and keep subscriber data on your server. Included in the license, no AI tier.

Simon Chiu Read

Your SPF Record Will Break When You Least Expect It

Broadcast monitors your SPF, DKIM, and DMARC records continuously and alerts you when a healthy record breaks. Built in, no separate monitoring subscription.

Simon Chiu Read

Email Marketing Software Your AI Agent Can Actually Drive

How Broadcast 2.0 exposes a first-class surface for AI agents like Claude Code to discover, configure, and operate a self-hosted email marketing platform.

Simon Chiu Read

Autopilot: The Newsletter That Writes Its First Draft Itself

Autopilot drafts your newsletter from GitHub commits, RSS feeds, and web pages, in your voice, with a review step before anything sends. Ships in the license.

Simon Chiu Read

Nobody Reads the Changelog

Broadcast 2.15 introduces a What’s New tour that walks you through the features added since your last version, with a screenshot and a link to try each one.

Simon Chiu Read

Making Broadcast Sends Bulletproof: Safe to Crash, Safe to Retry, Safe to Resume

How Broadcast v2.12 made bulk sending idempotent, retryable, and resumable with Postgres constraints and Active Job. A technical walkthrough.

Simon Chiu Read

Double Opt-In Without the Straitjacket

Double opt-in in Broadcast: API-first confirmation, editable templates, six customizable page states, and redirects to your own domain.

Simon Chiu Read

Your List, Your Data Model

How Broadcast treats subscribers as records you shape: custom data fields, opt-in form blocks, CSV column mapping, and typed segmentation with self-updating relative date rules.

Simon Chiu Read

An AI That Reads Your Actual DNS, Not a Blog Post About DNS

Broadcast 2.14 connects Ask AI to real SPF, DKIM and DMARC check results for your domains, so deliverability answers reflect your actual DNS rather than generic advice.

Simon Chiu Read

The True Cost of Email Marketing at Scale (2026)

A three-year cost comparison of email marketing as your list grows from 1k to 100k subscribers: Mailchimp, Beehiiv, and ConvertKit subscriptions vs. self-hosted Broadcast.

Simon Chiu Read

Why We Sell a One-Time License in a Subscription World

Why Broadcast is sold as a one-time license instead of a subscription: the incentive alignment, the trade-offs, and what owning your software actually means.

Simon Chiu Read

Importing a List Shouldn’t Require Rewriting the File First

Broadcast 2.11 adds a preview-and-map step to subscriber imports: see the first rows, map each column to email, name, tags or custom data, and choose your tag separator.

Simon Chiu Read

EU Data Sovereignty for Email Marketers in 2026: The Regulatory Floor Just Moved Again

A developer’s read on EU data sovereignty for email marketing in 2026: DPF, CLOUD Act, NIS2, and what self-hosting actually fixes.

Simon Chiu Read

Ask the Question at Signup, Not in a Survey Six Months Later

Broadcast 2.10 adds a Custom Field block to the opt-in form editor for collecting free-text and multi-line answers into subscriber custom data at signup.

Simon Chiu Read

The Page After the Click Is Part of Your Brand Too

Broadcast 2.8 adds per-state confirmation page text for all six outcomes and an After Confirmation redirect URL so subscribers can land on your own page instead.

Simon Chiu Read

A Segment With a Hardcoded Date Is a Segment That Rots

Broadcast 2.6 adds relative date values (N days ago) to segment rules, so date-based segments stay current automatically instead of needing manual edits.

Simon Chiu Read

Connecting an Email Provider Should Not Take an Afternoon

Broadcast 2.1 introduced guided connection wizards for Postmark, AWS SES, SendGrid and Mailgun, with automatic domain and sender discovery plus webhook registration.

Simon Chiu Read

What Broadcast 2.0 Actually Changed

A look back at what shipped in Broadcast 2.0: Autopilot AI newsletter drafting, an agent-native surface, API rate limiting, editor improvements, and per-broadcast unsubscribe control.

Simon Chiu Read

E2E Email Provider Testing in Rails CI: Verifying Emails Actually Arrive

A technical deep-dive into building end-to-end email provider tests that verify actual email delivery in CI pipelines.

Simon Chiu Read

Building Self-Hosting Rails Applications: Design Decisions & Why

Technical deep-dive into the design decisions that make Broadcast a truly self-hostable Rails application.

Simon Chiu Read

Subscribe via RSS

Get new posts delivered to your favorite feed reader.

View RSS feed