v0.4 · ELv2 · self-hostable

Email infrastructure,
open by default.

A drop-in Resend-compatible API, a typed SDK, broadcasts, contacts, and a real dashboard — running on your AWS SES, your Postgres, your domain. No per-email pricing. No vendor lock-in.

Resend-compatibleHMAC webhooksReact Email
POST /emails
import { Opensend } from "opensend";

const send = new Opensend(process.env.OPENSEND_KEY);

await send.emails.send({
  from: "hi@acme.com",
  to:   "jane@example.com",
  subject: "Welcome to Acme",
  react: <Welcome name="Jane" />,
});
events · jane@example.comlive
email.queued0ms
email.accepted124ms
email.sent418ms
email.delivered1.4s
email.opened37s

5k+
sends/mo · free tier
<1.4s
p50 send → delivered
Resend
API parity
ELv2
free to self-host
// in the box

Everything Resend has.
None of the lock-in.

Resend-compatible REST
Same payloads, same headers, same SDK shape. Migrate by changing a base URL — not your code.
POST /v1/emails
POST /v1/emails/batch
GET /v1/domains
+ 24 more
Typed SDK + idempotency
Opt-in Idempotency-Key on send and per-row keys on batch sends, so retries collapse safely on the server.
retry #1202 sent
retry #2collapsed
retry #3collapsed
key4f9d…
Domain verification
DKIM, SPF, DMARC and click-tracking subdomains written straight to Cloudflare DNS.
TXTos._domainkeyset
TXT@set
TXT_dmarcset
Broadcasts & audiences
Block editor with slash commands. Segments, topics, custom properties, CSV import.
audience: paid · 12,847
72% delivered9,250 / 12,847
Webhooks, signed
Svix-compatible HMAC headers across delivered, opened, clicked, bounced, complained.
svix-id: msg_2x9b…
svix-timestamp: 1730…
svix-signature: v1,Az9…
Runs on your SES quota
Bring your own AWS account. Your sending reputation, your data, your bill — caps only at the SES limit.
Multi-tenant by design
Better Auth with Google OAuth, organization invites, per-tenant suppression list, scoped API keys.
JHAHMK+4 admins · 12 senders
// two ways to run it

Cloud, or yours.

option A
opensend Cloud
option B · default
Self-host
Where it runs
Managed at opensend.dev
Your infrastructure
Setup
Sign in with Google
docker compose up -d
Pricing
Free 5k/mo, $19+ paid
You pay AWS SES only
Data residency
us-east-1 / eu-west-1
Wherever you run it
SES quota
Shared, soft caps
Your own account
Best for
Teams that want zero ops
Teams that want full control
// self-host

Four lines.
Then you own it.

A multi-stage Dockerfile and a docker-compose.yml with auto-migration. Bring your own AWS SES credentials and Postgres — your data stays on your infrastructure, on your network, behind your perimeter.

ELv2
free + modify + self-host
Bun + Next 16
turbopack monorepo
Postgres
drizzle + migrations
~/opensend
$git clone github.com/namuh-eng/opensend
$cd opensend && cp .env.example .env
$docker compose up -d
app ready on :3015
ingester on :3016
// roadmap

Shipping in public.

shipped
HMAC-signed webhooks
Svix-compatible headers
shipped
Email scheduling
EventBridge → SQS workers
shipped
Multi-tenant teams
Org invites + scoped keys
shipped
Built-in analytics
No external dependency
next
SMTP relay
Send without AWS SES
next
Inbound parsing
Reply threading + parsing
opensend / 0.4.0
send.email()

Stop renting your
email infrastructure.

Clone the repo, set your SES keys, run docker compose. The same developer experience you already love — on your servers.