What Makes Plunk Unique in the Email Ecosystem?
Most transactional email APIs (such as Resend or Postmark) focus strictly on point-to-point delivery: your backend executes an API call with an email payload, and the provider routes it via SMTP. Marketing platforms (Mailchimp, Customer.io, Klaviyo) focus on subscriber lists and drip campaigns, charging steep contact-based subscription fees ($100-$500/mo for 20k contacts).
Plunk bridges both worlds in an open-source architecture. It provides:
- Transactional Email API: Fast REST and Node.js SDK for instantaneous password resets, receipts, and order confirmations.
- Event-Driven Automation: Call
plunk.events.track({ event: 'signed-up', email })from your frontend or backend, and Plunk automatically executes scheduled multi-step drip email journeys. - Broadcasts: Send newsletters and product announcements without paying separate contact storage penalty taxes.
- 100% Self-Hostable: The entire stack (Next.js frontend, backend event ingest, BullMQ job runner) is published as a single Docker container under the AGPL license.
Plunk Cloud Pricing Tiers Compared (2026)
| Feature / Limit | Free Plan | Growth Plan | Scale Plan | Enterprise |
|---|---|---|---|---|
| Monthly Base Cost | $0 / month | $15 / month | $50 / month | Custom contract |
| Included Monthly Emails | 3,000 / month | 20,000 / month | 100,000 / month | 500,000+ |
| Overage Rate | Hard capped | $0.50 per 1,000 emails | $0.50 per 1,000 emails | Volume discounts |
| Max Projects / Environments | 1 project | 3 projects | Unlimited projects | Unlimited |
| Event Tracking & Automated Flows | Included | Included | Included | Dedicated SLA |
| Custom Sending Domains | 1 domain | Unlimited | Unlimited | Unlimited |
| API Rate Limits | 10 req / sec | 50 req / sec | 200 req / sec | Custom burst |
Self-Hosting Plunk with Docker Compose: Architecture & Setup
Self-hosting Plunk requires three core services: the Plunk application server, a PostgreSQL database for contacts and events, and a Redis instance for message queues. Here is a production-grade docker-compose.yml setup connecting Plunk directly to Amazon SES:
version: '3.8'
services:
plunk:
image: useplunk/plunk:latest
restart: always
ports:
- "8080:8080"
environment:
- DATABASE_URL=postgresql://postgres:secretpassword@postgres:5432/plunk
- REDIS_URL=redis://redis:6379
- JWT_SECRET=supersecretjwttokenmustbe32charslong
- AWS_ACCESS_KEY_ID=AKIAEXAMPLEKEYID
- AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
- AWS_REGION=us-east-1
- APP_URL=https://email.yourdomain.com
depends_on:
- postgres
- redis
postgres:
image: postgres:16-alpine
restart: always
environment:
- POSTGRES_DB=plunk
- POSTGRES_PASSWORD=secretpassword
volumes:
- plunk_pgdata:/var/lib/postgresql/data
redis:
image: redis:7-alpine
restart: always
volumes:
- plunk_redisdata:/data
volumes:
plunk_pgdata:
plunk_redisdata:
Sending Transactional Emails via Plunk (Node.js SDK)
Sending an email with Plunk using modern TypeScript requires fewer than 10 lines of code:
import Plunk from '@plunk/node';
// Connect to Plunk Cloud or your Self-Hosted Instance
const plunk = new Plunk(process.env.PLUNK_API_KEY, {
baseUrl: 'https://email.yourdomain.com/v1', // Omit for Plunk Cloud
});
async function sendWelcomeEmail(userEmail: string, userName: string) {
const result = await plunk.emails.send({
to: userEmail,
subject: 'Welcome to CheckAPICost!',
body: `<h1>Welcome aboard, ${userName}!</h1><p>Start calculating cloud costs immediately.</p>`,
subscribed: true,
});
console.log('Delivered email ID:', result.id);
}
Production Scenarios & Financial Breakdown
Workload: 5,000 monthly signups receiving welcome emails, password resets, and invoices.
Plunk Cloud: Fits comfortably within the Growth plan for $15/mo. Zero server maintenance, zero Docker updates, and zero AWS SES sandbox hassle.
Self-Hosted SES: $5/mo VPS + $1.50 SES fee = $6.50/mo. Saving $8.50/month is generally not worth the time required to manage server security updates and monitoring.
Verdict: Pick Plunk Cloud for convenience.
Workload: Active notification feeds, daily digest summaries, and marketing product updates.
Plunk Cloud: Scale Plan ($50 base for 100k) + 150k overages ($75) = $125.00/month.
Self-Hosted SES: $5/mo Hetzner VPS + $25.00 SES API fee = $30.00/month.
Verdict: Self-hosting saves $95.00/mo ($1,140/year) with minimal Docker maintenance.
Workload: High-frequency transaction receipts and multi-region platform notifications.
Plunk Cloud: Scale Plan + 900k overages = $500.00/month.
Self-Hosted SES: 2 vCPU VPS ($12/mo) + Dedicated IP ($24.95/mo) + SES send fee ($100) = $136.95/month.
Verdict: Self-hosting delivers $363/month in net savings ($4,356/year) with complete data sovereignty.
Production Deliverability & Security Checklist
v=DMARC1; p=reject; rua=mailto:[email protected] to satisfy 2026 Google and Yahoo bulk-sender inboxing mandates.maxmemory 512mb and maxmemory-policy allkeys-lru on self-hosted Redis to avoid out-of-memory crashes during high-volume broadcast spikes.