# Changelog ## 1.6.5 (2026-05-13) ### Features - **Protocol**: Register as the system handler for `mailto:` and `webcal:` links from a new protocol handler settings page - **Protocol**: Account picker for protocol links when multiple accounts are connected - **Protocol**: Import-or-subscribe choice for detected webcal calendars - **Protocol**: Reuse the open PWA/session for `mailto:` links instead of always opening a new tab - **UI**: Route account avatars through the shared `Avatar` component for consistent fallbacks (#278) ### Fixes - **Calendar**: Support HTTP basic auth in iCal subscription URLs (#275) - **Admin**: Honor admin-uploaded favicon in root metadata (#274) - **Admin**: Honor `NEXT_PUBLIC_BASE_PATH` in admin sidebar nav links (#271) ## 1.6.4 (2026-05-11) ### Web Setup Wizard First-launch web setup wizard. New installs no longer need to hand-edit `.env.local` - point a browser at the container and the wizard probes the JMAP server(s), configures OAuth/OIDC, generates the session secret, accepts branding uploads, and provisions the initial admin password. Admin storage is now split into `ADMIN_CONFIG_DIR` (operator-authored, mountable read-only after setup) and `ADMIN_STATE_DIR` (runtime audit log and login timestamps); the legacy `ADMIN_DATA_DIR` keeps working for existing installs. ### Features - **Setup**: Web setup wizard with multi-step flow: Server, Auth, Security, Logging, Branding, Review, Admin - **Setup**: Admin config/state directory split with optional `ADMIN_CONFIG_READONLY` for immutable deployments (#226) - **Setup**: File uploads on the wizard branding step - **Setup**: Redesigned review step with grouped summary and an advanced toggle for the full config - **Setup**: Require explicit confirmation when JMAP probe finds no session - **Mail**: Drag attachments out of the viewer to the local file system (#267) - **Mail**: Reading Pane at Bottom mail layout (#262) - **Mail**: Configurable signature position - above or below quoted text (#266) - **Mail**: Signature position is now searchable from the email behavior settings - **Mail**: Show avatar in Focused list for compact density and above - **Mail**: Align Focused list preview with other layout previews - **Compose**: From-header override in the composer with catch-all auto-reply, replies to an alias on a domain you own pre-fill the alias as the sender even when it isn't a configured identity (#246) ### Performance - **Mail**: Prefetch initial email data on login - **Auth**: Parallelize login round-trips and drop redundant JMAP re-verify ### Fixes - **Auth**: Skip upstream JMAP reverify for trusted URLs (#237) - **Auth**: Show account identity in the switcher header instead of the sending alias - **Compose**: Fall back to the primary identity signature on reply - **Setup**: Drop redundant first-login banner about removing `ADMIN_PASSWORD` (#222) - **UI**: Consistent notice cards for server probe results ### i18n - Add missing translation keys across 15 locales ## 1.6.3 (2026-05-08) ### Features - **Mail**: Lift 5-account cap on HTTP/2 - **Mail**: Import `.eml` files via folder right-click menu ### Fixes - **Mail**: Trim leading whitespace from email list preview - **Mail**: Fall back when only the truncation indicator remains in email preview - **Mail**: Hide files/contacts nav items when JMAP server lacks support - **Viewer**: Preserve emoji colors in dark mode - **Viewer**: Prevent white-on-white in dark mode for nested `bgcolor` containers - **Viewer**: Render plain-text-only emails as text, not HTML - **Viewer**: Render HTML-only emails and redesign external content prompt - **Viewer**: Pad Word/Outlook HTML email rendering - **Compose**: Redesign quick reply to match sender/banner layout - **Compose**: Disable StarterKit's bundled link/underline to avoid duplicate extensions - **Sharing**: Request `shareWith` explicitly so calendar/address book shares survive a re-login (#257) - **UI**: Strip leading punctuation when computing avatar initials - **Mobile**: Hide email hover actions ### i18n - Add missing translation keys across 15 locales ## 1.6.2 (2026-05-06) ### Features - **Plugins**: Hot-reload and dev-folder loading for live plugin development - **Plugins**: On-demand `src/` bundling via esbuild - **Plugins**: New `http:fetch` permission and `httpOrigins` manifest field - **Plugins**: `onBeforeEmailSend` hook with `fromEmail` exposed on `OutgoingEmail` - **Plugins**: Project `EmailReadView` for the email-banner slot and expose auth results - **Plugins**: Ingest icon, banner, and screenshots from the source repo - **Plugins**: Restrict plugin and theme install/uninstall to the admin dashboard - **Mail**: Multi-server JMAP support - **Settings**: Fulltext search across the settings sidebar - **Settings**: Sub-result rows with highlight in settings search - **Settings**: Surface plugin settings as search sub-results - **Settings**: Remove experimental tags from themes, plugins, and sender favicons - **Viewer**: Redesigned external-mail banner above attachments - **Calendar**: Calendar invitation banner expands on row click - **Calendar**: Calendar invitation banner is now collapsible ### Fixes - **Admin**: Collapse admin panel into a single tabbed page - **Plugins**: Inline plugin configure panel to avoid dev-mode hang - **Plugins**: Resolve `PLUGIN_DEV_DIR` plugins in admin config route - **Plugins**: Add missing body type assertion in `createPluginAPI` fetch options - **Plugins**: Propagate `settingsSchema` - **Settings**: Highlight plugin and theme cards in search results - **Settings**: Open plugin card on first click of a setting sub-result - **Settings**: Drop ghost sub-results from account and language search - **Settings**: Improve search highlight styling - **Viewer**: Show notification banners above attachments - **Viewer**: Rework S/MIME banner to match calendar invitation - **Viewer**: Close PDF preview on Escape before email viewer - **Viewer**: Render PDF previews via `` with `blob:` in object-src CSP (#253) - **Calendar**: Align invitation icon with sender avatar column - **Calendar**: Fix invitation picker clipping (#250) - **Auth**: Read `activeAccountId` from authStore in account selectors - **UI**: Adjust toast item border radius and progress bar styles - **UI**: Remove fly-in animation from context menu submenus - **i18n**: Add missing Czech flag icon ### i18n - Add missing translation keys across 15 locales ## 1.6.1 (2026-05-04) ### Features - **Updates**: Update-available detection with non-dismissible notice and dev-reload refresh - **Plugins**: New plugin hooks for compose, attachments, search, lifecycle, and routing - **Sharing**: Share indicators for calendars and contacts, updated JMAP capabilities (#244) - **Mail**: Auto-add recipients to trusted senders when replying - **Identity**: Sanitize identity display name to prevent invalid `From` headers ### Fixes - **Mobile**: Synchronize mobile submenu view with browser history for better navigation - **Viewer**: Update email viewer styles to improve overflow handling - **Auth**: Ensure `cookieSlot` consistency during account updates in auth store - **Auth**: Thread per-account cookie slot through OAuth flows - **Calendar**: Square the colored left marker on calendar events - **About**: Show git commit in About instead of "unknown" ### i18n - Update mailbox context menu translations across 12 locales ## 1.6.0 (2026-05-01) ### Features - **Deployment**: Subpath deployment support via `NEXT_PUBLIC_BASE_PATH` environment variable - **Mail**: Image attachment thumbnails and preview chips - **Mobile**: Reworked mobile mail viewer toolbar - **Mobile**: Mobile-friendly settings panel - **Mobile**: Mobile-friendly admin panel - **Mail**: Redesigned expanded details panel - **Mailbox**: Show full path in mailbox context menu header with intelligent path shortening ### Fixes - **Viewer**: Respect per-email dark mode toggle when "always show in light mode" is on - **Navigation**: Scroll apps list in navigation rail to prevent overflow - **Context menu**: Clamp submenu inside viewport - **Context menu**: Prevent context menu from clipping below viewport - **Context menu**: Prevent jump and animation on open - **Mail**: Stop silently destroying emails when trash mailbox isn't found (#195) - **Mail**: Preserve list scroll position when tagging an email - **Mail**: Render below-header overflow popup outside clipped row - **Mail**: Collapse below-header attachments to single row with overflow pill - **Push**: Fix push preview JMAP query - **Tour**: Navigate tour to mailbox when starting from another page - **i18n**: Add `useTranslations` for "selected emails" and "cancel" on email list batch operations ### i18n - Translate SPF/DKIM/DMARC tooltips - Add missing keys across 14 locales ## 1.5.4 (2026-05-01) ### Features - **PWA**: Web push notifications for new inbox mail (#233), with click-through to open the message - **Composer**: Insert and edit tables in rich-text emails (#236) - **Mail**: Configurable sub-addressing delimiter character (#239) - **i18n**: Turkish localization - **i18n**: Missing keys filled in across 15 locales ### Fixes - **Mail**: Set In-Reply-To and References headers on replies (#234) - **Mail**: Persist htmlBody in drafts to preserve rich formatting (#236) - **Auth**: Pin JMAP auth verification to the configured server URL (#237) - **Auth**: Evict unrecoverable basic-auth accounts on reload - **Notifications**: Scope new-mail notifications to genuine inbox deliveries - **Notifications**: Extend PushVerification timeout and clean up leftover subscriptions - **Viewer**: Smooth out body load to prevent flicker on first render - **Viewer**: Prevent iframe flash when loading images or trusting the sender - **Viewer**: Pad bare HTML emails like plain-text mails for consistent layout - **Viewer**: Light-mode override now only affects body content - **Viewer**: Detect `