Releases: bulwarkmail/webmail
Release list
v1.7.8 - Unified Mailbox, Category Tabs, Collapsible Quoted Replies, Arabic Translation, Expanded Plugin APIs
Changelog
1.7.8 (2026-07-22)
Thank you for your donations:
- You? Become a sponsor!
One-time
Monthly
- @proxforge
- @spss20
- @elgringoYan
- @pauladams8
- @djpriest
- @umakers
- @zplizzi
- @jeremiah
- @Theoretisch1337
- @svandive
- @HiltMundell
Features
- Unified Mailbox: Account-bounded Unified Mailbox with opt-in cross-account aggregation (#509)
- Unified Mailbox: Search in the unified views
- Unified Mailbox: Live unified/All-Mail counters for shared and group accounts
- Mail: Message-list category tabs
- Mail: Drag-and-drop reorder for all folders
- Mail: Collapse quoted reply text behind a "..." toggle (#480)
- Mail: Bulk Not-Spam action in the junk selection toolbar
- Mail: Unread count badge on the favicon
- Mail: Message spacing setting (auto/always/edge-to-edge)
- Mail: Open external links in a new tab (safely)
- Mail: Strip external
url()/@importfrom<style>blocks in the sanitizer (#457) - Composer: Text color picker in the composer toolbar
- Composer: Contact groups as single expandable recipient chips
- Composer: Drag-to-reorder To/Cc/Bcc recipient chips (#593)
- Composer: Auto-detect paragraph text direction by default
- Templates: HTML template support
- Vacation: HTML body support in the vacation responder
- Send: 'Send now' action on the send-delay toast
- Accounts: Remove a specific account from the switcher
- Settings: "Refresh cached data" recovery action
- i18n: Full Arabic (ar) translation with RTL support
- Login:
LOGIN_SHOW_TOTPandLOGIN_SHOW_VERSIONconfig flags (#520) - Docker:
NEXT_PUBLIC_LOCALE_PREFIXbuild argument - Plugins:
ui.rerenderFetchedEmailsmethod (#668) - Plugins:
onEmailsFetchedandonSearchResultshooks andgetSomeEmailsJMAP method - Plugins:
onRecipientChipsChangehook - Plugins:
webauthn.getOrCreateAPI method - Plugins: Download files generated by a plugin (with
ui:download-fileconsent permission) - Plugins: Submit mail without moving to a mailbox and import-to-mailbox APIs
Fixes
- Mail: Render the email body on DOM parse instead of iframe load (#635)
- Mail: Keep sidebar tag counts in step with read/unread changes
- Mail: Enable thread expansion in the focused list
- Mail: Show the quote bar in email replies
- Mail: Honor part-type fallback when quoting replies (#649)
- Mail: Detect typing inside the quoted-HTML shadow island (#654)
- Mail: Keep
target/relon links in plain-text message bodies and open signature links in a new tab - Accounts: Eliminate the full-screen flash when switching accounts (including cached accounts)
- Accounts: Recognize canonicalized login usernames in the account-switch guard
- Auth: Guard account switch against slot→token desync and basic-auth identity mismatches
- Auth: End refresh loops on sign-out and back off failed retries
- OAuth: Harden OIDC discovery (timeout, retry, serve-stale)
- JMAP: Preserve POST across redirects in the Stalwart JMAP passthrough (#627)
- JMAP: File the post-send message with a full
mailboxIdsreplacement - JMAP: Generate the Message-ID client-side using the sender's domain
- Identity: Sync the default sender identity per account (#507)
- Attachments: Download/view attachments on cross-account All-Mail messages
- Shared folders: Route batch actions to the owner account
- Templates: Insert a mail template at the caret in replies instead of prepending (#539)
- Templates: Keep the signature when inserting a template (#621)
- Templates: Hide template buttons when templates are disabled
- Calendar: Honor "Show time in month view" on mobile instead of forcing dots (#666)
- Calendar: Classify self-organized imported events as editable
- Contacts: Assign a UID to contact cards on creation (#644)
- Spam: Stop HELO
spf=nonefrom downgrading a MAIL FROMspf=pass(#650) - Drafts: Label the close-dialog draft button with the generic Save
- RTL: Flip JS-positioned popovers and anchor floating menus with logical start/end
- RTL: Isolate Latin address text from RTL bidi reordering and force LTR identity options
- i18n: Register Arabic messages in the client IntlProvider
- i18n: Fix the Hebrew Drafts folder label
- i18n: Add missing translation keys across 22 locales
- Deps: Bump
dompurifyto 3.4.12 andnext-intlto 4.13.3
v1.7.7 - Hebrew Locale & Full RTL Support, Jalali Calendar, Pinned Emails & Accounts, Expanded Plugin Hooks & APIs
1.7.7 (2026-07-09)
Thank you for your donations:
- You? Become a sponsor!
One-time
Monthly
- @proxforge
- @spss20
- @elgringoYan
- @pauladams8
- @djpriest
- @umakers
- @zplizzi
- @jeremiah
- @Theoretisch1337
- @svandive
- @HiltMundell
Features
- Plugins:
ui.rerenderEmailAPI and restyled read-receipt banner - Plugins: New hooks —
onBeforeBlobUpload,onBeforeDraftAutoSave,onBeforeEditDraft(#586) - Plugins:
ui.promptdialog and first-class settings-section tabs - Calendar: Jalali (Persian/Shamsi) calendar support with Saturday as week start (#490)
- i18n: Hebrew locale with full RTL support
- i18n: Slovak translation
- i18n: User-selectable regional date format
- Contacts: Enable trusted-senders address book sync by default when contacts are available
- Mail: Pin emails to the top of the folder list
- Mail: Setting to disable the tag-color row tint in the message list
- Mail: Click the sender avatar to select a message/thread (Thunderbird-style)
- Accounts: Pin the default account on top and drag-to-reorder the account switcher
- Composer: Recipient autocomplete from Sent, with on-demand server search
- Composer: Preselect the identity of the active mailbox for new messages
- Email: Send a quick reply with Ctrl/Cmd+Enter
- Headers: Parse Stalwart spam headers
- Login: Configurable logo size and hideable heading/subtitle
- PWA: Apple Touch icons for the iOS home screen
Fixes
- Mail: Hide Files when the account lacks the filenode capability (#563)
- Mail: Keep advanced search filters applied when switching folders (#553)
- Mail: Keep the email list scrollable when the bottom reading pane is enabled with no conversation selected
- Mail: Route keyword writes to the email's own account in unified view
- Mail: Render emails that set
height:100%on a wrapper element - Mail: Hide images that fail to load
- Mail: Storage quota not shown with Stalwart (#577)
- Spam: Hide the spam action in Sent, Drafts and Scheduled
- Spam: Fix stale folder counters and open message after spam actions
- Composer: Wait for in-flight attachment uploads before sending
- Composer: Only commit a recipient on Space when the input is a valid email (#571)
- Composer: Attachment reminder now ignores quoted text on reply/forward (#570)
- Calendar: Store the event organizer as owner-only to prevent duplicate ORGANIZER/ATTENDEE
- Calendar: Strike through cancelled events and mute their reminders (#572)
- Calendar: Use
calendarAddress/organizerCalendarAddressfor scheduling, drop retiredsendTo/replyTo(#500) - Auth: Keep the session when the auth server is briefly unreachable
- Shortcuts: Make keyboard shortcuts layout-agnostic and map by physical position
- Shortcuts: Don't toggle mailbox subfolders on Arrow keys while typing
- Contacts: Clear the photo on the server by sending
media: nullwhen removed - Plugins: Preserve the settings slot and privileged tier
- Pro: Prompt to save or discard a draft when closing a compose tab via the tab-bar X
- Pro: Show the Edit button on draft emails opened in a new tab
- List: Shift-click on the checkbox extends the selection (range)
- CSP: Allow external/data fonts so email webfonts render
- Notifications: Brand push notifications with the configured PWA icon
- Notifications: Notification sound preview — base-path prefix and longer default beep
- Unsubscribe: Send
mailto:unsubscribe ourselves instead of via the OS handler - Branding: Apply per-domain favicon override in root metadata (#585)
- Settings: Load the trusted-senders address book on the settings page so the count isn't 0
- Setup: Clone source when
setup.shruns detached from a checkout (#518) - Server: Use a callable
.getto detectHeadersinpickRequestHost
v1.7.6 - Crypto Plugin API & Privileged Plugin Tier, S/MIME as a Plugin, Hide Folder Counts & Structured MFA Login
1.7.6 (2026-06-28)
Breaking Changes
- S/MIME: The built-in S/MIME implementation has been removed from core and re-delivered through the new generic crypto plugin hooks (privileged same-origin plugin tier). S/MIME signing, encryption, decryption, certificate management, and the related settings UI now live in a plugin rather than the main app. Deployments that relied on built-in S/MIME must install the S/MIME crypto plugin to retain those features.
Thank you for your donations:
- You? Become a sponsor!
One-time
- Anonymous
Monthly
- @elgringoYan
- @pauladams8
- @djpriest
- @umakers
- @zplizzi
- @jeremiah
- @Theoretisch1337
- @svandive
- @HiltMundell
Features
- Plugins: Privileged same-origin plugin tier with a crypto API surface
- Plugins: Plugin hooks for email details, headers, and source
- Mail: Option to hide the total message count on folders (#498)
Fixes
- Mail: Hide the server scheduled folder when the virtual one is shown (#495)
- Mail: Stop the unified mailbox from mutating client-returned email objects
- Composer: HTML-escape sender and subject in the reply/forward quote header (#482)
- Calendar: Send calendar invites by setting
organizerCalendarAddress - Identity: Sync the default identity (
preferredPrimaryId) to server settings (#507) - Auth: Support MFA login via the structured auth endpoint
- Admin: Show all built-in themes in the admin theme controls (#496)
- i18n: Add missing translation keys across 19 locales
v1.7.5 - Cross-Account "All Accounts" Views, Attachment Zip Download, Send-Now for Scheduled Mail & New Address Book
1.7.5 (2026-06-24)
Thank you for your donations:
- You? Become a sponsor!
One-time
- Anonymous
Monthly
Features
- Mail: Cross-account "All accounts" views with full group/shared-account support
- Mail: Per-account "All Mail" folder selection
- Mail: "Download all" button to bundle attachments into a zip (#466)
- Mail: Return to the list after deleting or marking the open message unread — configurable (default on)
- Mail: Collapse-all-threads action in thread-list selection
- Calendar: Option to disable the calendar
- Composer: Send-now button on scheduled/delayed messages
- Composer: Email a contact or group via the in-app composer
- Composer: Split a pasted address list into recipient chips
- Contacts: "New address book" creation UI (#415)
- OAuth:
OAUTH_AUTHORIZE_URLto override the authorize endpoint - i18n: Farsi (fa) locale — complete (2654 strings)
- i18n: Romanian (ro) locale
Fixes
- Composer: Keep HTML signature styling in the editor and on send
- Composer: Guard Send against double-submit
- Composer: Strip display names from the
EmailSubmissionenvelope addresses - Calendar: Disable iMIP scheduling on calendar import (#411)
- Mail: Localize special-folder names by JMAP role (#404)
- Mail: Block remaining email tracking vectors (#457)
- Mail: Route counter and unread updates to the email's own account in aggregate views
- Mail: Fix blank space in plain-text emails
- Mail: Fix toolbar re-render when opening emails
- Mail: Truncate long subjects so they don't overlap the timestamp
- Mail: Strip reply/forward prefixes followed by a full-width colon
- Mail: Add breathing room between the unread dot and the avatar
- Mail: Isolate per-account state snapshots from leakage and mutation
- Mail: Cap filename tokens at the full 200-char limit
- Spam: Fetch mailboxes with
accountIdinmarkAsSpam - Filters: Load mailboxes when opened directly (#485)
- Settings: Surface server errors on password change and TOTP toggle
- Send now: Gate the toolbar label and translate
send_nowacross locales - Directory: Fix fetching display names
- Push: Reap only relay-confirmed-dead leftover subscriptions
- i18n: Add the missing fa locale to the client
IntlProvidermessages map - i18n: Add missing translation keys across 19 locales
v1.7.4 - QR-Code Mobile Pairing, Files Sharing, All Mail View & Calendar Recurrence Editor
1.7.4 (2026-06-15)
Thank you for your donations:
- You? Become a sponsor!
One-time
- Anonymous
Monthly
Features
- Mail: New "All Mail" view across folders and accounts
- Mail: Edit contact directly from the email viewer contact sidebar
- Calendar: Recurrence editor, set-default calendar, and timezone-aware calendar queries
- Calendar: Agenda plugin sidecar
- Composer: Email display name support
- Composer: Drag-and-drop recipient chips between To/CC/BCC fields, with the address shown in the drag preview
- Composer: Avatars in recipient autocomplete suggestions, including directory users
- Files: JMAP file/folder sharing in the Files app (#408)
- Auth: QR-code SSO login and device pairing between webmail and the mobile app
- Auth: Require re-authentication for device pairing and SSO
- Accounts: Manage shared/group account settings from the Accounts page
- Setup: Opt-in telemetry in the web setup wizard
- Mail: Persist the email detail sidebar state
Fixes
- Mail: Preserve line breaks in the generated
text/plainalternative (#421) - Mail: Fix inconsistent threading of email messages in the inbox and folders
- Mail: Stop draft emails from being marked as unread
- Mail: Prevent wide email tables from rendering with rotated headers (#409)
- Mail: Preserve the folder list when a mailbox refetch hits the concurrent-request limit
- Mail: Correct dark-mode background-image inversion and height clipping in the email viewer
- Calendar: Dedupe scheduling emails and use Stalwart-compatible calendar filters
- Calendar: Redesign the custom recurrence editor to match the modal UI
- Files: Don't send the connected-account key as the JMAP
accountIdwhen sharing files (#408) - Routing: Strip the build-time
basePathfromrouter.pushredirects after login (#390) - Nav: Open recent contact emails at
/instead of 404ing on/mail - Nav: Hide the Add App button when
sidebarAppsEnabledis false - Settings: Move the "Plain Text Only" setting from Reading to Composing (#422)
- Privacy: Make telemetry opt-in
- UI: Fix the context menu being invisible on first right-click after page load
- Admin: Remove the JMAP status from the admin dashboard
- i18n: Add missing translation keys across 17 locales
v1.7.3 - Read Receipts, Inline Attachment Preview, Per-Viewer Calendar Colors & New Themes
1.7.3 (2026-06-04)
Features
- Mail: Inline attachment preview — reliable MIME detection with inline PDF on desktop and mobile
- Mail: Preview composer attachments inline (click to open)
- Mail: Preview
.eml(message/rfc822) attachments like an email - Mail: Read receipts (MDN, RFC 8098)
- Mail: Editable, layout-preserving quote island when replying
- Mail: Surface the most severe SPF result and hide the "via" badge on spoofed mail
- Calendar: Per-viewer colors for shared calendars (#345)
- Filters: Extended filter rules — attachment field and multi-value conditions
- Settings: New built-in themes — Aurora Glass and Elastic
- Settings: Theme cards render as a mini mailbox mockup from theme colors, with light/dark variant chips
- Plugins: Localizable sandboxed plugins (manifest locales +
api.i18n.t) - Plugins:
/api/translateproxy and email body exposed to plugins - Admin: Toggle for search-engine indexing (robots)
- Admin:
passwordHashFileinadmin.json - Admin:
sessionSecretFileandoauthClientSecretFilefor file-based secrets in JSON config - PWA: Configurable install screenshots (per-domain)
- i18n: Hungarian locale support
Fixes
- Files: Store Files as real
FileNodehierarchy, migrate legacy flat-named files on load, and list folders viaFileNode/getso they are visible (#379) - Files: Treat a blob-less
FileNodeas the only folder signal and migrate legacy dir-markers - Mail: Empty Trash for shared and group folders (#387)
- Mail: Move mail from a shared group inbox to a personal inbox (#375)
- Mail: Preserve the HTML signature when sending a quick reply
- Mail: Stop body clipping under the fold when the email sets
html/bodyheight: 100% - Mail: Drop single-letter
R:/I:subject prefix tokens and deduplicate localized reply/forward prefixes - Mail: No more 404 console spam for missing sender favicons
- Auth: Discover OIDC metadata server-side to avoid CORS failures (#382)
- Send: Route the Sent copy to the shared-mailbox account on per-identity send
- Routing: Honour
basePathin the plugin sandbox,http.postproxy, and branding - i18n: Localize the PWA install prompt, reply/forward quote header (incl. sender address),
<html lang>, and per-locale<head>description; add missingsettings.folders.role_memoskey - Themes: Plugin slot iframes inherit host font and color tokens
- Theme: Gate preview "open in new tab" on inline-safe MIME types
- Appearance: Move Themes settings into the Appearance category with a distinct tab icon; clicking the active theme is a no-op
- UI: Fix invisible dark-mode borders (border token collided with secondary)
- UI: Remove the 16px empty strip beside the collapsed sidebar
- UI: Align top bars to a uniform
h-14height and the account selector header to the search/reply toolbars - UI: Close pane gaps by centering the resize handle on the seam
- Settings: Fix section gears permanently hijacking the active tab
v1.7.2 - Scheduled Send, .eml Drag-Out & Zip Import, and Per-Domain Branding
1.7.2 (2026-05-28)
Features
- Mail: Scheduled send and send delay (#322)
- Mail: Drag emails out to the file explorer as
.eml - Mail: Import emails from
.ziparchives - Mail: "Move to Trash and mark as read" delete action (#323)
- Mail: Include group inboxes in the unified mailbox view (#328)
- Mail: Locale-aware date format in the email list with a preset picker (#331)
- Mail: Allow drag-and-drop into shared mailboxes
- Composer: Ctrl/Cmd+Enter sends the open draft
- Settings: New Downloads tab with template editor for
.emland attachment filenames - Settings: Filename transform settings and an ASCII-only "date (from-to) subject" template
- Settings: Post-export action (keep / archive / trash)
- Settings: Template for multi-email
.zipfilenames - Admin: Per-domain branding editor with overrides on
/api/config, manifest, and PWA icon (#332) - Admin: Policy-controlled push relay URL with optional user lock
- i18n:
NEXT_PUBLIC_DEFAULT_LOCALEfor fallback UI locale (#243)
Fixes
- Mail: Editable HTML signature in new mail; clean state on every compose entry (#329)
- Mail: Report real upload progress with XHR progress events (#333)
- Mail: Restore
blob:inobject-srcandframe-srcCSP for PDF/HTML previews - Mail: Match user-avatar treatment on quick reply
- Email viewer: Stop shattering table cells with
word-break: break-word - Composer: Scope Ctrl/Cmd+Enter send to the focused composer
- Composer: Stop closing the form when editing any field
- Pro: Keep the empty viewer pane visible in the split layout
- Pro: Prevent an empty main pane when reordering tabs across panes
- Mobile: Collapse focus mail layout to multi-line
- Mobile: Keep a gutter on bare-HTML and plain-text emails
- Calendar: Align continued multi-week events with the week's left edge
- Calendar: Show the end date in the event popover for multi-day events (#318)
- Calendar: Convert
recurrenceRulesto singular in batch create - Calendar: Handle malformed event dates (#316)
- Files: Stop URL-encoding drag-out filenames and preserve Unicode letters
- Routing: Prefix remaining
<img>, favicon, and WebDAV URLs withbasePath(#319) - Routing: Prefix hand-written URLs with
basePathfor subpath deployments - Auth:
OAUTH_ALLOW_PRIVATE_ENDPOINTSfor split-DNS setups
i18n
- Add missing translation keys across 16 locales
v1.7.1 - Cross-Account Mail Move Fix
1.7.1 (2026-05-22)
Features
- Admin: Expose PWA branding fields in the admin Branding tab
- Pro: Hide empty-state placeholder and collapse the viewer pane in Pro mode so the mail list fills the space
Fixes
v1.7.0 - "Pro" Mode, Sandboxed Plugins, and Marketplace Update Flow
1.7.0 (2026-05-21)
New: Pro mode (experimental)
Opt-in tabbed multi-pane interface for power users. Open multiple mail, calendar, contacts, and file views side-by-side, drag tabs to reorder or split panes at the edges, and work across all logged-in accounts in one shell, cross-account email moves, a unified inbox with search, account-split calendar/contacts/files sidebars, and a per-account "From" dropdown in the composer. Enable from Settings → Appearance; the proInterface preference is per-device and not synced.
Pro mode is experimental and we need your feedback to shape it. If something feels off, breaks, or is missing, please don't hesitate to open an issue or start a discussion on GitHub!
Breaking Changes
- Plugins: Plugins now run inside a null-origin iframe sandbox and talk to the host over a postMessage RPC bridge. The in-process plugin runtime is gone; the bundled in-tree plugins have been migrated. Third-party plugins built against the old in-process API need to be ported to the sandboxed runtime.
- Plugins: Server-managed bundles must be Ed25519-signed by the host and approved by an admin before they load. The host public key is served from
/api/plugin-signing-pubkeyand each bundle response carries the signature in theX-Bundle-Signatureheader. User-uploaded bundles still load unsigned, but managed marketplace and dev-folder bundles do not. - Plugins:
bundleHashis now a full SHA-256 over the bundle. Legacy short hashes are migrated on first load; any out-of-band tooling that pinned the old hash format needs to be updated.
Features
- Pro: Tabbed shell with drag-to-reorder, drag-to-edge to split, side-by-side panes, and pane-aware responsive layout with a scoped sidebar overlay
- Pro: Auto-redirect to the Pro shell when Pro mode is on;
proInterfaceis kept per-device instead of syncing - Pro: Multi-account mail sidebar with client routing and a per-account mailbox cache
- Pro: Unified mailbox always visible, with full-text search
- Pro: Cross-account email moves
- Pro: Multi-account calendar sidebar split into owned vs shared per account
- Pro: Multi-account contacts and a cross-account file picker
- Pro: Composer From dropdown grouped by account
- Plugins: Per-plugin admin approval workflow with Ed25519 bundle signing verified on load
- Plugins: Marketplace update flow for installed plugins and themes
- Setup: Allow the setup wizard over plain HTTP with a dismissable warning gate
- Setup: Warn when the JMAP URL points at a local-only host
- Account: List and reorder logged-in accounts from settings (#282)
- Mail: Mobile handoff page with JMAP authentication verification for cross-device OAuth
- Mail: Pluggable reply/forward quote header (#295)
- Calendar: Support multiple flexible event reminders (#170)
- Admin: Expose PWA, app identity, and extension directory keys in the JSON config (#312)
- Admin: Surface OAuth scope settings and wire up orphaned admin policy gates
Security
- Plugins: Pin parent origin in the iframe bridge to block cross-frame postMessage
- Plugins: Ignore plugin-supplied
targetinui.openExternalUrlto block host-frame hijack - Plugins: Validate plugin/theme id in marketplace install to block path traversal
- Plugins: Prevent plugin config from leaking to non-admin users
- Admin: Gate admin routes against cross-origin CSRF
- Auth: Bind Stalwart auth context to the credential, not the cookie-claimed username
- Auth: Validate OAuth discovery endpoints against SSRF
- Mail: Tighten HTML sanitization at plain-text email, signature, and i18n render sites
- Mail: Block script-bearing MIME types from inline attachment preview
- Mail: Escape print-window fields and re-sanitize body to block XSS
- S/MIME: Stop persisting passphrases in
sessionStorage - API: Correct regex for valid API POST path validation
Fixes
- Mail: Serialize draft autosave with send to stop replies stalling in Drafts (#303)
- Mail: Omit empty cc/bcc from
Email/setso the server does not emit a bareCc:header (#301) - Mobile: Allow adding contacts from the mail recipient popover (#306)
- Mobile: Prevent dual-scroll and use full width for mail content
- Mobile: OAuth handoff flow
- Calendar: Scope iCal subscriptions per JMAP account; fix refresh and clear
- Calendar: iCal subscription refresh, rollback, and URL normalization
- Calendar: Show avatars in the calendar/address book sharing menu
- Contacts: Normalize malformed contact photo data URIs (#307)
- Identity: Clear identity signature fields when emptied
- Identity: Show size cap on identity signature fields
- Identity: Allow table-based layouts in the HTML signature sanitizer
- Plugins: Load
globals.cssand Geist font in the plugin sandbox iframe - Plugins: Sync plugin slot iframe height with reported content height
- Plugins: Use plugin slot offer snapshots for
useSyncExternalStore - Plugins: Trust the directory version on marketplace install and update
- Filters: Prevent duplication of Bulwark rules with literal braces in values
- Setup: Defer setup wizard HTTP detection to avoid hydration mismatch
- Routing: Anchor unmatched URLs into
mainso 404 renders - Routing: Respect server-resolved locale on first visit (#309)
- Routing: Split app into
(main)/(sandbox)route groups so the plugin iframe hydrates properly - Files: Stop parent directory navigation from jumping to root
- Build: Stop pulling
node:dnsinto the client bundle via OAuth discovery - UI: Toggle recipient popover when clicking the name again
- UI: Remove white halo around photo avatars
i18n
- Add missing translation keys across 16 locales
v1.6.7 - Master-User Impersonation, vCard 4.0 Contact Support, and Multi-Account Push
1.6.7 (2026-05-17)
Features
- Contacts: vCard 4.0 parsing and generation support
- Admin: Master-user impersonation route with
app-top-bannerplugin slot rendered on every authenticated page - Admin: Allow admin password overwrite during setup recovery
- Setup: HTTPS requirement warning in the setup wizard
- Mobile: Show details toggle and expandable panel for sender info
Performance
- Calendar: Speed up calendar invitation banner load
Security
- Mail: Sandbox thread email HTML in
srcDociframe with a CSP<meta>tag - Admin: Redact sensitive config secrets from the admin API response
- Admin: Make impersonation cookies session-only
Fixes
- Auth: Read
OAUTH_SCOPESat runtime instead of build time - Auth: Use a relative
Locationheader in redirects - Auth: Adopt orphan session cookie on first SPA load
- Mail: Per-account push subscriptions so multi-account notifications work (#298)
- Mail: Close attachment preview when clicking outside the content area
- Mail: Pin quick reply to the bottom for short emails
- Mail: Show "no body content" instead of an infinite skeleton for bodyless emails
- Mail: Show contact popup when clicking the sender name in the email header
- Mail: Prevent long addresses from overflowing email details columns (#297)
- Mobile: Align quick reply with the mobile bottom toolbar
- Mobile: Respect safe-area insets on mobile bottom bars
- Mobile: Pad
safe-area-inset-top - UI: Apply dark background to the email content wrapper in dark mode
- UI: Improve dark mode background colors in the email viewer
- UI: Add viewport export with
initialScale: 1 - UI: Strip the Stalwart master-user
%suffix from the displayed account - Plugins: Warn and block install when the app version is below the plugin's
minAppVersion - Plugins: Register
app-top-bannerin plugin-storeSLOT_NAMES - Plugins: Carry
configSchema+settingsSchemathrough marketplace install - Build: Add
outputFileTracingExcludesto reduce Turbopack memory tracing
i18n
- Add missing translation keys across 16 locales