Transactional email that belongs to you.
A clean, Resend-inspired API for sending email — open-source, self-hosted, running on AWS SES today and Vulos Deliver as it matures.
Part of the Vulos OS suite ![]()
Status: deprioritized. vesend is not under active development. The Vulos suite's current focus is Mail and OS; vesend is kept available as-is and is effectively community-maintained. It has not been deprecated or removed — but expect no roadmap work, and use it at your own risk. If you depend on it, pin a commit and be prepared to maintain your own fork.
We love what Resend did for developer email — a clean JSON API, instant setup, and a developer experience that finally made transactional email feel good. vesend takes the same philosophy and puts it on infrastructure you own and control.
vesend is a transactional email API server shipping as a single self-contained Go binary. Point it at AWS SES and get a clean REST API for sending email, managing custom domains, issuing scoped API keys, and receiving HMAC-signed delivery webhooks — with no external database and no cloud dependency.
It is developer infrastructure — not a Workspace product tile. Deploy it alongside your app, or run it as a shared service for your organisation. Hat tip to Resend for raising the bar.
curl -sX POST https://send.yourdomain.com/v1/emails \
-H "Authorization: Bearer vsk_..." \
-H "Content-Type: application/json" \
-d '{
"from": "hello@yourdomain.com",
"to": ["customer@example.com"],
"subject": "Welcome aboard.",
"html": "<p>You are in. <strong>Let us go.</strong></p>",
"text": "You are in. Let us go."
}'- Single binary, no database — embedded bbolt by default; no external services required for self-hosting
- Postgres seam — set
DATABASE_URLto share one Neon/Postgres instance with other Vulos products (all tables in thevesendschema) - AWS SES backend — Easy DKIM, suppression list, rate limiting, sandbox detection; Vulos Deliver takes over as it matures
- Clean send API —
POST /v1/emailsandPOST /v1/emails/batchwith HTML, text, headers, and base64 attachments - Custom sending domains —
POST /v1/domainsreturns the full DNS record set (DKIM CNAMEs, SPF, DMARC, custom MAIL FROM) for multi-tenant sending - Delivery events —
GET /v1/emails/{id}for status; HMAC-signed webhooks foremail.sent,email.failed,email.bounced,email.complained - Scoped API keys —
vsk_prefix, sha256-hashed at rest, per-key rate limiting, fine-grained scopes - Open-core — fully self-hostable; Vulos Cloud adds metering, billing, and managed multi-tenancy
git clone https://github.com/vul-os/vesend.git
cd vesend
export AWS_REGION=us-east-1
export AWS_ACCESS_KEY_ID=AKIA...
export AWS_SECRET_ACCESS_KEY=...
go run ./cmd/vesend
# open http://localhost:8080/healthzOn first start, a bootstrap admin key is printed to stdout. Use it to create scoped keys for your apps.
See docs/GETTING-STARTED.md for the full walkthrough.
| Method | Path | Scope | Description |
|---|---|---|---|
POST |
/v1/emails |
send |
Send a single email |
POST |
/v1/emails/batch |
send |
Send up to 100 emails |
GET |
/v1/emails/{id} |
send |
Get delivery status |
POST |
/v1/domains |
domains:write |
Add a custom sending domain |
GET |
/v1/domains |
domains:read |
List domains + DNS records |
POST |
/v1/domains/{id}/verify |
domains:read |
Poll verification status |
POST |
/v1/keys |
keys:write |
Create a scoped API key |
GET |
/v1/keys |
keys:write |
List active keys |
DELETE |
/v1/keys/{id} |
keys:write |
Revoke a key |
POST |
/v1/webhooks |
webhooks:write |
Register webhook endpoint |
GET |
/v1/webhooks |
webhooks:write |
List webhooks |
DELETE |
/v1/webhooks/{id} |
webhooks:write |
Remove a webhook |
GET |
/healthz |
— | Liveness probe |
Full reference: docs/API.md
Vulos is an open, self-hostable web OS and app suite. vesend is the email infrastructure layer of that ecosystem — usable entirely standalone as developer infrastructure, or integrated with Vulos Cloud for managed metering and multi-tenancy.
Other Vulos products: Mail (mail + calendar + contacts), Talk (team chat), Meet (video), Office (collaborative docs), Workspace (the open suite shell).
go build ./cmd/vesend # produces ./vesend binary
go test ./... # hermetic — no AWS credentials needed| Mode | How to activate | Notes |
|---|---|---|
| bbolt (default) | No env var needed | Single-file embedded DB; self-hosted single-binary; no external services |
| Postgres | Set DATABASE_URL or VULOS_DATABASE_URL |
Schema vesend; shared Neon database; run vesend migrate up first |
# Postgres — Neon or self-hosted
DATABASE_URL="postgres://user:pass@host/db?sslmode=require" vesend migrate up
DATABASE_URL="postgres://user:pass@host/db?sslmode=require" vesend| Library | Role |
|---|---|
| vulos-deliver | SES/SMTP sender, DKIM/SPF/DMARC record generation |
| go.etcd.io/bbolt | Embedded key/value store (default backend) |
| github.com/jackc/pgx/v5 | Postgres driver + connection pool (cloud backend) |
MIT — © 2026 Vulos Contributors