Skip to content
sums001Public

About

Free, unlimited business email on your own domains, running entirely in your free Cloudflare account.

Topics

Resources

Stars

93 stars

Watchers

0 watching

Forks

Latest commit

 

History

18 Commits

Folders and files

Repository files navigation

OpenInbox

Free, unlimited business email on your own domains

Unlimited users, mailboxes, aliases and domains, hosted entirely in your own free Cloudflare account.
No per-seat fees, no servers to run, no vendor holding your mail.

Deploy to Cloudflare

License: MIT Runs on Cloudflare Workers Status: beta PRs welcome

Features · Screenshots · Deploy · Roadmap · Contributing

OpenInbox: unlimited business email, forever free

Warning

OpenInbox is in beta. It may have bugs and needs extensive testing. Try it on a spare domain before you rely on it for important mail. See Project status.

Contents

Why OpenInbox

Business email usually costs a few dollars per user per month, every month. OpenInbox gives you the same thing for free: one Cloudflare Worker and one D1 database, deployed into your Cloudflare account with a single click. You own the data and the domains, and adding the tenth or the hundredth user costs nothing.

Typical hosted email OpenInbox
Price Per user, per month Free on Cloudflare's free plan
Users and mailboxes Paid seats Unlimited
Domains and aliases Often capped Unlimited
Where your mail lives The vendor's servers Your own Cloudflare account
Source code Closed Open source (MIT)

Who it's for

Who What OpenInbox gives them
Solo and indie developers you@yourproduct.com for every side project, without paying for each one
Small businesses and startups Shared support@, sales@ and billing@ for a growing team, with no per-seat bill
Freelancers, agencies and consultants Mail for several brands or client domains, managed from one place
Open-source projects, nonprofits and communities Role addresses and shared inboxes on a zero budget
Families and personal domains A mailbox for everyone on yourname.com
Privacy-minded people and self-hosters Mail in your own account, running code you can read

OpenInbox is built for everyday conversations. It is not a bulk or marketing sender (see Use it responsibly).

Features

Mail

  • Receive on any domain in your Cloudflare account. Email Routing is set up for you.
  • Send through Resend, Brevo, Mailjet, Cloudflare Email Sending or any SMTP server. When one provider hits its free limit, mail falls back to another.
  • Threads, All Mail, search (from: has:attachment before:), labels, filters, snooze, scheduled and undo send.
  • Command palette and keyboard shortcuts, dark mode, mobile layout.

Teams

  • Unlimited users, with personal and shared inboxes.
  • Aliases, you+tag@ addressing and catch-all.

Admin

  • Dashboard with traffic, free-tier usage and delivery and audit logs.
  • Domain health checks with one-click repair. DNS records (SPF, DKIM, DMARC) are written for you.

Security

  • HTML mail is sanitized and sandboxed, and remote images are blocked until you allow them.
  • Mail that fails SPF, DKIM or DMARC goes to Spam.
  • Optional two-factor sign-in. Stored credentials are encrypted.

Screenshots

Click any screenshot to open it full size.

Mail

Mail client, light mode
Inbox, light
Mail client, dark mode
Inbox, dark
Composer
Composer
Command palette
Command palette

Admin

Admin overview, light mode
Overview, light
Admin overview, dark mode
Overview, dark
Mail flow log
Mail flow
Users
Users
Domains
Domains
Integrations
Integrations

How it works

Everything runs inside your own Cloudflare account. There is no OpenInbox server in between.

Part What it does
Cloudflare Email Routing Receives mail for your domains and hands it to the Worker
One Worker Runs the web app, the API, inbound mail handling and scheduled jobs
One D1 database Stores mailboxes, messages, users and settings
A sending provider Delivers outgoing mail (Resend, Brevo, Mailjet, Cloudflare or SMTP), with fallback between them
R2 (optional) Keeps large attachments

Deploy

Requirements

  • A free Cloudflare account, with a domain on Cloudflare's nameservers.
  • A GitHub account.
  • A free account with a sending provider. This is only needed to send; receiving works without one. To send through Cloudflare itself instead, the account needs the Workers Paid plan.

Steps

1. Click Deploy to Cloudflare, then Deploy. The form asks for nothing else. Keep the default names or change them.

2. Open the Worker's workers.dev address. The setup page asks for a Cloudflare API token, which OpenInbox uses to set up Email Routing and DNS for you. Click Create token: Cloudflare opens with every permission filled in, so you only click Continue to summary → Create Token and paste the token back. It is stored encrypted.

Tip

If the Worker shows no workers.dev URL, turn it on in the Worker's Settings → Domains & Routes.

Important

Connecting the token creates your recovery key and shows it once. Save it in a password manager. You paste it to finish setup, and it is the only way back into the owner account if you lose your password.

3. Follow the setup page. It checks the token's permissions, creates your admin account and connects your domain.

4. Connect a sending provider in Admin → Integrations.

Walkthrough

Each screenshot shows one step of a real deploy. Click one to open it full size.

Click Deploy to Cloudflare
1. Click Deploy to Cloudflare
Deploy form
2. Keep the defaults, click Deploy
Token permissions, pre-filled
3. Create token: Review token
Review and create the token
4. Create token
Copy the API token
5. Copy the API token
Setup checks pass
6. Paste it; checks pass
Create the admin account
7. Create your admin email
Setup complete
8. Done: mail arrives
The token's permissions (filled in for you by this link)
Scope Permission Access
Zone Zone Read required
Zone DNS Edit required
Zone Zone Settings Edit required: turn on Email Routing
Zone Email Routing Rules Edit required
Account Workers Scripts Edit required
Account Account Settings Read recommended
Zone Workers Routes Edit optional: app on mail.yourdomain
Zone Analytics Read optional: delivery log
Account Email Routing Addresses Edit optional: forwarding
Account Email Sending Edit optional: send through Cloudflare
Account Account Analytics Read optional: usage on the dashboard
Account Workers R2 Storage Edit optional: attachments bucket

Free-tier limits

What Free limit
Worker requests 100,000 / day per account
D1 storage 500 MB, roughly 50,000–100,000 messages
Incoming message size 25 MB
Sending Resend 100/day, Brevo 300/day, Mailjet 200/day; Cloudflare 3,000/month on Workers Paid

Mail is stored text-only by default, and attachments are kept only on messages under 950 KB. To keep every attachment, turn on R2 storage in Admin → Integrations → Attachments. R2 has a 10 GB free tier, but Cloudflare requires a payment method on the account first.

Use it responsibly

Caution

OpenInbox is for real conversations with people who expect to hear from you. It is not a tool for cold outreach, bulk marketing, purchased lists or spam automation, and it must not be used that way.

  • Provider bans. Resend, Brevo, Mailjet and other providers have strict anti-spam and acceptable-use policies. High bounce or complaint rates, unsolicited mail, or getting around daily limits (for example by opening many free accounts) can get your sending account suspended or permanently banned. It can also hurt your domain's reputation, so that even your normal mail lands in spam.
  • Cloudflare's terms apply too. Abusing Email Routing or Workers can get features or your whole account restricted.
  • Stay within the free tiers. If you genuinely need more volume, move to a paid plan with your provider rather than stretching free accounts.
  • Follow anti-spam laws such as CAN-SPAM, GDPR and CASL. Send only to people who agreed to hear from you, and honour unsubscribe requests.

You are responsible for the mail you send. The OpenInbox maintainers accept no liability for suspended accounts, blocked domains or misuse.

Updating

Updates are manual: your instance only changes when you choose to update it. When the admin overview shows a new version, read its release notes, then in your copy of the repo on GitHub run Actions → Sync upstream → Run workflow. Cloudflare redeploys automatically, and the Worker applies any database migrations itself.

If your copy was created before automatic updates were removed, its workflow still has a weekly schedule. Once it has synced to a version with this change, those scheduled runs do nothing; you can also delete the schedule: lines from .github/workflows/sync-upstream.yml.

Note

Don't click the Deploy button again to update. It creates a second, separate instance.

Troubleshooting

Problem What to do
Mail not arriving or not sending Start with Admin → Domains → Check health and Admin → Mail flow
Locked out of the owner account On the sign-in page, choose Owner locked out? and enter the owner email and your recovery key
"A repository with that name already exists" on the Deploy form An earlier deploy already made that repo. Change Project name, or update the existing instance instead

Roadmap

These are planned or in progress and are not available yet:

  • Inbox API: a REST API with per-user API keys to list, read, search and send mail, so apps, scripts and automations can use your mailboxes.
  • AI email writing with Cloudflare Workers AI: draft replies, rewrite or shorten text, change tone and summarize long threads, using Workers AI's free daily allowance in your own account.
  • Webhooks for incoming mail.

Ideas and pull requests for any of these are welcome.

Project status

OpenInbox is young and under active development. It may have bugs and needs extensive testing across different domains, providers, mail clients and Cloudflare account setups before you rely on it for important mail.

  • Try it on a spare domain first.
  • Keep your recovery key safe.
  • Open an issue when something breaks.

The project is open for collaboration. Testers, bug reports, fixes, new sending providers and help with the roadmap are all very welcome.

Contributing

Contributions of every size are welcome: testing on your own domain, bug reports, docs fixes, UI polish, new sending providers (each one is a single adapter in src/worker/providers/) or work on the roadmap.

  1. Open an issue to report a bug or discuss a larger change before you start.
  2. Fork the repo and set up the development environment below.
  3. Before opening a pull request, run npm run lint && npm run typecheck && npm test && npm run test:e2e.

Development setup

npm ci
# create .dev.vars with the lines below
npm run db:migrate:local
npm run dev:mock                 # terminal 1: mock Cloudflare and provider APIs on :8790
npm run dev                      # terminal 2: app on http://localhost:5173

Local .dev.vars (never put real credentials here):

ENCRYPTION_KEY=any-long-random-string-for-local-use
CF_API_TOKEN=dev-token
CF_API_BASE=http://127.0.0.1:8790/cf
RESEND_API_BASE=http://127.0.0.1:8790/resend
BREVO_API_BASE=http://127.0.0.1:8790/brevo
MAILJET_API_BASE=http://127.0.0.1:8790/mailjet
GITHUB_API_BASE=http://127.0.0.1:8790/github
WORKER_NAME=openinbox

Security

Report security issues privately through GitHub's Security → Report a vulnerability, not in a public issue.

License

MIT

About

Free, unlimited business email on your own domains, running entirely in your free Cloudflare account.

Topics

Resources

Stars

93 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages