Email Self-hostingSave Updates Watch releases
Stars 268
Requires Cloudflare D1, Cloudflare Email Routing, Cloudflare Queues, Cloudflare R2, Cloudflare Workers All details
What is OmniMail? OmniMail is a self-hosted webmail that runs entirely on Cloudflare's serverless platform. It uses Cloudflare Email Routing to receive mail for your domains, stores messages in D1 (SQLite) and R2 (object storage), and processes emails asynchronously via Queues. A single instance manages multiple domains, users, and mailboxes with a full permission model (super admin, admin, user, temporary). Optional sending is provided via Resend or SendFlare. It also aggregates external accounts: iCloud+ Hide My Email aliases, Gmail/Workspace via IMAP, Microsoft (Outlook/Hotmail/365) via OAuth2+IMAP, QQ Mail via authorization codes, NAVER and Yandex via app passwords. The UI is a React SPA with light/dark/system themes, responsive for desktop and mobile. A Chrome extension (OmniMail Float) and a native Android app connect to the same API. Deployment is Git-driven via Cloudflare Workers Builds — either a one-click deploy or a Fork for long-term updates. The project is MIT-licensed and currently at v1.3.0 (Web/API) with Android in preview (0.3.0).
Show more Should you self-host OmniMail? OmniMail scores 47/100 on selfhost.directory (how scoring works ) and ranks #72 of 106 in Email . It has 268 GitHub stars.
It shipped 10 stable releases in the past year. The latest, v1.3.0, came out on 16 October 2026. New versions land roughly every 4 days.
Setup is advanced: plan for several services and some ongoing maintenance. It is MIT-licensed and written mostly in Typescript.
Its closest alternative on selfhost.directory is Listmonk (80/100, 24 017 stars). It scores higher overall, so compare the two before you pick. See OmniMail vs Listmonk side by side.
Features Catch-all email routing
Chrome extension (OmniMail Float) Manifest V3; Chrome Web Store or dev build
Gmail aggregation Requires Google app passwords
iCloud Hide My Email integration Requires iCloud+ subscription
Linux DO Mail integration Requires Linux DO Mail account
Microsoft/Outlook integration Read-only; requires OAuth2
Multi-domain webmail
NAVER Mail integration Read-only; personal @naver.com only
QQ Mail integration Personal @qq.com only; requires IMAP/SMTP enabled
Responsive Web UI
Role-based Access Control
TOTP two-factor authentication
Yandex Mail integration Read-only; personal @yandex.com only
== Readme$ Config~~ Updates
How to configure OmniMail Expand all Copy as .env (31)
APP_NAME= OmniMailCustom site name, default 'OmniMail' Custom site name, default 'OmniMail'
APP_ORIGINSAdditional allowed cross-origin frontends, dev builds, or extension IDs (comma-separated exact origins) Additional allowed cross-origin frontends, dev builds, or extension IDs (comma-separated exact origins)
CLOUDFLARE_ACCOUNT_IDCloudflare Account ID needed for backups Cloudflare Account ID needed for backups
COOKIE_SECURE= trueKeep true in production; only false for local HTTP development Keep true in production; only false for local HTTP development
values: true,false
D1_DATABASE_IDProduction D1 Database ID needed for backups Production D1 Database ID needed for backups
D1_REST_API_TOKENCloudflare API Token with D1 Edit permission for backups Cloudflare API Token with D1 Edit permission for backups
GMAIL_CREDENTIALS_KEYAt least 32 bytes for encrypting Gmail app passwords At least 32 bytes for encrypting Gmail app passwords
GMAIL_IMAP_ENABLED= trueEmergency feature flag; set 'false' to hide/disable Gmail integration, default enabled Emergency feature flag; set 'false' to hide/disable Gmail integration, default enabled
values: true,false
ICLOUD_CREDENTIALS_KEYAt least 32 bytes for encrypting iCloud Cookie and app-specific password At least 32 bytes for encrypting iCloud Cookie and app-specific password
LINUX_DO_CLIENT_IDLinux DO Connect Client ID Linux DO Connect Client ID
LINUX_DO_CLIENT_SECRETLinux DO Connect Client Secret Linux DO Connect Client Secret
LINUX_DO_MAIL_CREDENTIALS_KEYAt least 32 bytes for encrypting Linux DO Mail password or auth token At least 32 bytes for encrypting Linux DO Mail password or auth token
MAIL_CREDENTIALS_KEYRecommended unified key (>=32 random UTF-8 bytes) for encrypting all external mailbox credentials Recommended unified key (>=32 random UTF-8 bytes) for encrypting all external mailbox credentials
MICROSOFT_CREDENTIALS_KEYAt least 32 bytes for encrypting Microsoft OAuth tokens and optional combination password At least 32 bytes for encrypting Microsoft OAuth tokens and optional combination password
MICROSOFT_MAIL_ENABLED= trueEmergency feature flag; set 'false' to hide/disable Microsoft integration, default enabled Emergency feature flag; set 'false' to hide/disable Microsoft integration, default enabled
values: true,false
NAVER_MAIL_CREDENTIALS_KEYAt least 32 bytes for encrypting NAVER app passwords At least 32 bytes for encrypting NAVER app passwords
QQ_MAIL_CREDENTIALS_KEYAt least 32 bytes for encrypting QQ Mail authorization codes At least 32 bytes for encrypting QQ Mail authorization codes
QQ_MAIL_IMAP_ENABLED= trueEmergency feature flag; set 'false' to hide/disable QQ Mail integration, default enabled Emergency feature flag; set 'false' to hide/disable QQ Mail integration, default enabled
values: true,false
RESEND_DOMAIN_CONFIGSJSON Secret mapping sending domains to Resend API Keys and optional from addresses JSON Secret mapping sending domains to Resend API Keys and optional from addresses
RESEND_WEBHOOK_SECRETSingle Resend Webhook Signing Secret (legacy) Single Resend Webhook Signing Secret (legacy)
RESEND_WEBHOOK_SECRETSJSON array of multiple Resend Webhook Signing Secrets JSON array of multiple Resend Webhook Signing Secrets
SENDFLARE_API_KEYSendFlare global API Key for sending/replying SendFlare global API Key for sending/replying
SENDFLARE_DOMAIN_CONFIGSJSON Secret mapping sending domains to SendFlare API Keys and optional from addresses JSON Secret mapping sending domains to SendFlare API Keys and optional from addresses
SENDFLARE_FROMOptional fixed from email address for SendFlare Optional fixed from email address for SendFlare
SETUP_TOKENOne-time token for initial super admin creation (min 32 random UTF-8 bytes) One-time token for initial super admin creation (min 32 random UTF-8 bytes)
SUPER_ADMIN_EMAILSuper admin login email address Super admin login email address
TOTP_ENCRYPTION_KEYAt least 32 random characters for encrypting admin TOTP secrets At least 32 random characters for encrypting admin TOTP secrets
TURNSTILE_SECRET_KEYTurnstile private Secret Key Turnstile private Secret Key
TURNSTILE_SITE_KEYTurnstile public Site Key for registration/invite verification Turnstile public Site Key for registration/invite verification
UPDATE_REPOSITORY= mibgb65-cloud/OmniMailRelease source repository, default 'mibgb65-cloud/OmniMail' Release source repository, default 'mibgb65-cloud/OmniMail'
VITE_API_ORIGIN= http://localhost:8787Local development only; production uses same-origin /api requests Local development only; production uses same-origin /api requests
I'm on any version v1.2.0 v1.1.4 float-v1.0.2 float-v1.0.1 v1.1.3 v1.1.2 v1.1.1 v1.1.0 v1.0.2
AI summary Improved cleanup persistence and domain management
Show more OpenAgentCore OpenAgentCore lets you run AI coding agents like Codex and Claude Code on your own hardware using the OpenAI SDK, with your choice of models and sandboxes.
OpenHabitTracker A free, open-source habit tracker that runs everywhere and lets you sync data to your own Docker server.
OpenTrashmail Open Trashmail is a self-hosted, open-source disposable email solution with its own SMTP server, web UI, JSON API, RSS feeds, and webhooks.
Open-WebUI Open WebUI is a self-hosted AI platform connecting to Ollama and OpenAI-compatible APIs with RAG, plugins, voice/video calls, and enterprise auth on your hardware.
OvertChat Self-hosted AI chat with local models, bundled voice/search, multi-user accounts, native mobile/desktop apps, and portable SQLite database.
phantom-wg Phantom-WG is a self-hosted, open-source WireGuard VPN platform with multihop routing, IPv6 dual-stack, and crash recovery via SQLite, all in isolated Docker containers.
Plex Plex Media Server is a self-hosted media server application that allows users to organize and stream their personal media libraries.
polar-flow-server Self-hosted server syncing all Polar health data to PostgreSQL with personal baselines, anomaly detection, and a built-in MCP server for AI assistants.
posthorn Self-hosted email gateway bridging apps to transactional providers (Postmark, Resend, Mailgun, AWS SES, SMTP) with HTTP form, API, and SMTP ingress.
puppy-stardew-server Run a persistent Stardew Valley multiplayer world on your own hardware with a web control panel, automated backups, and mod support.
QMReader QMReader is a self-hosted, open-source RSS reader that aggregates feeds, translates titles, rewrites articles in a Chinese style, and creates reusable public assets.
quillnote-server Self-hosted Go server emulating Nextcloud Notes API for Quillnote/Quillpad app sync with SQLite storage.
Rate this project Click to rate — no account needed.
Loading comments…
0 comments