· by Simon Chiu

Plugins for Your Own Email Server, Without Giving Up Control

Until now, every good idea for Broadcast had the same path. I built it into Broadcast, and then every server carried it, also the servers that would never use it. Polls in an email and a referral program are good examples. Both are useful to some lists and noise to others. Neither one belongs in the core of an email server.

Broadcast 3.0 adds plugins. A plugin adds a feature to Broadcast: a page, a panel on a subscriber, a merge tag, a sequence step, a segment rule, an API endpoint. You install it once and turn it on per channel. If you never install one, Broadcast works as before.

The Application > Plugins page in Broadcast. A green line says the plugin runtime is running with 2 plugin processes. The list shows Polls 1.3.0, turned on in 1 of 2 channels, and Referrals, with the link Version 1.3.0 waits for your deploy. An upload form for a .broadcast-plugin file is below.

Your server, so your rules

A plugin runs code on your server, next to your subscriber list. That is the part I spent the most time on, because a self-hosted list is often the reason people run Broadcast at all.

So nothing runs until you read what it wants. Before a deploy, Broadcast shows each permission in plain words, the hooks it adds, and the code itself. An update that asks for a new permission waits for you again.

The deploy screen for Referrals 1.3.0, signed by the plugin directory. The Permissions box lists Read subscribers, Read tags and Change tags, each with one line that says what it allows. Below it, What it adds lists the events, the merge tags referral_link, referral_code and referral_count, and a Referrals page.

After the deploy, the plugin runs in its own process, not inside Broadcast. Its only way to the internet is a proxy that lets it reach the websites its manifest declares, and nothing else. A plugin that fails again and again is turned off by itself. If a published version turns out to be harmful, the plugin directory adds it to a signed blocked list, and your server turns it off in every channel. And if you ever need everything off at once, there is a safe mode.

Updates follow a policy that you set per plugin: automatic, ask first, or pinned to one version. You can pause a plugin, roll back to an earlier version, and an uninstall keeps the plugin’s data for 30 days in case you change your mind.

Polls and Referrals

The first two official plugins are the two examples from the top of this post.

Polls puts a one-click question in an email. Ask “Which topic should next month’s issue cover?”, paste the poll into the broadcast, and the answers count up on the poll page as people click. A vote is one click in the email, with no form and no login.

The Polls page in a channel. The poll Should we ship it? is open with 40 answers: Yes 29 (73%) and Not yet 11 (28%). Below the bars is the email HTML for the poll with a Copy email HTML button, and Close and Delete buttons.

Referrals gives every subscriber a personal share link through a merge tag. When a friend signs up through that link and confirms, the referrer’s count goes up. At the counts you choose, Referrals adds a tag, so a reward is just a sequence that starts from that tag. Three referrals add referral-sticker, and a sequence sends the sticker form. Ten add referral-gift.

The Referrals page in a channel: 21 confirmed referrals and 2 people who referred someone. A box shows the two merge tags to put in an email, referral_link and referral_count, each with a copy button. A Rewards box lists 3 referrals for the tag referral-sticker and 10 referrals for referral-gift.

Build your own

The plugin kit is on npm as @send-broadcast/plugin-kit. broadcast-plugin init makes a new plugin, check tells you what Broadcast would refuse on upload, and serve opens a local sandbox at localhost with fake subscribers, a clock you can move, and the same rules as a real server. You can try a plugin that posts each new subscriber to your CRM, or one that adds a merge tag with the next event date, without a Broadcast server. When it works, pack makes the file that you upload.

Plugins can also be written with an agent. An agent can start a draft from scratch or from a plugin that you installed, and the draft goes through the same permission screen as anything else.

Two smaller things in 3.0

Press Cmd+K (or Ctrl+K) anywhere, type a few letters, and go to a page, a subscriber or a broadcast.

The quick jump box over the subscribers page. The search text is ada, and the result under Subscribers is ada.lovelace@gmail.com, Ada Lovelace.

The sidebar is yours, too. Each user can drag items into the menu or out to More, add dividers, and reset to the default. A teammate who only writes broadcasts can keep a menu of three items.

The Customize menu panel on the left side of the dashboard. In the menu are Subscribers, Segments, Broadcasts, Sequences, Templates, Analytics and Settings with dividers between groups. In More are Autopilot, Transactional, File Assets, Opt-In Forms, Plugins and Access Tokens. Each row has up, down and move buttons, and the panel has Reset to default, Cancel and Save.

Before you upgrade

Make a backup first. If you run your own PostgreSQL server, Broadcast 3.0 needs PostgreSQL 17 or newer; the automatic installation already runs 17. Plugins add two small containers, and a server that runs plugins should have 4 GB of RAM. Without plugins, 2 GB is still enough. The upgrade page has the steps.


See Upgrading to Broadcast 3.0 and the plugins documentation, or read what Broadcast 2.0 actually changed.