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.
| Key | Action | Key | Action |
|---|---|---|---|
j / k | Next / previous message | R / A / F | Reply / reply all / forward |
o / Enter | Open selected message | c | Compose |
Esc | Back / close pane, dialog or search | / | Focus search |
r / u | Mark read / unread | Tab (in search) | Cycle search scope |
s | Star / unstar selected | Esc (in search) | Clear search, back to inbox |
e | Archive | d / # | Delete |
! | Mark as spam | ? | Toggle the shortcut list |
g i | Go to inbox | g s | Go to starred |
g d | Go to drafts | g t | Go to sent |
0 | Unified inbox | 1–9 | Nth 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.