Who Mailcheap is for#
Solo newsletter operators cutting SaaS costs
Mailcheap targets one person running one or several newsletters and paying for emails sent rather than subscribers stored. The single-admin model and SES-based pricing match the scale of a solo operator better than any per-subscriber SaaS product.
Skip if:
You need a team of writers, editors, or managers. Mailcheap has one admin account and no roles.
JavaScript developers integrating newsletter signup into an app
The REST API for adding contacts (POST /api/v1/contacts) and creating drafts (POST /api/v1/campaigns) lets you wire newsletter signup directly into any app with an API key. The MIT-licensed Next.js codebase is approachable for modification.
Skip if:
You need a no-code tool your teammates can use without developer involvement. Mailcheap requires environment variable management and server access.
Operators migrating off Sendy or MailWizz
Both Sendy and MailWizz are self-hosted, SES-connected newsletter tools. Mailcheap covers the same core workflow (write, schedule, send, archive, track) with a modern Next.js and MongoDB stack and MIT licensing, which allows modification without a commercial license.
Skip if:
You rely on Sendy's or MailWizz's autoresponders, multi-user management, or existing email templates. Mailcheap has no automation sequences or template library.
Technical founders with a small, engaged list
For a founder with a small list who wants to own the stack, Mailcheap provides the full newsletter workflow at near-zero operating cost. The public archive builds an SEO-indexed issue history with no third-party dependency.
Skip if:
Your list is large enough that managing SES sending limits, monitoring deliverability, and maintaining the codebase adds operational overhead you cannot absorb. A managed newsletter platform handles those concerns for you.
The problem it solves#
Newsletter platforms charge for every subscriber, every month. That billing model means you pay the same whether you send 12 issues a year or 52, and costs climb whether or not your list growth is translating into revenue.
SES charges for the emails actually sent. At Amazon SES rates, 10,000 readers and 4 issues a month is 40,000 emails, about $4. SES alone handles email delivery, with no subscriber management, editor, archive, bounce suppression, or unsubscribe tooling included. Building that from scratch takes weeks. Tools like Sendy and MailWizz fill the gap but come with their own licensing costs and codebases that are not yours to modify without a commercial agreement.
How it solves it#
Pre-send deliverability checks
Before every send, Mailcheap verifies the subject line, preview text, unsubscribe link, email size (Gmail clips messages over 100KB, hiding the unsubscribe link), postal address, and that the sending domain is verified in SES. A campaign cannot be sent until all checks pass.
Multiple newsletters on one install
Each newsletter in the same install has its own from address, reply-to, postal address, signup form, and public archive. Confirmed opt-in and list cleanup settings are configured per newsletter. There is no limit on the number of newsletters per install.
SES event pipeline with auto-pause
SES publishes delivery, bounce, and complaint events to an SNS topic. Mailcheap subscribes at /api/webhooks/ses and updates campaign stats, message status, and a suppression list shared by every newsletter. A send pauses automatically when bounces pass 2% or complaints pass 0.08%, which is below SES's own enforcement threshold.
First-party open and click tracking
Tracking pixels and redirect links run on your app domain (/o/... and /c/...) rather than a third-party service. Clicks within 30 seconds of the send and from known link scanners are filtered out automatically.
Public archive with custom domain support
Each newsletter gets a public archive with per-issue pages, an author page, share images, and a sitemap. You can serve the archive from its own domain by setting ARCHIVE_HOSTS, which keeps issue HTML on a separate origin from the dashboard.
Staged send with engagement ordering
When you start a campaign, you can set a recipient limit to reach your most engaged readers first. The campaign report shows delivery, open, click, bounce, and complaint rates broken down by mailbox provider (Gmail, Outlook, Yahoo, iCloud), so you can review results before sending to the rest of the list.
Strengths and trade-offs#
Strengths
- MIT license, no subscriber pricingThe code is MIT licensed. You can fork it, run it commercially, or modify it without restriction. Running costs are Amazon SES (approximately $0.10 per 1,000 emails per Amazon's pricing), MongoDB Atlas, Upstash QStash, and your host, none of which scale with subscriber count the way SaaS billing does.
- Full subscriber data ownershipContacts, campaigns, and stats live in your MongoDB database. No third-party service holds your list. Moving to a different tool is a CSV export. The suppression list of bounced and complaining addresses is also yours to carry.
- Deliverability tooling includedSPF, DKIM (via SES Easy DKIM), and DMARC configuration guidance are on the Domains page. Automatic bounce and complaint pausing, SES event ingestion, and RFC 8058 one-click unsubscribe headers meet what Gmail and Yahoo require for bulk senders.
- Vercel one-click deploy pathThe README includes a Deploy button that clones the repo to your GitHub account and prompts for the four required environment variables (MongoDB URI, admin email, admin password, session secret). The Vercel project is live in minutes; SES and QStash setup happens after first login.
Trade-offs
- -One-time release, no support or updates plannedThe README states explicitly that issues are disabled and pull requests may not be reviewed. This is a one-time open-source release with no updates planned. Future security patches, dependency updates, and AWS API compatibility are your responsibility to maintain.
- -Single admin, no team accessThe app has one admin account. There is no role separation, multi-user access, or audit log. A team with more than one sender or editor cannot use Mailcheap without modifying the authentication layer.
- -Requires three external services to sendA working Mailcheap install needs MongoDB Atlas, Amazon SES with a verified sending domain (DNS records, DKIM setup, and a production access request to AWS that can take a day), and Upstash QStash for background job scheduling. The README estimates about an hour for setup, mostly waiting for DNS and AWS approval.
- -Serverless rate limits without RedisWithout an Upstash Redis instance, signup and API rate limits run per server instance in memory. On Vercel and other serverless hosts, limits are not shared across instances and reset on each deploy. The README recommends adding Redis before putting a signup form on a high-traffic site.
Mailcheap vs alternatives#
Mailcheap vs Sendy
Both Mailcheap and Sendy are self-hosted newsletter tools that route sending through Amazon SES. The core value proposition is the same: pay for emails sent, not for subscribers stored. The differences are in licensing, features, and maintenance.
| Feature | Mailcheap | Sendy |
|---|---|---|
| License | MIT | Proprietary (one-time purchase) |
| Multi-user | No (single admin) | Yes |
| Autoresponders | No | Yes |
| Tech stack | Next.js, MongoDB | PHP, MySQL |
| Maintenance | One-time release | Actively maintained |
Sendy is the established product in this category, with multi-user access, autoresponders, and years of updates. For a team or anyone who needs automation sequences, Sendy is the practical choice. Where Mailcheap has an advantage is in licensing: MIT means no purchase cost and no restriction on forking. The Next.js codebase is more approachable for a JavaScript developer who wants to modify the sending pipeline or integrate newsletter signup into an existing app.
Mailcheap vs MailWizz
MailWizz is a PHP newsletter platform with a broader feature set: multiple delivery server support (SES, SendGrid, Postmark, SMTP), extensive automation, detailed reporting, and multi-user team management. It is licensed per domain with a one-time fee.
| Feature | Mailcheap | MailWizz |
|---|---|---|
| License | MIT | Proprietary (one-time purchase) |
| Multi-user | No | Yes |
| Delivery servers | Amazon SES only | Multiple (SES, SendGrid, Postmark, SMTP) |
| Automations | No | Yes |
| API | Basic (contacts, drafts) | Extensive |
| Tech stack | Next.js, MongoDB | PHP, MySQL |
MailWizz is the right choice for agencies managing multiple clients, teams with complex automation needs, or operators who want flexibility across delivery providers. Mailcheap is a better fit for solo operators who want MIT-licensed code they can read and extend, a modern JavaScript stack, and no purchase cost.
Quick start#
Deploy on any Node.js server behind HTTPS, or use the Vercel Deploy button in the README for one-click setup.
```bash
git clone https://github.com/marclou/mailcheap.git
npm ci && npm run build && npm start
```What it's built on#
- Languages
- JavaScript
- Frameworks
- Next.jsReact
- Databases
- MongoDB
- Infrastructure
- AWS
FAQ#
Does Mailcheap cost money to run?
The code is MIT licensed and free. Running costs are Amazon SES (approximately $0.10 per 1,000 emails, per Amazon's published pricing), MongoDB Atlas (free tier works for most list sizes), Upstash QStash (free tier to start), and hosting (Vercel free tier works). For 10,000 readers sending 4 issues a month, total sending cost is about $4.
Can I run multiple newsletters from one install?
Yes. Each newsletter has its own from address, reply-to, postal address, public archive, and signup forms. Confirmed opt-in and list cleanup are configured per newsletter. There is no per-newsletter limit.
Is Mailcheap actively maintained?
The README is explicit that this is a one-time open-source release with issues disabled and no updates planned. The code ships working, but future security patches, dependency updates, and AWS compatibility changes are your responsibility. Fork the repo if you need a maintainable base.
How does Mailcheap handle email deliverability?
SES publishes delivery, bounce, and complaint events to an SNS topic; Mailcheap subscribes and maintains a shared suppression list. A campaign pauses automatically if the bounce rate passes 2% or the complaint rate passes 0.08%, which is below SES's own enforcement threshold. RFC 8058 one-click unsubscribe headers are included in every email.
What is needed to set up Mailcheap?
A MongoDB cluster (Atlas free tier works), an Amazon SES account with a verified sending domain and production access approval (AWS typically responds within a day), and an Upstash QStash account for background job scheduling. The README estimates about an hour for the full setup, most of it waiting for DNS propagation and AWS approval.
Similar open-source tools#
Plunk
Transactional email, campaigns, and automations on one contact list.
LinkBreeze
Self-hosted Linktree alternative with one-command Docker deploy
FckSignups
Open-source tools that work instantly, no signup required
fmt
Fast, type-safe C++ formatting that replaces printf and iostreams
listmonk
High-performance newsletter and mailing list manager
Vela
OpenStreetMap and Google data, no account, no Play Services

