Back to MailNest

MailNest Documentation

Free self-hosted email inbox on Cloudflare

Quick Start

Get your own email inbox in minutes.

1

Clone Repository

Clone the MailNest repository from GitHub.

git clone https://github.com/arosyihuddin/mailnest.git && cd mailnest
2

Run Installer

The installer handles everything: Cloudflare auth, D1 database, DNS, and email routing.

./install.sh
3

Access Dashboard

Open your browser and navigate to your custom domain.

https://mail.yourdomain.com
4

Receive Emails

Start receiving emails at any address on your domain.

anything@yourdomain.com → your dashboard

Prerequisites

  • A Cloudflare account (free tier)
  • A domain added to Cloudflare with Email Routing enabled
  • Bun runtime installed (installer handles this)
  • Git installed

API Endpoints

REST API reference for MailNest.

MethodEndpointDescriptionAuth
POST/api/authLogin (password verification)-
PUT/api/authReset password (requires secret key)-
DELETE/api/authLogout (session cleanup)-
GET/api/authCheck session validityRequired
GET/api/emailsList emails (paginated, filtered by folder/search/address)Required
GET/api/emails/:idGet single email with attachmentsRequired
PATCH/api/emails/:idUpdate email (read, starred, folder)Required
DELETE/api/emails/:idPermanently delete emailRequired
PATCH/api/emails/bulkBulk update emailsRequired
DELETE/api/emails/bulkBulk delete emailsRequired
GET/api/emails/countsUnread/total counts per folderRequired
GET/api/addressesList all email addressesRequired
POST/api/addressesCreate new email addressRequired
PATCH/api/addresses/:idUpdate addressRequired
DELETE/api/addresses/:idDelete addressRequired
GET/api/attachments/:idDownload attachment from R2Required
GET/api/routing-rulesList routing rulesRequired
POST/api/routing-rulesCreate routing ruleRequired
PATCH/api/routing-rules/:idUpdate routing ruleRequired
DELETE/api/routing-rules/:idDelete routing ruleRequired

Cloudflare Free Tier

MailNest fits entirely within Cloudflare's free tier.

ResourceFree LimitTypical Usage
Workers Requests100K/dayDashboard views + email processing
D1 Reads5M/dayEmail queries
D1 Writes100K/dayStoring incoming emails
D1 Storage5 GB~50K emails with full HTML
R2 Storage10 GBAttachments (optional)
R2 Reads10M/monthAttachment downloads
Email RoutingUnlimitedAll inbound emails

Architecture

How MailNest works as a single Cloudflare Worker.

Architecture
someone@gmail.com                    You (browser)
sends email to                       open mail.yourdomain.com
you@yourdomain.com                          │
       │                                    │
       ▼                                    ▼
┌─────────────────────────────────────────────┐
│        Single Cloudflare Worker             │
│              "mailnest"                     │
│                                             │
│  email() handler          fetch() handler   │
│  ├─ Resolve recipient     ├─ SvelteKit SPA  │
│  ├─ Unknown? Reject       ├─ API endpoints  │
│  └─ Known? Parse & store  └─ Static assets  │
└─────────────────────────────────────────────┘
                    │
                    ▼
             Cloudflare D1
           (your emails)