Skip to main content
Plunk is an open-source email platform built on top of AWS SES. It gives developers a complete email infrastructure — transactional emails, marketing campaigns, workflow automations, contact management, and analytics — under a single API and dashboard. You can self-host Plunk on your own infrastructure or use the hosted service at useplunk.com.
Plunk is licensed under AGPL-3.0. If you self-host, consider supporting the project via GitHub Sponsors.

How Plunk compares to alternatives

Plunk is a self-hosted, open-source alternative to managed email services:
PlunkSendGridResendMailgun
Open sourceYesNoNoNo
Self-hostableYesNoNoNo
Built on AWS SESYesNoNoNo
Transactional emailsYesYesYesYes
CampaignsYesYesNoNo
Workflow automationYesYesNoNo
Contact managementYesYesNoYes
The main advantage of Plunk is that you own your infrastructure and data. You pay AWS SES rates directly instead of per-email SaaS pricing, which becomes significant at scale.

Core capabilities

Transactional emails

Send one-to-one emails via the REST API — password resets, order confirmations, notifications. Supports HTML bodies, template variable substitution, attachments, and custom headers.

Email campaigns

Send newsletters and product updates to your full contact list or targeted audience segments. Schedule campaigns in advance or send immediately.

Workflow automation

Build automated email sequences triggered by contact events. Add delays, conditional branches, and webhook steps to create sophisticated lifecycle campaigns.

Contact management

Store and organize contacts with custom data fields. Import via CSV. Create dynamic segments based on contact properties or behavior.

Email templates

Define reusable templates for both transactional and marketing emails. Templates support {{variable}} substitution and can be referenced by ID at send time.

Analytics

Track opens, clicks, bounces, and custom events in real time. Use event data to trigger workflows and build audience segments.

Deployment options

Self-hosted

Run Plunk on your own infrastructure using Docker. You supply an AWS SES account for email delivery and configure the rest via environment variables.
The official Docker image is published at ghcr.io/useplunk/plunk. Pull the latest tag to get started.
What you need to self-host:
  • AWS account with SES enabled (and out of sandbox mode for production sending)
  • A server or container platform (Docker, Kubernetes, Railway, Render, etc.)
  • PostgreSQL database and Redis instance
  • S3-compatible object storage (or AWS S3)
See Self-Hosting for the full deployment guide.

Hosted service

If you don’t want to manage infrastructure, useplunk.com offers a hosted version. Sign up, create a project, and start sending — no servers to maintain.

Architecture overview

Plunk is a monorepo with three main runtime processes:
┌──────────────────────────────────────────────┐
│                  Your App                    │
│         POST /v1/send  POST /v1/track        │
└──────────────────┬───────────────────────────┘
                   │ HTTPS
┌──────────────────▼───────────────────────────┐
│              API Server                      │
│  (Express.js — handles all REST endpoints)   │
└────────────────┬─────────────────────────────┘
                 │ BullMQ (Redis)
┌────────────────▼─────────────────────────────┐
│              Worker Process                  │
│  (Processes email, campaign, workflow queues)│
└────────────────┬─────────────────────────────┘

┌────────────────▼─────────────────────────────┐
│               AWS SES                        │
│        (Delivers emails to inboxes)          │
└──────────────────────────────────────────────┘
ComponentRole
API serverHandles all REST requests. Validates input, writes to Postgres, enqueues jobs via BullMQ.
Worker processConsumes jobs from Redis queues. Calls AWS SES, runs workflow logic, processes campaigns. Runs separately so it can scale independently.
Dashboard (web)Next.js UI for managing contacts, templates, campaigns, workflows, domains, and settings.
PostgreSQLPersistent storage for contacts, events, emails, templates, campaigns, and settings.
RedisJob queue backing store (BullMQ) and general caching.
AWS SESEmail delivery backend. Plunk uses SES send APIs and ingests bounce/complaint events via SES configuration sets.
API requests that trigger email sending are non-blocking. The API returns a response immediately after enqueueing the job. The worker delivers the email asynchronously. This design keeps API response times fast even under load.

API keys

Each Plunk project has two API keys:
  • Secret key (sk_*) — Full API access. Required for /v1/send and all dashboard endpoints. Keep this server-side only.
  • Public key (pk_*) — Limited to /v1/track only. Safe to use in client-side JavaScript.
See API Keys for details on key management.

Next steps

Quick Start

Get your API key and send your first email in minutes.

Self-Hosting

Deploy Plunk on your own infrastructure with Docker and AWS SES.

API Reference

Browse the full REST API documentation.

Verify your domain

Configure DNS records to send from your own domain.

Build docs developers (and LLMs) love