A three-pane mail client that lives in wp-admin — drawn with WordPress's own colours, spacing and type, so it reads as part of the dashboard rather than a guest in it. Not an app in an iframe.
The demo boots a real WordPress inside your browser tab — already signed in. Nothing uploaded, nothing kept.
Why it is different
Every message is read live from your mail server for that request. No custom tables, no cron, no copy of your mail sitting on a website waiting to be breached.
Two option rows and a few transients are the entire footprint. Nothing to grow, nothing to back up.
Gmail, Outlook / Microsoft 365, Yahoo, iCloud, Fastmail and Zoho are presets. Or type your own servers.
Deleted by accident? The offer stands until you do something else. No countdown — "oops" arrives at its own speed.
Remote images are held back until you ask, so opening a message never tells the sender you read it.
Pictures preview in the pane. Outgoing files are allow-listed, type-checked, and shrunk if enormous.
Two filters let a theme say whether a sender is already on your records — and offer to add them if not.
Any device
Not a desktop layout squeezed down. The icon rail stays on screen, the body fits the width exactly, and every dialog has a way out.
Tablet · 834px — three panes still fit.
Every release is measured at 320, 390, 768 and 1280 pixels. The message body fits the screen exactly — no swiping sideways to read a newsletter.
Writing
To and Subject as captions over soft rounded boxes. Below them, one sheet top to bottom: what you write, then the sign-off, then the quoted original — printed, so nobody has to send an email to find out what went out on the bottom of it.
Attachments
No popup to dismiss and no gallery to escape from. An attached photo is simply part of the message, sized to sit comfortably in the pane — and one click shows it at full size.
Setup
Plugins → Add New → Upload Plugin, choose the zip.
Settings → Webmail. Pick a provider, paste an app password, flip the switch.
Not before — a menu item whose only message is "nothing is connected" is worse than none.
POP is not supported, and cannot be: it has no folders, no flags, no server-side search and no move — and every screen here needs all four.
For developers
"Is this sender someone we already know?" ships as a contract with no implementation, so a plain install is simply a mail client. Answer two filters and it lights up.
There are seams behind the whole mail layer too — which is how the live demo runs a real copy of this screen with no mail server behind it at all.
// Tell Webmail who this address belongs to.
add_filter( 'wmfw_find_contact', function ( $none, $email ) {
$id = my_lookup( $email );
return $id ? [
'id' => $id,
'name' => get_the_title( $id ),
'url' => get_edit_post_link( $id ),
'type' => 'customer',
] : null;
}, 10, 2 );
Also: wmfw_create_contact,
wmfw_identity, wmfw_signoff,
wmfw_capability, wmfw_allowed_types,
wmfw_purge_days, and the wmfw_pre_* seams.
The demo is a real WordPress with the plugin in it, running in your tab and already signed in. Read, star, archive, undo, write a reply.
GPL-2.0-or-later · WordPress 6.4+ · PHP 8.1+ · no account, no sign-up, no tracking