A Resend alternative you host yourself, on your own Amazon SES β one container, one Postgres, no Redis. What's different: setup does the AWS work for you (a one-click CloudFormation stack, keys never leave your account) and writes DKIM/SPF/DMARC to Cloudflare. Then it's the API you already know: typed SDK with React Email, CLI, SMTP relay on 587, an MCP server for agents, campaigns, signed webhooks. AWS bills delivery at cost; we never mark it up. FSL source, MIT SDK.
What it is:Β a self-hosted email API and marketing platform that runs on your own Amazon SES account. Think Resend or useSend, but the whole thing is one container next to one Postgres, and the SES account is yours.
Why I built it:Β every transactional-email product I tried either resold SES at 10β20Γ the price, or was "open source" but needed Redis, a worker, an object store and a weekend to stand up. And none of them would do the boring part for me β the IAM policy, the SNS topics, the DKIM/SPF/DMARC records. I wanted one command (curl -fsSLΒ https://sendsprite.com/install.shΒ | sh) and then a wizard that sets up SES with one click (CloudFormation, inΒ yourΒ account, credentials never leave it) and writes the DNS records to Cloudflare for me.
What's in the box
β’ REST API with the shape you already know (POST /api/v1/emails β em_β¦) β’ npm install sendsprite β typed SDK, send({ react:Β }), Next.js webhook helpers, and the same package is the CLI (npx sendsprite emails tail) β’ SMTP relay on 587, so legacy apps, printers and cron jobs get the same pipeline, logs and suppressions β’ @sendsprite/mcp β an MCP server so an agent can check domains, send test mails and read delivery stats, scoped by the same API keys β’ Signed webhooks with retries, plus a server-sent event stream β’ Suppression on hard bounces and complaints, rate limits, bounce-rate alerts β’ Templates (with React Email), contact books, campaigns, one-click unsubscribe β’ Docs and an OpenAPI 3.1 reference served from every instance at /docs
How it's built:Β Bun, Next.js 16, Postgres, Drizzle, pg-boss for jobs (no Redis), BetterAuth. Everything β web, API, jobs, SMTP β runs in one process until you decide to split the worker out. Secrets are stored encrypted in Postgres, not in env. Migrations run on boot, so upgrading is docker compose pull && docker compose up -d.
Licence:Β the server is FSL-1.1-MIT (source-available, becomes MIT after two years); the SDK, CLI and MCP server are MIT.
Hosted option:Β if you don't want to run it,Β sendsprite.comΒ runs it for you β still on your SES, and AWS bills you for delivery directly. We never mark that up. Free tier, Pro $12/mo, Scale $49/mo.
Hi Product Hunt π
I'm Mingu, I make Sendsprite at defy.works.
What it is:Β a self-hosted email API and marketing platform that runs on your own Amazon SES account. Think Resend or useSend, but the whole thing is one container next to one Postgres, and the SES account is yours.
Why I built it:Β every transactional-email product I tried either resold SES at 10β20Γ the price, or was "open source" but needed Redis, a worker, an object store and a weekend to stand up. And none of them would do the boring part for me β the IAM policy, the SNS topics, the DKIM/SPF/DMARC records. I wanted one command (curl -fsSLΒ https://sendsprite.com/install.shΒ | sh) and then a wizard that sets up SES with one click (CloudFormation, inΒ yourΒ account, credentials never leave it) and writes the DNS records to Cloudflare for me.
What's in the box
β’ REST API with the shape you already know (POST /api/v1/emails β em_β¦) β’ npm install sendsprite β typed SDK, send({ react:Β }), Next.js webhook helpers, and the same package is the CLI (npx sendsprite emails tail) β’ SMTP relay on 587, so legacy apps, printers and cron jobs get the same pipeline, logs and suppressions β’ @sendsprite/mcp β an MCP server so an agent can check domains, send test mails and read delivery stats, scoped by the same API keys β’ Signed webhooks with retries, plus a server-sent event stream β’ Suppression on hard bounces and complaints, rate limits, bounce-rate alerts β’ Templates (with React Email), contact books, campaigns, one-click unsubscribe β’ Docs and an OpenAPI 3.1 reference served from every instance at /docs
How it's built:Β Bun, Next.js 16, Postgres, Drizzle, pg-boss for jobs (no Redis), BetterAuth. Everything β web, API, jobs, SMTP β runs in one process until you decide to split the worker out. Secrets are stored encrypted in Postgres, not in env. Migrations run on boot, so upgrading is docker compose pull && docker compose up -d.
Licence:Β the server is FSL-1.1-MIT (source-available, becomes MIT after two years); the SDK, CLI and MCP server are MIT.
Hosted option:Β if you don't want to run it,Β sendsprite.comΒ runs it for you β still on your SES, and AWS bills you for delivery directly. We never mark that up. Free tier, Pro $12/mo, Scale $49/mo.
Repo:Β github.com/defy-works/sendspriteΒ Β· Docs:Β sendsprite.com/docs
I'll be here all day. Happy to answer anything β especially "why not just use X" questions, those are the useful ones.