Every change to Buttondown, even the small ones. (Those tend to be the important ones, after all.)


When we launched the fancy new filtering mechanism in November, there were two big pieces of feedback:

  1. "This is cool, but how do I just see the total number of subscribers I have?"
  2. "This is cool, but do I really have to futz with all these filters just to see what drafts I have?"

There's always a balance between smart, opinionated defaults and total freedom; the previous iteration of the filtering mechanism was too much on the freedom side. Every page on which you can filter now has a few smart defaults that you can use to quickly get to the information you want. For example, on the "Subscribers" page, you can now see the total number of subscribers you have; on the "Emails" page, you can quickly filter to just your sent emails or your drafts.

I wanted to get this iteration out there because it's a strict improvement over the previous one, but there's more to come.

The emails page is now faster. This is because — nerd alert! — it's now running on the same code that powers Buttondown's external-facing APIs.

The page isn't fast enough. Buttondown should feel as fast as a native app, and it's not there yet. Getting there requires a number of investments:

  1. Smarter handling of local-first data
  2. Better caching
  3. Front-end optimizations

But one big first step was just speeding up the backend of the page: the part where Buttondown asks a database for all of your emails and then sends them to your browser. And that's now done!


You can now hook up an RSS feed to your newsletter to automate the process of adding new content to your newsletter.

This is a great way to keep your newsletter fresh and up to date, and the first of many steps forward in making Buttondown the best way to run a newsletter alongside an existing publication. (Write once, publish everywhere!)

This was a pretty big and gnarly feature to build out, and there's more to go. But it's a good start — a dozen newsletters have been quietly humming away using this infrastructure for the past month and I'm excited to see what people do with it now that it's open to the public.

You can start by getting your feed hooked up or, if you'd prefer, just read more about the various knobs and whistles in the documentation.

Email analytics were slow for those of you on the larger side of the subscriber count spectrum. I have written a lot of code (and also deleted a lot of code) to make that situation better: it should take now on the order of seconds to pull in tens of thousands of events, rather than tens of seconds.

There's a lot in store for analytics this year: I'm excited to start pulling in and surfacing web analytics, subscription funnel data, conversion rates, and more. But first, the existing stuff needed to be faster — and now it is.

January 17, 2023

It's literally just a lightning bolt

Buttondown's had a dynamite Zapier integration for a while now, but the error handling was... rough. You'd get a status code and it'd say "unexpected input" and that was that.

Forgive me! I built the integration way back in the halcyon days of 2018. I know better now.

Now, when you get an error, you'll get a more helpful message. For example, if you try to create a subscriber with an invalid email address, you'll get this:

  "code": "email_invalid",
  "detail": "The email address provided of '' is invalid."

This makes it easier to debug your awry Zaps and to programmatically handle edge cases.

A screenshot of the modal that informs you to add ALT text

Buttondown now has a friendly reminder to add alt text to your images before sending your email.

Adding alt text (alternative text) to your images is a great way to make sure your emails are accessible to everyone, including people who use screen readers. It's also a great way to make sure your emails are SEO-friendly!

January 11, 2023

It's not super obvious how you should segment your audience. Do you keep them all in one big newsletter and break them up with tags? Do you spin up multiple newsletters and keep them sequestered that way?

We've written a short guide to help answer some of those questions. Hope it helps and let us know if you have any questions!

By default, Buttondown grabs the first image you add to your email as the 'share image' that shows up on Twitter and Facebook. You've been able to optionally add a custom image in the "fiddly bits" modal for a while now, but now you can also choose between all other images in your email without having to upload it a second time.

If you're using Buttondown's writing interface in WYSIWYG mode, you can now add custom HTML classes and ALT text to your images without having to drop down to HTML.

Click on the image once you've uploaded it and a little "edit" button should appear in the bottom-left corner!

(Over time, this will also allow you to thumbnail the image, add alignments and captions, and more. But, you know, baby steps.)

I'm still working on the documentation (as part of a shift to move the API reference to be generated from the API spec), but you can now execute bulk actions through the API. This is a very powerful feature that allows you to do things like bulk apply tags or metadata.

The API spec is available on GitHub!

You can now find the OpenAPI spec for Buttondown on GitHub. It's a much better version of the one we had on the site before, and it's also a lot easier to keep up to date.

Check it out here!

December 1, 2022

You can now include a link to your Mastodon account, just like your Twitter (et al) accounts!

Filtering on /v1/subscribers is now stronger:

  1. You can filter down to subscribers who do not have a certain tag with /v1/subscribers?-tag=foo
  2. You can filter down to subscribers with specific metadata with /v1/subscribers?metadata[foo]=bar

Buttondown warns you when you're about to manually add a subscriber that already exists; additionally, when manually adding a subscriber you can now optionally activate them automatically instead of asking them to confirm their address.

  1. Added hotkey support for bulk actions like 'deleting emails' or 'reminding subscribers'.
  2. Authors can now opt out from receiving notifications for new premium subscribers (or unsubscribers). They can be taxing!

Added support for /v1/emails/:id/analytics, which returns aggregated analytic details about an email.

You can now select all items that match a given filter for a bulk action (such as deleting subscribers), even if there are so many items that they don't fit on a single page.

  1. Archive list pages should now load around twice as fast.
  2. The "address" field has been removed for now. No more random locations at the end of your emails!

You can now change the canonical URL of your emails to an external URL (if you're, say, cross-publishing alongside an external publication or blog.)

You can now modify the slug and metadata of emails before sending them.

Launched a brand-new writing interface.

You can now filter your emails by their source (source meaning from the API, from an import, from the app itself, and so on.)

October 18, 2022

Added an official glossary to the documentation, because there are a lot of annoying acronyms and buzzwords when it comes to emails!

Before filtering data on a list page, Buttondown gives you a preview of how many objects fall under that filter. This is combinatorial, so you can see how many subscribers with the premium tag came from a given UTM source and so on!


Added a public-facing changelog. (Hey, is that meta or what?)

Rebuilt the settings interface into a unified page to make things more navigable and accessible.


Paid subscribers whose most recent payment is past due (i.e. they have not paid for the current month) will be marked in the Subscribers page.


You can now filter your subscribers by UTM source:


Exports have more descriptive filenames.


You can now sort your subscribers by tag:

You can now programmatically gift (or ungift) subscriptions through the API.

You can now resubscribe subscribers who have accidentally unsubscribed.

You can now drill into the 'deliveries' list on an email to see a full list of who received the email.

"Page not found" pages on the hosted archives now include a CTA for visitors to subscribe.

You can now choose specifically what collections of data you're interested in exporting from Buttondown.

July 14, 2022

You can view all 'events' associated with your newsletter in a dedicated view. Read more about it here!

You can now attach arbitrary files like PDFs or documents to your emails.

You can now secure your account through an MFA token.

You can now send previews or 'teasers' of premium-only emails to unpaid subscribers.

You can now send old emails from your archives to specific subscribers.