Released July 8, 2026 — downloads for this release
Two options are available for v0.8.0:
| Download | When to use |
|---|---|
QuickMail-win.msi — Windows
installer |
Recommended for most users. A standard setup wizard with license agreement; installs per-user with no elevation required, adds the WebView2 Runtime if missing, and enables automatic updates. |
QuickMail.exe — standalone portable
executable |
No installation required. Copy it anywhere and run. |
Both downloads include the .NET 8 runtime — you do not need to install .NET separately.
This release introduces theming and a visual design system: light and dark themes, app-wide text scaling and font choice, and a Theme Manager for creating, sharing, and hand-editing themes. See the Themes section of the User Guide for the full walkthrough. It also introduces automatic updates — installed copies of QuickMail now keep themselves current, with you in control throughout. And it adds an always-available Tools menu and in-app bug reporting that doesn’t require a GitHub account.
Starting with this release, QuickMail keeps itself up to date. When a newer version is available, the installed app downloads it quietly in the background and installs it the next time you exit and reopen QuickMail — no download page, no installer to run, no security warnings. The Help menu continues to show whether you are current, offers a Restart to Update option when a new version is waiting, and the first start after an update confirms what was installed. You stay in control throughout: automatic updating and its notifications can each be turned off in Settings → Advanced, with manual updating always available. See the Installing and Updating section of the User Guide for the full walkthrough.
This release uses a new installer, so getting onto the automatic-update track requires one manual reinstall:
Your data is safe throughout: settings and mail live in a separate location the installer never touches, and passwords stay in Windows Credential Manager. After this one reinstall, all future updates are automatic.
Notes on the new install:
Nothing changes. QuickMail.exe remains a single-file
download that you update manually; the Help menu still tells you when a
new version is available.
QuickMail now has a color theme, chosen in Settings → Appearance. Six themes ship built in:
Theme changes apply immediately — no restart. An open message re-renders in the new colors without moving focus.
Every theme carries a plain-language Theme description — a written account of its overall look, its fonts, and each individual color together with exactly where that color is used (message list, links, selection, focus outline, error and status text, and so on). Color values are translated into words like “dark muted blue” or “warm off-white,” with the nearest well-known color name for reference. The Theme Manager shows this description for whichever theme is selected, in a read-only text box you can read or hear at your own pace, so themes can be understood and compared without seeing the colors.
The Appearance tab also gives you:
Choose Manage Themes… from the new Tools menu, or Manage Themes from the Command Palette (Ctrl+Shift+P), to open the Theme Manager. It is a separate, non-blocking window, so you can leave it open and try themes against real messages. From the theme list, press Tab to reach the actions:
.quickmailtheme file..quickmailtheme file.
If a file has a problem, QuickMail tells you exactly what is wrong (for
example, which color value is not a valid hex color).A theme is a plain, documented JSON text file: duplicate a built-in theme, open the themes folder, and edit the copy in any text editor. Any color you leave out is filled in from the built-in Light or Dark theme.
The Command Palette also offers Next Theme and Previous Theme, and a Theme: [name] command for each theme. None of these carry a default shortcut — assign one in Settings → Keyboard if you want direct access.
The main window now has an always-available Tools menu, grouping the commands used less often than day-to-day mail actions: Manage Themes…, Next Theme, Previous Theme, Address Book… (Ctrl+Shift+B), Rules… (Ctrl+Shift+L), and Command Palette… (Ctrl+Shift+P). Address Book, Rules, and Command Palette moved here from their previous menus, so each command now lives in exactly one place; their keyboard shortcuts are unchanged.
When Windows High Contrast is on, QuickMail steps aside entirely — every color comes from your Windows High Contrast palette, QuickMail’s own control styling is withdrawn so the system’s High Contrast controls take over, and the reading pane defers to the browser’s forced-colors handling. Your theme choice is remembered and returns automatically when High Contrast is turned off. Font and text-size settings continue to apply.
Help → Report a Bug opens a report window without requiring a GitHub account. Fill in a summary and, optionally, what happened, what you expected, and steps to reproduce — a Preview area always shows exactly what will be sent. QuickMail submits the report directly to GitHub Issues using its own narrowly-scoped, app-owned credential, and shows a link to the created issue on success. If sending isn’t possible (no credential available, or the request fails), Copy report and open GitHub copies your report to the clipboard and opens a pre-filled issue page in your browser instead. By deliberate design, the only things sent are what you type plus a short Environment section of non-sensitive details — currently the QuickMail version, your Windows version, the .NET runtime version, the active theme, the current view (message grouping, plus the saved view name if one is applied), and the message sort order. No message content, email addresses, account settings, credentials, or log file content is ever collected — and the Preview shows the whole report so you can confirm before sending.
TextBox
(edits blocked in code, not by making it read-only), so arrow-key
navigation through the preview behaves the same as any other text field
instead of losing character-by-character review. Its window title reads
and announces as “Report a Bug - QuickMail”.Thank you, as always, to everyone who contributes to QuickMail through code, bug reports, feature suggestions, and other feedback.
App.xaml.cs declares an explicit
Main that runs VelopackApp.Build().Run()
before WPF initializes — vpk pack verifies this via IL
inspection and refuses to pack without it (App.xaml
compiles as Page).UpdateCheckService branches by runtime: installed
copies use UpdateManager + GithubSource
(silent background download; applied on exit, or immediately via the
Restart to Update dialog, which is cancellable — dismissing the dialog
retracts a restart waiting on a slow download); the portable exe keeps
the original GitHub API notification-only check. The
AutoUpdate setting switches installed copies to
notification-only.vpk --msi) with
welcome/license/conclusion pages; Velopack’s one-click
Setup.exe and -Portable.zip are deliberately
not published. --framework webview2 preserves WebView2
install-on-demand; --instLocation PerUser keeps updates
elevation-free (per-machine installs are deliberately unsupported).current\QuickMail.exe path); uninstall offers data removal
via a detached prompt from OnBeforeUninstallFastCallback
(hook processes are killed after 30 seconds), including Credential
Manager cleanup, with diagnostics in
%TEMP%\quickmail-uninstall.log.Version, AssemblyVersion, and
FileVersion; vpk download github enables delta
packages from the second release onward;
fail_on_unmatched_files fails the release if expected
assets are missing. A --updateFeed <path> startup
flag allows full offline update-cycle testing against local
vpk pack output (see docs/INSTALLER.md).Theme.* DynamicResources;
Theming/ThemeKeys.cs is the single source of truth for
their names.ThemeService publishes tokens by atomically
replacing one merged dictionary rather than mutating in place,
so DynamicResource listeners never see a transient missing-resource
state. Under High Contrast every token is rebuilt from live
SystemColors and Styles/ThemedControls.xaml is
withdrawn so WPF’s built-in High-Contrast templates return. The service
is IDisposable; App.OnExit disposes it and
detaches the static OS-change handlers.ThemeStore keeps built-ins as embedded resources and
user themes as one JSON file each under {profile}\themes\;
corrupt files are skipped with a log line and never block startup.
Parsed user themes are cached and invalidated on save/delete.--qm-* CSS-variable bridge; with no theme CSS the documents
fall back to CSS system colors, so no-theme rendering is unchanged.Helpers/ThemeDescriber.cs generates the plain-language
Theme description: it converts each hex color to a spoken descriptor
(lightness, chroma-gated saturation, hue) plus the nearest documented
CSS/X11 color name, and lays out where each token is used.ThemeRegressionGuard test rejects new hardcoded
colors or numeric font sizes in Views/,
Controls/, and Styles/ XAML outside a reviewed
allowlist, so future work keeps everything token-driven.Style lacking BasedOn, which
silently discarded the themed background/foreground and reverted to
WPF’s default light chrome: the message list and the
Conversation/Sender/Recipient tree views (severe — white background made
dark-theme Conversation view unreadable), Rules Manager text boxes and
dropdowns (moderate), and the compose formatting toolbar (minor). All
now chain BasedOn to the themed implicit or keyed
styles.{profile}\themes\), so their
parse path was hardened per issue #183:
fontFamily/monoFontFamily are validated to
plain family names (a raw WPF FontFamily string allows
# to mean baseUri#familyName, which could
otherwise point the font loader at an attacker-controlled file/UNC/pack
URI); theme files over 256 KB are rejected before being read; and
PathForId asserts the resolved path stays a direct child of
the themes folder as defense-in-depth against path traversal.IBugReportService submits directly to the GitHub Issues
API using an app-owned, repo-scoped (Issues:Write only)
token stored through the existing ICredentialService — no
user GitHub sign-in. BuildFallbackUrl uses
Uri.EscapeDataString (correct percent-encoding) and
truncates the body so the pre-filled fallback URL can’t exceed what
ShellExecute will open; the full report is always available
via the clipboard regardless.ReportBugViewModel collects only what the user types
plus a fixed Environment block (QuickMail version, Windows version, .NET
runtime version, active theme, current view/grouping, and message sort —
captured as a BugReportContext snapshot when the window
opens). It never reads quickmail.log, an explicit product
decision recorded in
docs/planning/bug-reporting-pm-dev-spec.md, not an
oversight.ReportBugWindow is opened modeless
(.Show(), not .ShowDialog()) per this
codebase’s modal-dialog rules, since it has editable text fields and can
be opened over a window with a live WebView2 reading pane. Its event
subscriptions use named handlers so OnClosed can
unsubscribe all of them, preventing a Send still in flight from touching
the window after it closes and is disposed.0.8.0 (Version,
AssemblyVersion, FileVersion).