Mail Buddy
An open-source, self-hostable email template manager and delivery API. Ships as one compiled binary — no Docker, no separate frontend deployment, no external database process.
What's implemented
An Elysia (Bun) API server with a React admin dashboard embedded directly into the executable.
Recursive Templates
Live compilation, Handlebars placeholder aggregation, Desktop/Mobile previews, and recursive {{embed "uuid"}} resolution.
Local & S3 Storage
Store email assets locally or in AWS S3, MinIO, Cloudflare R2, or DigitalOcean Spaces with live connection testing.
Single & Batch Delivery
SQLite-backed queue with exponential retry backoff, multi-recipient fan-out, and personalized batch sends.
User Auth & Scoped API Keys
First-run admin setup, team user management with random password generator, and scoped microservice API keys.
Suppression Lists
Per-template and global suppression with automatic HMAC-signed one-click unsubscribe links.
Typed Node SDK
mail-buddy-sdk covers every endpoint with zero runtime dependencies and full TypeScript types.
Quickstart
Requires Bun 1.x.
bun install # installs all workspaces (apps/api, apps/web, packages/sdk)
bun run web:build # builds the dashboard to apps/web/dist
bun run api:start # generates the embedded-asset manifest, runs migrations, starts the server
Open http://localhost:3000 to set up your primary administrator account and access the dashboard.
Single binary, minimal footprint
The API server and the dashboard both live inside the binary — only three things live outside it.
mail-buddy # the binary itself (API + dashboard)
mail-buddy.sqlite # the database (path configurable via DATABASE_PATH)
uploads/ # locally-stored assets (when using local storage provider)
Or grab a prebuilt binary from GitHub Releases instead of compiling one yourself.