API v1Private beta. The API is stable; send limits are low while the shared domain warms up.

Self-hosting

Self-hosting overview

Run send0 on your own servers and your own domain, with Docker Compose or one Cloudflare Worker.

Self-hosted send0 is the same product as send0.dev: the same REST API, SDKs, MCP server and dashboard. It runs for one team, on infrastructure you own, and receives mail on your domain instead of send0.email.

The current release is v0.2.0.

Two editions

Docker ComposeCloudflare
What runs whereOne server: Postgres, the send0 container and CaddyOne Worker on your Cloudflare account, plus a Postgres you bring (reached through Hyperdrive)
Receiving mailBuilt-in SMTP server on port 25. It checks SPF, DKIM, DMARC and ARC itselfCloudflare Email Routing hands each message to the Worker
Sending mailAny SMTP relay (SMTP_URL), or Amazon SESAmazon SES only
DatabasePostgres 17 in the compose fileAny Postgres. Neon's free plan works
Raw mail and attachmentsA local Docker volume, or any S3-compatible bucketAn R2 bucket
Queuepg-boss, inside Postgres. No RedisCloudflare Queues
Real-time (SSE, wait)Postgres LISTEN/NOTIFYDurable Objects
HTTPSCaddy gets and renews the certificateCloudflare
CostA server with port 25 open, plus your relay's or SES's sending feesCan start at $0 on free plans, plus SES sending fees
Free-tier notesNoneWorkers Free allows 10 ms of CPU per request, which password sign-in can exceed. See limits

How to choose

Pick Docker Compose if:

  • you want mail and data on a machine you control
  • you want to send through an SMTP relay you already use (Postmark, Resend, Mailgun, Google Workspace)
  • your mail domain's DNS isn't on Cloudflare

Pick Cloudflare if:

  • you don't want to run a server, or can't get port 25 open
  • your mail domain's DNS is already on Cloudflare
  • you're fine with Amazon SES for sending

What's different from send0.dev

  • No plan limits. Reply-only free accounts, daily send caps and inbox caps are off. You own the sending reputation.
  • Closed sign-up. Only OWNER_EMAIL can create the first account, and that account owns the install. After that, people join by invite. Set ALLOW_SIGNUP=true to let anyone sign up after the owner.
  • Your domain. Inboxes live on the domains in MAIL_DOMAIN or MAIL_DOMAINS, like agent@agents.example.com.
  • Point the SDKs at your URL. Pass your server's URL as baseUrl (TypeScript), base_url (Python) or SEND0_BASE_URL (MCP). See Docker Compose.

License

The server is AGPL-3.0; the SDKs and the MCP server are MIT.

Next

On this page