Web UI, PWA and notifications

The interface a human uses. All of it is free and always will be — the paid layer is only for machines.

The web UI

Open the base URL in any modern browser and sign in with the admin account the first-run wizard created. What you get:

  • A unified inbox across every configured account, plus a per-account view and a full folder tree per account (inbox/sent/drafts/archive/spam/trash) with unread counts.
  • Conversation threading, with the reading pane ordered oldest first.
  • Compose, reply, reply-all and forward over SMTP — plain text, rich text or Markdown — with attachment reminders that exclude recognizable quoted reply text, visible sending feedback, local draft autosave, undo-send and scheduled send. A forward starts with the original attachments selected, ready to keep or remove.
  • Search: instant local full-text search, plus on-demand deep IMAP search against the servers themselves, streamed back over SSE as each result arrives.
  • Filters under Settings: conditions on from/to/subject/body, actions to move, label, forward, mark read, star, delete or notify.
  • AI compose/reply, message and thread summaries, and translation, all optional and bring-your-own-key (OpenRouter, Google Translate). They fail gracefully when their provider is unset.
  • Live updates without a refresh: new mail and sync-status changes arrive over a Server-Sent Events stream.

Remote images and every other external resource in a message stay blocked until you click Load external content or allow a sender permanently.

AI summaries

Summarize one message or a whole conversation. Thread summaries identify participants, decisions, action owners and who should reply next. Under Settings → Integrations, you can turn thread summaries on or off and choose their model override and default detail level independently of message summaries.

Keyboard shortcuts

These are the defaults. Change any action in Settings → Keybindings; open Keyboard Help (default: ?) to see your current map in the app itself.

KeyActionKeyAction
j / kNext / previous messageR / A / FReply / reply all / forward
o / EnterOpen selected messagecCompose
EscBack / close pane, dialog or search/Focus search
r / uMark read / unreadTab (in search)Cycle search scope
sStar / unstar selectedEsc (in search)Clear search, back to inbox
eArchived / #Delete
!Mark as spam?Toggle the shortcut list
g iGo to inboxg sGo to starred
g dGo to draftsg tGo to sent
0Unified inbox19Nth account's inbox

Install it as an app

mimux ships a web app manifest and a service worker, so any browser that supports PWAs can install it: desktop Chrome/Edge offer an install button in the address bar, and on iOS/iPadOS it is Share → Add to Home Screen.

Offline is read-only. The service worker falls back to your last-synced inbox so the app opens and shows something useful without a network, but every action — read, star, move, send — needs the server.

Installing requires HTTPS with a real certificate. Browsers refuse service workers on an insecure origin, so http://<lan-ip>:8083 will not install. See Installation for the reverse-proxy setup.

Notifications

Off until you turn them on, in Settings → Notifications. Pick when first:

  • Off (default) — nothing is ever sent and no permission is ever requested.
  • Only what my filter rules say — a rule with the Notify me action fires one. Set those up under Filters.
  • Every new message in an inbox.

Either way mimux only notifies about new mail arriving in an inbox: never your own sent mail, never the backlog downloaded on a first sync, never a message that was already read elsewhere, and never anything older than a day.

Then pick how. The two transports are independent and can both be on.

Web Push

Settings → Notifications → Enable on this device. Delivered from your own server, with the sender and subject encrypted end-to-end to that browser. There is nothing to configure: the VAPID key pair is generated on first use and stored in the database.

Requirements:

  • HTTPS with a real certificate. Browsers refuse both service workers and push on an insecure origin.
  • iPhone/iPad: install the web app first. Safari only allows push for a web app added to the Home Screen (iOS 16.4+). Open mimux from that icon and enable notifications there — it cannot work in a normal Safari tab, in any browser on iOS.
  • The browser asks for permission once. If it is refused, the button cannot ask again — reset Notifications for the site in the browser's own settings.

Each browser/device subscribes separately and is listed with a Remove button. Signing out drops that device's subscription. A subscription the push service reports as gone (404/410) is deleted automatically.

ntfy

ntfy needs no permission, no HTTPS and no installed app: put a topic URL (https://ntfy.sh/<something-long-and-unguessable>, or your own ntfy server) in the box, install the ntfy app, and subscribe to the same topic. This is the fallback when Web Push is not available.

Anyone who knows the topic name can read the notifications, so self-host ntfy if the sender and subject are sensitive.

Privacy

Web Push payloads are encrypted end to end — the push service (Apple/Google/Mozilla) relays ciphertext it cannot read. It does still see that your device received a push, and when: metadata, not content. ntfy sees the sender and subject in the clear unless you run it yourself.

Other ways in