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.

Tests status Build and Release status MIT License

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.