Skip to content
RESOURCES

Everything else

The deploy guide, what changed lately, the deliverability words nobody explains, how security works when there’s no vendor in the path, and a map of every page.

DEPLOY TO CLOUDFLARE

One click, your account,
about a minute.

The button creates the queues, the D1 database, the KV namespaces and the R2 bucket, then builds and deploys — there is no command to run afterwards, because the build runs it. Nothing needs configuring to boot either: the instance migrates its own schema, generates its own signing secret and learns its own public URL on the first request. Nothing is sent to us — there is no us in the path.

FROM THE BROWSER

Press the button and pick your Cloudflare account. The form has no fields on it at all, because there is nothing you have to know yet. The queues, D1, KV and R2 are all created during the build, so there is nothing to run afterwards. Then open /setup and claim it: the first person to reach that page owns the instance.

Deploy to Cloudflare1-CLICK
FROM YOUR TERMINAL · OPTIONAL
DEPLOY
$ npx mailysend provision
✓ queues · analytics datasets
$ npx mailysend deploy
✓ workers · do · d1 · kv · r2
✓ schema migrated on first request
ready https://mailysend.<you>.workers.dev ~40–90s

Or clone the repo and run pnpm run deploy:cf with your own wrangler config — it builds both Workers and hands the upload to wrangler. Reviewable, scriptable, CI-friendly. Budget about a minute end to end — most of it DNS propagation, which is out of anyone’s hands.

Prerequisites
A Cloudflare account with Workers Paid ($5/mo, required for sending) and a domain you control.
Updates
npx mailysend upgrade — migrations run in order, with a dry run first.
Rollback
Worker versions are immutable; rollback flips traffic back in about a second.
Leaving
Export everything to R2 and delete the Worker. Your data was always yours.
One thing the Worker cannot do

smtp.your-domain.com:587 cannot run on Workers — there is no inbound TCP listener — so the optional SMTP relay ships as an OCI container image you run yourself, on Cloudflare Containers, Fly, or any VM. Nothing else here needs it. SMTP relay docs →

Changelog

v0.1.0
  1. · v0.1.0
    First public release

    The API, the dashboard, the four transports, the CLI and the one-click deploy. Every tagged release →

Deliverability glossary

The eight terms that decide whether your email arrives. In plain language, with what to actually do.

SPF
A DNS record listing who may send as your domain. One record, no more than ten lookups deep.
DKIM
A cryptographic signature proving the message wasn’t altered. Use 2048-bit keys and rotate yearly.
DMARC
Tells inboxes what to do when SPF and DKIM disagree. Start at p=none, read reports, then quarantine.
BIMI
Your logo in the inbox, once DMARC is enforced. Needs a VMC certificate; nice-to-have, not urgent.
Hard vs soft bounce
Hard means the address is dead — never retry, suppress immediately. Soft is temporary and worth retrying.
Complaint rate
Spam-button presses over sends. Keep under 0.1%; above 0.3% and providers start blocking you.
Inbox placement
The number that matters: delivered and not in spam. Only seed testing and provider signals reveal it.
Stream separation
Keep OTPs away from newsletters — different tags, ideally different subdomains, so marketing can’t sink auth.

Guides

Task-shaped, and several of them run the product's own code in the page rather than describing what it would do.

DeployBeginner · 9 minDeploy MailySend to your own Cloudflare accountOne click, about a minute, and the resources it creates in your account. What the deploy button actually provisions, and what it deliberately leaves for you.DeployBeginner · 8 minClaim a fresh instance and choose how you will sign inA newly deployed instance has no owner, and the first person to reach /setup takes it. Here is how the claim works, how to close the window early, and which of the six sign-in doors to open.DeployAdvanced · 14 minSelf-host MailySend on a plain Node serverThe same application, without Cloudflare in front of it: a Node build behind nginx, run under a process manager, with the platform bindings pointed somewhere else.DeployIntermediate · 12 minChoose a sending transport: Cloudflare, SES, Resend or SMTPFour transports with genuinely different ceilings and genuinely different event data. The real limits, straight out of the adapters, plus what failover does and does not buy you.DeliverabilityBeginner · 13 minSPF, DKIM and DMARC, explained by the records you actually publishThe three records, what each one proves, and the exact values for your transport. Generated from the same code the setup screen uses, so the guide cannot drift from the product.DeliverabilityBeginner · 10 minVerify a sending domain, and read the verification screen honestlyHow verification checks each record over DoH, what the four states mean, and why a domain can sit at pending for an hour without anything being wrong.
All 26 guides →

Security, privacy & terms

MailySend is software, not a service, which changes the security story: your mail never touches infrastructure we operate. What we owe you is safe defaults and readable code.

Data path
Your Workers, your Durable Objects, your R2, your region. We have no production access, no telemetry on message content.
Auth
Dashboard behind Cloudflare Access (SSO, MFA, device posture). API keys are scoped, hashed and revocable.
Compliance
Cloudflare’s own certifications cover the infrastructure. As the operator, you’re the data controller — the repo ships a DPA template and sub-processor list.
GDPR erase
Deleting a contact cascades through D1, KV suppressions, R2 attachments and the event stream.
Disclosure
Report vulnerabilities through the repo’s security policy; fixes ship as a patch release with an advisory.
Licence & terms
MIT. Use it commercially, fork it, resell it. No warranty, no support obligation — the honest trade for $0. Terms →

Status

All dependencies operational

Your instance’s uptime is Cloudflare’s uptime — there’s no MailySend service to go down. This page tracks the Cloudflare products MailySend depends on, plus the health of the SDK registries and the docs.

  • Workersoperational
  • Email Serviceoperational
  • Email Routingoperational
  • Queues · DO · D1 · R2operational
  • Workflowsoperational
  • SDK registriesoperational
YOUR ACCOUNT, YOUR MAIL

Nothing to sign up for. Just deploy it.

One command, about a minute end to end — most of it DNS propagation, which is out of anyone’s hands.