Releases: Foundry376/Mailspring
1.22.0
Features:
- Added the ability to choose which themes apply in automatic light/dark mode. (#2732) Thanks @Jayphen!
Bug Fixes:
- Fixed null crash when clicking "Send now" on undo-send toast after the message had already been sent. (#2738)
- Fixed two null-access crashes reported in Sentry (MAILSPRING-CLIENT-1G, MAILSPRING-CLIENT-18, MAILSPRING-CLIENT-2V). (#2740)
- Fixed two Sentry crashes: null account in preferences and null window in app menu IPC. (#2741)
- Fixed crash when archiving from search with label-based archive categories. (#2743)
- Fixed null crash when removing threads with unsynced trash/archive category. (#2736)
- Fixed Outlook account setup. (#2735) Thanks @Suchiman!
- Fixed Windows print crash caused by invalid file URL. (#2733)
- Fixed TOCTOU null-reference crash in draft body setter (MAILSPRING-CLIENT-S). (#2728)
- Fixed
DefaultClientHelperMacpassing boolean to error callback, causing false Sentry reports. (#2731) - Fixed
AttributeDateTime.fromJSONtreating 0/falsy values as missing. (#2730) - Fixed quickpreview CSP clobbering the default session's app-wide CSP. (#2744) Thanks @dansleboby!
- Fixed
QuerySubscription._fetchRangecontiguity check using actual result length. (#2734) - On Windows, fixed EPERM crash when forking background query agent. (#2745)
Improvements:
- Improved Microsoft OAuth: better email resolution and suppressed no-mailbox errors from Sentry. (#2746)
- Added diagnostics around "draft not found" error on send and cleaned up waiting queues. (#2727)
- Moved payment flow out of modal to launch on the web for newer Stripe integration.
- Richer exceptions when account has no from address or when label is provided to ChangeFolderTask.
- Draft reminders now use
thread:metadata prefix so sync engine promotes them to thread on send. (#2729) - Sync engine now forwards identity-level refresh events from delta stream. (mailsync#115)
1.21.1
Performance:
- Optimized search regex compilation in category and label pickers. (#2715)
- Improved sync engine performance by reducing unnecessary SQLite writes and moving parsing outside transactions.
Bug Fixes:
- Improved theme support in calendar
- Fixed dark mode email bodies not reflecting the system tint color.
- Fixed
activeMarksaccess errors in the composer editor. (#2714) - Fixed thread list scroll indicator not sliding through time when dragging the scroll handle. (#2716)
- Fixed
containserror when parentFilter receives a non-Element node. (#2712) - Fixed secrets potentially appearing in the connection error detail modal. (#2717)
- Fixed package name validation rejecting names with uppercase letters. (#2718)
- Fixed sync engine crash during many-account sync by increasing SQLite busy timeout.
- Fixed message importance headers not normalized for compatibility with some providers. (mailsync#113)
- Improved error logging for empty or malformed error objects. (#2713)
Developer:
- Upgraded Electron from 41.5.0 to 41.6.1.
- Upgraded React and React DOM to v17. (#2725)
- Upgraded react-transition-group from 1.2 to 4.4.5.
- Replaced deprecated
componentWillMountwithcomponentDidMount. (#2724) - Replaced legacy context API with React Context. (#2722, #2723)
- Refactored class components to functional components with React.memo. (#2720)
- Removed PropTypes, replaced with TypeScript types. (#2710)
- Added missing TypeScript types to function declarations across many files.
- Renamed remaining package spec directories to
specs, converted JSX to TSX. (#2711) - Added Playwright tests for composer interactions.
- Fixed lint CI step that was performing fixes instead of validation. (#2719)
- Removed unused CircleCI configuration.
- Set C++ standard to C++17 across all platforms. (mailsync#114)
- Various CMake and build improvements for mailsync. (mailsync#108, mailsync#109, mailsync#110, mailsync#111, mailsync#112) Thanks @LinusDierheimer!
1.21.0
Features:
-
Added Reply-To field to the composer header, allowing you to specify a different reply address when composing messages. (#2691) Thanks @Argjend12345!
-
Added bulk RFC2822 message export functionality to the sync engine. (#107)
Bug Fixes:
-
Fixed HTTP/2 framing errors that could crash the sync engine during metadata streaming. (#103)
-
Prevented global keyboard shortcuts from firing when focus is in the composer. (#2693)
-
Strictly validate accent color hex values from system preferences to prevent errors. (#2692)
Claude Security Audit:
-
Tightened validation to prevent file:// URIs in email content. (#2699)
-
Limited path traversal in protocol handler. (#2700)
-
Added allowlist validation for IPC window and webcontents methods. (#2701)
-
Improved HTML sanitization in the composer when pasting content. (#2702)
-
mailto links no longer support the ?attach= query parameter. (#2703)
-
Improved attachment name sanitization for security and compatibility. (#2705)
-
Improved email sanitization to block CSS @import tracking vectors. (#2706)
-
Added package name validation to prevent path traversal attacks. (#2698)
-
Added URL validation to the autoupdate handler. (#2697)
-
Show a notice about plugin trust when installing third-party plugins.
Improvements:
-
When a detailed error log is available during OAuth sign-in, it is now displayed to help with troubleshooting.
-
Used
execin mailsync wrapper script for direct signal delivery. (#105)
Developer:
-
Migrated build system from Grunt to a standalone Node.js script. (#2704)
-
Added option to skip installer creation in the build script. (#2707) Thanks @LinusDierheimer!
-
Dropped .map files from distribution packages. (#2686) Thanks @ReillyBrogan!
-
Replaced long-deprecated Raven with native Sentry envelope implementation and send sourcemaps during build. (#2694)
-
Upgraded TypeScript target from es2017 to es2024.
-
Refactored TypeScript compilation cache and only enable in dev mode. (#2695)
-
Removed macOS Touch Bar support. (#2696)
-
Updated ESLint and Prettier, and reference local versions in VS Code settings.
-
Added missing TypeScript types to function declarations across many files.
-
Upgraded Electron 41.2.1 to Electron 41.5.0.
-
Added Playwright tests for pre-release verification.
-
Added tests covering VCF/EML business logic and other utilities.
1.20.1
1.20.0
Features:
-
Added an "Automatic" theme (the new default) that follows system light/dark mode.
-
Added system accent color support — the standard light and dark themes now use your OS accent color by default and this can be disabled from Preferences > Appearance. (#2682)
-
Improved the UX around creating folders and labels in the left sidebar - it's much easier to create nested items. (#2655)
-
A new "•••" menu on items in the left sidebar makes features (including the new EML export option) more discoverable.
-
Added EML export functionality for messages and folders. You can save selected messages as EML by right-clicking or from the app's menu, and export entire folders by right clicking in the left navigation. (#2652)
Improvements:
-
Improved password storage error handling and reporting. (#2669)
-
Fixed a race condition causing Windows notification "Archive" and "Mark as Read" buttons to be unreliable.
-
Added Microsoft Office 365 / Outlook account setup guidance and troubleshooting documentation. (#2656)
-
Replaced text symbols with SVG icons in the toolbar. (#2658)
-
Refinements to EML export task in the sidebar.
-
Fixed the Wayland app_id after Electron 41 (Thanks @ReillyBrogan!)
Bug Fixes:
-
Fixed an undefined
@font-weight-semi-bolderror in the ui-less-is-more theme. (#2684) -
Fixed a crash in quick preview when the capture window is destroyed. (#2671)
-
Fixed an unhandled EPIPE error when writing to a dead mailsync process stdin. (#2673)
-
Fixed race conditions in draft expiration and changeset handling. (#2678)
-
Fixed broken IMAP UTF-7 encoding by replacing the broken
utf7package with a custom implementation. (#2672) -
Fixed printToPDF errors being incorrectly sent to Sentry. (#2677)
-
Fixed an issue where launch options and URLs were processed before app initialization was complete. (#2675)
-
Fixed a crash caused by null values in draft field change detection. (#2676)
-
Fixed an issue where metadata attachment could fail for newly sent messages. (#2664)
-
Fixed autoupdate error handling. (#2670)
-
Fixed error handling for ICS parsing in the EventHeader component. (#2668)
-
Fixed crash when navigating to 'All' with accounts that have no archive category. (#2666)
-
Fixed null reference crash in ContactDetail on update. (#2661)
-
Fixed MacOS notifications showing a second copy of the app's icon
-
Fixed null range crash in the email composer. (#2662)
-
Fixed a race condition in EmailFrame that could deliver a null
doc.bodyto message extensions. (#2665) -
Fixed OAuth code parsing to handle
+characters correctly. (#2654) -
Fixed the
core:pop-sheetshortcut being blocked in the message list with an open reply composer. (#2653) -
On Windows, fixed font-weight rendering by using CSS variables. (#2650)
-
On Linux, fixed xdg-mime 'not found' error not being caught on dash-based shells. (#2667)
-
Added error handling for
shell.openExternalcalls to prevent crashes on unsupported URLs. (#2679)
Developer:
-
Fixed ability to declare platform-specific options via config-schema. (#2681)
-
Moved
appdata.xmlto themetainfodirectory for proper Linux packaging. (#2659) Thanks @BlueManCZ! -
Replaced direct
Electron dialog.showErrorBoxcalls withAppEnv.showErrorDialog. (#2680) -
Improved plugin activation error handling and TypeScript compilation. (#2674)
-
Suppressed LESS parse errors from Sentry reporting. (#2663)
1.19.1
Bug Fixes:
-
On Windows, fixed notification click handling and removed a redundant window display call. (#2648)
-
Fixed the custom port input not updating in IMAP onboarding. (#2646)
-
Fixed VoiceOver handling on email composer token inputs (To, CC, BCC, etc.).
Improvements:
-
Additional accessibility improvements: arrow key navigation and roving tabindex between messages in the message list, keyboard focus improvements in the account sidebar, email frame ARIA target for read-all support, and focus management fixes for modals and preferences.
-
On Linux, added Wayland session detection and a fallback menu button for window managers that don't support the system tray. (#2647)
-
Improved handling of navigation keys (arrow keys, etc.) in the composer typing state. (#2644) Thanks @ejbiker93ss!
-
Improved contact details panel styling.
-
On Linux/Wayland: frameless windows now display GTK drop shadows and support extended resize borders
Developer:
-
Updated to Electron 41 (Chromium 146, Node.js 24.14), up from Electron 39 (Chromium 142, Node.js 22). (#2643)
- Chromium updated from 142 → 146, bringing security patches and modern web standard support
- Fixed white flash when opening app windows
- Reduced GPU memory usage on macOS
- On Windows: fixed a crash with UTF-8 file paths and a hang in native notification delivery
- On macOS: fixed menu items incorrectly staying disabled after being re-enabled
- On Windows: fixed window fullscreen state not being preserved correctly
- On Windows: system notifications now support action buttons and inline reply inputs
- Fixed keyboard shortcut accelerators not working after toggling a menu item's enabled state
- Replaced the deprecated Electron clipboard renderer API with the standard
navigator.clipboardAPI
-
Replaced legacy dependencies (
fs-plus,rimraf,mkdirp,uuid,temp) with native Node.js APIs, removing several third-party dependencies. -
Removed unused dependencies
deep-extendandgraceful-fs. -
Added TypeScript typecheck and lint steps to the per-commit GitHub Actions workflow.
-
Updated license dates.
1.19.0
Features:
-
Comprehensive accessibility improvements, including semantic landmarks, ARIA attributes, focus traps for modals, accessibility labels on buttons, and more. If you use Mailspring using a screenreader, we'd love feedback about this release. (#2638)
-
Added VCard import/export functionality to contacts. (#2626)
-
Added support for creating new calendar events via double-click on the calendar. (#2635)
-
Added Calendar menu and keyboard shortcuts. (#2634)
Bug Fixes:
-
Fixed a TypeError when a contact's birthday date is undefined. (#2632)
-
Fixed Windows app restart and update handling with Squirrel. (#2631)
-
Fixed
canBeUndoneinitialization in ChangeMailTask subclasses. (#2630) -
Gracefully handle
xdg-mimenot being present on some Linux machines. -
Fixed poor Sentry reporting of errors bridged over the
report-errorIPC channel. -
Fixed an "Invalid String Length" error in the mailsync-process wrapper on very large stderr output.
-
Fixed a CardDAV issue with headers on XML requests and empty multiget responses.
-
Fixed
ERR_ABORTEDerrors from quick previews being silently reported to Sentry.
Improvements:
-
Improved calendar event editing with ICS-based recurrence support. (#2637)
-
Added recurring event indicator icon to calendar events. (#2633)
-
Added tray icon theme picker and 'none' style option for Linux. (#2628)
-
Tuned thread list swipe gesture detection, and added an option to disable swipe gestures. (#2629)
-
Folded grammar check preferences into General > Composer. (#2639)
-
Improved emoji popover positioning and updated emoji artwork with new additions.
-
Recovered the Slate editor when the user selects all and deletes all text, leaving only quoted text.
-
Added
WSAGetLastError()logging for TCP connection failures on Windows (mailsync).
Developer:
-
Added
X-GNOME-UsesNotifications=trueto the Linux.desktopfile. (#2640) Thanks @LinusDierheimer! -
Added
vcs-browserto the Linux AppStream metadata. (#2641) Thanks @LinusDierheimer! -
Removed deprecated Electron 4 polyfills and other outdated TODOs. (#2636)
-
Moved tests to
@testing-library/react, run in GitHub Actions. -
Added community plugins and themes documentation. (#2627)
1.18.0
Features:
-
Grammar check is now available in the composer! (#2612)
- This feature relies on a deployment of LanguageTool at id.getmailspring.com - when you use Grammar Check, small snippets of your draft are sent to this server, but the requests are not logged and no message data is stored.
- This feature is disabled by default. To turn it on, click the new icon in the composer toolbar.
-
Mailspring now properly detects "Do Not Disturb" status on MacOS Sequoia and on Windows.
Bug Fixes:
-
On Wayland, the
--backgroundflag now shows the main window briefly then hides it, which is the best we can do under Wayland's rules. (#2623) -
On Wayland, fixed a keyboard freeze in the composer caused by a double
focus()call. (#2622) -
Fixed sound notifications playing on Windows regardless of the notification preference. (#2619)
-
Fixed the tray icon theme detection on GNOME/Unity Linux desktops. (#2610)
-
Fixed a crash in vCard parsing when the
VERSIONline is not found. -
Fixed an issue with the first CardDAV sync incorrectly seeing existing ETags in mailsync.
-
Fixed IMAP IDLE to process
VANISHEDnotifications sent by FastMail (and possibly other providers). -
Fixed folder priority logic that was incorrectly applied to non-iCloud accounts in mailsync.
Improvements:
-
Added support for the stnadard biographies / notes field on contacts. (#2621)
-
Rearranged the thread context menu to reduce accidental destructive actions. (#2620)
-
Added an empty state to the calendar when no CalDAV accounts are connected. (#2625)
-
The draft window now uses the message subject as the window title.
-
Improved read receipt tracking pixel reliability. (#2613)
-
Improved mail rules robustness and fixed condition evaluation bugs. (#2616)
-
Added VTIMEZONE to created calendar events so they are created on Yahoo in the correct timezone.
-
Enabled CalDAV discovery to support Fastmail, Yahoo, and other providers in the upcoming calendar.
-
On Windows, the app icon is now a rounded square to better fit with Windows 11 design guidelines.
Developer:
1.17.4
Features:
-
Added Agenda view to the calendar for chronological event browsing. (#2592)
-
Added Linux Do Not Disturb detection for notification suppression. (#2595)
-
Added Windows jump list and badge icon desktop integration. (#2594)
-
Added ARM64 (aarch64) Linux build support. (#2601)
-
The selected calendar view now persists across sessions. (#2600)
Bug Fixes:
-
Fixed support for Wayland - window activation context is now handled gracefully. (#2599)
-
Fixed the app's system tray icon appearing as three dots (•••) at launch on Ubuntu 25.
-
Fixed summary notifications: broken Windows toast URLs and race condition. (#2597)
-
Improve Yandex account sync by ignoring their XLIST implementation, which is known to be buggy.
-
Fixed mutex re-entry locks during exception handling in mailsync that could be hit if a network disconnect caused both sync workers to throw at the same time.
-
Reverted IDLE error suppression that caused sync issues.
Improvements:
-
On Linux, default to thin window framing with hamburger-style right menu. (#2604)
-
On Linux, added dark/light system tray icon support. (#2602)
-
Improved JS algorithm performance using Map/Set for better collection handling. (#2596)
-
Enabled support for custom config directory path. (#2587) Thanks @DerDemystifier!
-
Added missing release info in appdata. (#2586) Thanks @ychavoya!
Developer:
-
Updated node-abi to 3.87.0 and added support for prebuilt better-sqlite3 binaries. (#2598)
-
Signed native .node addon files for Smart App Control compliance. (#2589)
-
Fixed RPM packaging dependencies for Fedora 43 and openSUSE compatibility. (#2590)
-
Fixed openSUSE CI test and RPM post-install scriptlet issues. (#2591)
1.17.3
-
Updates the .deb package dependencies to address Ubuntu 25 (libtidy58 replaces libtidy5deb1) and Linux Mint 22 (libcurl4t64, libgtk-3-0t64 instead of libgtk-3-0) installation issues.
-
Fix issues sending email on Windows caused by missing SASL libraries in some scenarios.
-
Screenshot mode now blurs the content of your emails as well (Thanks @cheack!)
-
The
Spanish - Latin America(es_419) translations have been verified (Thanks @MiguVT!) and we've used the latest LLMs to update machine translations in other language files that were many years old.