OmniDock GitHub

OmniDock

A self-hosted Cloudflare Workers email operations dashboard that turns domain mail into a compact Linux-style work dock.

Receive through Email Routing, send with Email Sending, keep metadata in D1, put raw mail and attachments in R2, then manage mailboxes, contacts, signatures, rules, and bucket files from one focused console.

omnidock@edge workers.dev
$ omnidock status --mailboxes --bucket
Runtime
Worker
Storage
D1 + R2
Mode
Self-hosted
inbox-linux.png
OmniDock Linux palette inbox dashboard with mailbox folders, thread list, Cloudflare sync controls, and compose controls.
Inbound mail through Worker email handlers
D1 threads plus R2 file storage, MIME bodies, attachments, and previews
Mailbox rules, catch-all routing, contacts, signatures, and external profiles

$ omnidock modules --list

Mail ops, not another giant mailbox.

OmniDock is built for private support inboxes, project domains, catch-all workflows, and lightweight operations that already live on Cloudflare.

01

Mail

Inbox, sent, archive, search, rich compose, attachments, PDF/image/text previews, and mailbox scoping.

02

Rules

Sync zones, Email Sending, Email Routing, catch-all state, and mailbox routing rules from one settings surface.

03

Contacts

Manual entries, CSV/TXT/VCF imports, phone, company, tags, notes, edit flow, and import reports.

04

Signatures

Mailbox-specific rich signatures with style, links, colors, preview, and automatic compose insertion.

05

R2 Files

Manage the configured R2 bucket like a file dock: browse folders, upload files, preview supported objects, download, and delete.

06

Profiles

Document Gmail, Outlook, Yahoo, iCloud, or custom IMAP/SMTP metadata while credentials stay in Worker secrets.

$ wrangler bindings inspect

A Worker-first architecture with room to grow.

The current landing is served by a Worker with static assets, and the product itself uses the same edge-native vocabulary: bindings, secrets, D1, R2 storage, file previews, and email handlers.

Inbound Email Routing
Core Worker
Metadata D1
Files R2 Storage
Outbound Email Sending
wrangler.jsonc binding-safe
{
  "main": "src/worker.ts",
  "assets": { "binding": "ASSETS" },
  "d1_databases": [{ "binding": "DB" }],
  "r2_buckets": [{ "binding": "MAIL_BUCKET" }],
  "send_email": [{ "name": "EMAIL" }]
}

$ install --fork-first --preserve-bindings

Fork first, bind deliberately, then ship.

The upstream README is explicit: fork OmniDock before deploying so your Cloudflare settings, bindings, and future updates stay under your control.

  1. 1
    Fork the repository

    Keep a copy you control for deploy settings and future changes.

  2. 2
    Create Cloudflare resources

    Add D1 for metadata, R2 for raw mail, attachments and manual files, plus Email Sending and Routing.

  3. 3
    Set build variables

    Use OMNIDOCK_D1_DATABASE_ID and OMNIDOCK_R2_BUCKET_NAME so updates do not remove bindings.

  4. 4
    Finish setup in the app

    Add admin password, primary domain, API token, mailboxes, routing rules, and the R2 bucket display name.

deploy command
npm run build
node tools/deploy-preserving-bindings.mjs

Avoid bare `npx wrangler deploy` for normal Git updates. OmniDock generates deploy config from build variables so D1 and R2 stay attached for mail, attachments, and the file browser.

$ security notes --self-hosted

Private by default, honest about the edges.

OmniDock stores secrets in Worker secrets, keeps passwords hashed in D1, and avoids baking personal domains, account IDs, bucket names, or API tokens into the public template.

Admin password is stored as a salted PBKDF2 hash.
Cloudflare API tokens and external account credentials belong in Worker secrets.
Sending is limited to enabled D1 mailbox addresses on verified domains.
Larger public SaaS deployments should replace sessionStorage auth with HttpOnly sessions and CSRF protection.

$ worker extend --next

The landing is static today. The Worker is ready for more.

This site already has a Worker entry point, `/api/health`, and `/api/project`. Later, it can grow into release metadata, install checks, docs search, deployment diagnostics, or a hosted project status surface without changing hosting platforms.

/api/releases /api/install-check /api/docs-search /api/diagnostics

Run your domain mail from the edge.

OmniDock is MIT-licensed, TypeScript-based, and built around Cloudflare Workers, D1, R2, Email Routing, and Email Sending.