Self-hosting

As your list grows

A new instance runs on Cloudflare’s free Workers plan with your starting Amazon SES limits. That suits a list of up to about 5,000 subscribers. Past that, two limits matter: how fast SES lets you send, and how many database writes the free plan allows a day.

In this guide, you raise your SES limits, which helps on either plan, and upgrade to Workers Paid, which a larger list needs. Then you see how long a send takes after each.

1. Raise your SES limits

SES caps how many emails your account sends a day, and how many a second. A send that hits the daily quota waits, emails you, and resumes on its own once the quota frees up. Raising your maximum send rate to 50 a second costs nothing, and it makes every send faster.

  1. Ask AWS for a higher daily quota and a maximum send rate of 50, as AWS’s Increasing your Amazon SES sending quotas describes.

  2. When AWS grants it, the SES Account dashboard shows your new rate. In wrangler.jsonc, set the production block’s SES_MAX_SEND_RATE to match.

  3. Commit the change, and push it:

    git commit -am "Match the SES send rate"
    git push
    
  4. Deploy:

    npx wrangler deploy --env production
    

2. Upgrade to Workers Paid

On the free plan, D1 allows a fixed number of database writes a day. A send to about 7,000 recipients uses them all, and then the whole app stops until midnight UTC. Until you upgrade, the app warns the publisher before a send or an import that could use up the day. It’s recommended to upgrade from about 5,000 subscribers.

  1. Upgrade your Cloudflare account to the $5 Workers Paid plan, which has no daily limit on writes.

  2. In wrangler.jsonc, add "SUBREQUEST_BUDGET": "10000" to the production block’s vars. It tells the app it’s on Workers Paid, so each minute sends far more (SUBREQUEST_BUDGET).

  3. Commit the change, and push it:

    git commit -am "Run on Workers Paid"
    git push
    
  4. Deploy:

    npx wrangler deploy --env production
    

How long a send takes

Setup1,000 subscribers5,000 subscribers10,000 subscribers
Free plan, a starting SES rate of 14about 18 minutesabout 1.5 hoursover the free plan’s daily writes
Free plan, SES rate raised to 50about 5 minutesabout 25 minutesover the free plan’s daily writes
Workers Paid, SES rate of 14about 2 minutesabout 7 minutesabout 15 minutes
Workers Paid, SES rate of 50under a minuteabout 2 minutesabout 4 minutes

Check it

  1. The SES Account dashboard shows the maximum send rate you set in SES_MAX_SEND_RATE.

  2. On Workers Paid, the import screen under Subscribers → Import reads “CSV or .txt, up to 10,000 rows.”