" />
Hosting My Own Newsletter | Matthias Endler
I had a newsletter on this blog for years, but I didn’t send a single email for a long time.<br>This is the story of how I finally got it back up and running, and what I learned along the way.
The Tinyletter Years
The old Tinyletter landing page, now a sad 404.
Source: Wayback Machine
For years my setup was a small form on the website pointing at Tinyletter , a small newsletter service that was focused on writers.<br>What I liked about it was the simplicity.<br>I never had to think about email deliverability, bounce rates, suppression lists, SPF, DKIM, DMARC, or any of that.<br>I wrote a thing, hit send, people got it.
The Tinyletter compose page, showing the simplicity of the interface.
It just worked. Then Tinyletter shut down.
A bit of history: Tinyletter was built in 2010 by Philip Kaplan, reportedly coded on a single Sunday, the 31st of October, 2010.
It got acquired by Mailchimp one year later, and quietly became the de facto home for writers who wanted a personal newsletter without thinking about funnels, segments, or A/B tests.
Then in late 2023, Mailchimp (now part of Intuit) announced they’d shut it down.<br>The official wording was that their “business priorities have evolved” and that they were “laser focused on building tools to serve marketers and help small businesses grow.”<br>Writers were never their core customers.
Mailchimp’s shutdown announcement, late 2023.
Source: EmailOctopus
Just before Tinyletter went dark on February 29, 2024, I made a final backup of my subscriber list, but I didn’t have a plan for what to do with it.
Denial
At this point, I became hostile to the idea of using a third-party service.<br>The same story could repeat itself again.
I still looked at all options and bounced off all of them:
Too expensive! Most services price per contact and assume you’re running a business funnel, not writing letters to people.
Too marketing-focused! Templates, drag-and-drop builders, A/B tests, engagement scoring, tracking pixels. The whole vocabulary is wrong. I don’t want to run campaigns; I want to send email!
Not hacker-friendly. No markdown, no CLI, no API I’d actually enjoy using. Everything happens in a web dashboard built for a marketing team.
Not open source. If the next Tinyletter shuts down, I’d like to keep going without having to migrate again.
Tracking by default! Open tracking, click tracking, pixels in every footer. I don’t want to know who opened what. I want to write, you read it (or don’t), the end.
Migrating to Fly.io
People kept asking me when the newsletter was coming back, so I cobbled something together on fly.io.<br>It was a small Rust API, a CSV file with subscribers, and a way to subscribe through the website.<br>The idea was to deal with the sending later, but at least offer a way to sign up for now.
Then the list just sat there.
Turns out, a cold list is a problem all by itself.<br>When you finally do send to a list of people who haven’t heard from you in a long time, mail providers get suspicious and you can get flagged as spam.<br>Suddenly your own newsletter can turn against you.
The Hunt for a Sending Service
This was the hardest part by far.<br>I looked into Resend, Postmark, SendGrid, Mailgun, Amazon SES, and many more.<br>All of them were either quite expensive for a small newsletter, had a terrible API, didn’t comply with GDPR regulations, or were way too complicated.
I was about to give up when I found Plunk.<br>It is open source, the pricing scales with your list size, and the API doesn’t fight me.<br>It does the deliverability work I don’t want to think about (SES integration, bounce handling, suppression list, hosted unsubscribe pages).<br>I’m a paying customer now.<br>I’m not affiliated, just a genuinely happy user.
I even sent them a small contribution and they merged it in ten minutes.<br>This made me feel like I was actually part of a community.
The first real newsletter issue went out to a thousand-plus contacts that hadn’t heard from me in ages.<br>I was bracing for a wave of bounces, but it went fine.<br>Bounce rate around 1%, only very few unsubscribes, and no deliverability issues.<br>Wow!
I didn’t do anything fancy: no batching, no slow warmup, no clever subject line.<br>I sent it all at once and let Plunk (well, SES underneath) auto-prune obviously dead addresses via bounce handling.<br>The one thing I did do was lead the first issue with a short, frank reintroduction – something like “hey, you signed up because you read a blog post of mine once, sorry for the silence” – which I think did most of the work in keeping unsubscribes low.
Cost-wise, one send to the full list costs me roughly $1 .<br>For a newsletter I send irregularly, that’s nothing.
The Plunk dashboard, showing the campaign overview and deliverability report. As you can see, I don’t track who opens my emails.
Source: Plunk
This Feels Like Home!
I realized I could write issues as plain markdown files in a folder, version-controlled, with a small CLI for...