Repository navigation
·
3 commits
to 5c98b4e092f232a18cf147deb81d4c2759915754
since this release
Release 5.8.0
2026-10-14
Unified Windows Release (WPF + Avalonia)
- One download for both apps — The release zip now places
SimpleLauncher.exe(WPF) andSimpleLauncher.Avalonia.exe(Avalonia) side by side with a single shared content set (images/,tools/,samples/,appsettings.json) and ships oneUpdater.exethat updates either app. - Shared single-instance guard — Only one of the two apps can run at a time; launching the other brings the running instance to the foreground.
- Updater relaunches the app that started it — and still works on legacy WPF-only installs.
Unified Settings Database (settings.dat)
- One SQLite store for both apps — Favorites, play history, application settings, emulator settings, per-system play times, and system configurations now live in a single
settings.datin%LocalAppData%\SimpleLauncher(or the portable folder). - Automatic migration — The first launch migrates
settings.xml,system.xml,favorites.dat, andplayhistory.dat, verifies the result, and shelves the legacy files as.bak; on failure nothing is changed and the next launch retries. - Merge support — If a database already exists, any remaining legacy files are merged into it without losing database-only data or duplicating entries.
- Read-only database recovery — A read-only
settings.datis detected and recovered instead of crashing; failed saves are observed and logged. - Cross-app consistency — Systems renamed or deleted in one app stay in sync with favorites and play history.
WPF: Card Size Slider
- Top-bar slider — Resize game thumbnails with a slider next to the view controls (debounced when dragging), kept in sync with "Set Button Size" and Ctrl+Mouse wheel zoom.
Shared Localization
- One JSON pack set for both apps — The 18 language packs (2671 keys each) now live once in
SimpleLauncher.Core\Localization; WPF embeds them as pack resources and Avalonia embeds them in its assembly. - Legacy XAML resources removed — The per-language
strings.*.xamlfiles are gone. - Avalonia message boxes fully localized.
Reliability & Security
- Extraction — Zip-Slip validation fails closed, extraction no longer wipes destination folders (only files written by the failed run are removed), partial files are cleaned up, and locked archives are retried.
- Downloads — User cancellation is honored promptly, downloaded file names are sanitized against path traversal, and failures retry.
- Launching — Launch gating, rename migration, elevation handling, and invalid/missing executable dialogs were repaired; user cancellations and invalid executables are no longer reported as bugs.
- Xbox disc images — xemu and Cxbx-Reloaded open Xbox games in every container the bundled SimpleXisoDrive supports: XISO (
.iso/.xiso), CISO (.cso) and ZArchive (.zar) mount as virtual drives on Windows (Dokan) and Linux (FUSE 3) — xemu receives the virtualimage.iso, Cxbx-Reloaded the mounteddefault.xbe(it cannot read a raw Xbox image); Xbox-ISO.chdfiles now prefer SimpleXisoDrive and fall back to CHDMounter when the driver is unavailable. - Updater — Staged-file swap with rollback safety, path containment checks, safe restart, and retry, so a failed update no longer leaves a half-updated install.
- Stability — Fixed a gamepad-reconnect deadlock, a hash-pipe deadlock, a shutdown stall that left a clickable orphan tray icon, and play-history races (now serialized under lock); debug logging buffers are bounded.
- RetroAchievements — Hardened account handling, system-name matching, favorites/play-history sync, emulator credential injection, hashing and extraction paths. Hash-support decisions are now resolved and logged once per system instead of once per game card (selecting a PlayStation 3 library no longer floods the log with thousands of lookup lines).
- Avalonia fixes — Edit System help rendering, status bar visibility in the system selection screen, no-credentials panel in the RA window, loading the clicked system card after closing Edit System, in-app path guards, INI encoding, and a window title matching WPF.
- Filtering — Accent-insensitive game filtering restored, and Commander Genius archive deletion fixed.
Linux Support (Avalonia) — Beta
- Beta — Linux support is in beta: it was tested end-to-end on Ubuntu 24.04 x64 and Fedora 44 KDE (GUI smoke-tested on Wayland); the ARM64 bundle is structurally verified only. Please report issues on GitHub.
- Native Linux builds — The Avalonia app ships framework-dependent single-file bundles for
linux-x64andlinux-arm64(oneSimpleLauncher.Avaloniabinary plus its native libraries, like the Windows exes; the .NET 10 runtime is required;release_{version}_linux-*.zipplusupdater_linux-*.zip); the release workflow publishes them next to the Windows bundles and the in-app updater resolves the Linux assets. - No Dokan needed on Linux — Archive launches (ZIP/7z/RAR) mount through the bundled SimpleZipDrive FUSE build and Xbox images (
.iso/.xiso/.cso/.chd/.zar) through the bundled SimpleXisoDrive FUSE build (with the virtualimage.isofor xemu); the temp-extraction and managed CHDSharp conversion paths remain automatic fallbacks when FUSE or the payload is unavailable. DOSBox ISO games use the nativeimgmountinstead of the Windows PowerShell path. - Native Linux behavior — App data lives in the XDG folder (
~/.local/share/SimpleLauncher), Commander Genius uses~/.CommanderGenius, paths are handled POSIX-style with case-sensitive matching, and the extension-less bundled 7-Zip fallback (7zz) runs correctly. SDL2 gamepad navigation is supported. - Sound works out of the box — MP3/WAV UI sounds decode through managed decoders (NLayer + NAudio), so no extra packages are required; FLAC/Ogg/Opus use the system
libsndfile. Missing audio libraries/devices are logged as information instead of being reported as bugs. - Platform-aware pickers and checks — The emulator pickers no longer hide extension-less Linux binaries,
.AppImage/.sh/.runfiles are accepted, and file dialogs attach to the active window (Wayland). - Windows-only features are hidden on Linux/macOS — Store scanning, Dokan mounting, Take Screenshot, the RetroAchievements emulator-configuration section and the Windows-only Tools menu entries (Linux keeps XISOStudio, CHDStudio, RVZStudio and FindRomCover).
- 23 Linux port findings fixed (LB-01…LB-23) — Case-insensitive ROM/EXE discovery after extraction, backslash archive entry names, execute bits for bundled tools, CHD temp-file cleanup, mount platform guards, updater Zip-Slip comparison, platform-neutral dialog wording, defensive scan-handler gating, and Information-level logging when a release ships no update assets for the current platform.
Avalonia Fixes
- Letter buttons after a filtered view — Clicking a letter (or "All") after a RetroAchievements, Favorites, Recently Played or search view now reloads the complete library of the current system (and clears the search box), matching WPF, instead of filtering the already-filtered list.
- RetroAchievements hash scan — The bundled CLI is now invoked through its positional interface (with automatic resume after a file it cannot hash), so fresh scans on a new library no longer store zero hashes; existing scans are versioned and recalculated automatically. Applies to both apps.
- System icon size — Ctrl+Mouse wheel and the zoom buttons now resize the system icons on the system selection screen (50/100/150 px) and remember the choice, matching WPF.
- Pages hide the system bar — Favorites, Play History and Global Search no longer show the top system-selection bar, matching WPF.
- Auto-sized dialog buttons — The Global Statistics Start Process / Save Report buttons size to their localized text instead of a fixed width.
- No bogus legacy message — Opening Edit System with no configured systems no longer claims
system.xmlis missing; the window opens so the first system can be added. - Tray icon — Embedded in the Avalonia app (and as a pack resource in WPF) with
icon.icoshipped in the payload, so the tray icon always has an image. - Wait overlay — Shown for all long-running operations, matching the WPF app.
- System info panel — The selected system's configuration summary now appears after selection and hides when games load; the game cache is invalidated after system edits instead of showing stale games.
- Aspect-ratio changes — Card heights refresh through the binding instead of rescanning the library.
- Filename preferences stay instant — Switching the filename display mode (Original / Clean Up / No Filename) or the machine-name toggle no longer rescans the entire library under the loading overlay; captions refresh in place, keeping the open system, filters, pagination and scroll position.
Migration & Scan Hardening
- Migration gate — Database wins on merge (a reappearing stale file can never revert newer settings), a defaults-only
settings.xmlis ignored, newer-schema databases are left untouched, a timestamped pre-merge backup is taken, and the WPF and Avalonia migrations parse the legacy files identically. - Store scan handler — The async handler now catches and logs unexpected failures so they cannot escape as an unhandled exception.
Tooling
- PBPSharp — Replaced the vendored library with the NuGet package 1.1.1.
- Bundled tools — CHDStudio updated to 3.9.4 (Windows + Linux, x64 and ARM64, with the bundled
chdman/7zz), RomValidator to 2.9.2 (Windows, x64 and ARM64, now with 7-Zip 26.037zahelpers and the tool's XML docs) and SimpleZipDrive to 3.1.1 (Windows + Linux, x64 and ARM64); refreshed the default game image. - Dependencies — Meziantou.Analyzer 3.0.303, Microsoft.CodeAnalysis.NetAnalyzers 10.0.402, Microsoft.Extensions.* / Microsoft.Data.Sqlite 10.0.13, MessagePack 3.1.12, Microsoft.Extensions.Http.Resilience 10.10.0, NAudio 3.1.0, NLayer 3.0.0 + NLayer.NAudioSupport 3.0.0 (managed MP3 decoding on Linux/macOS).
- Zero analyzer warnings across all projects; both test suites pass.
Bundled Tools Refresh
- XISOStudio replaces the ISO→XISO batch tool — The Tools menu entry now launches XISOStudio for extracting/creating XISO (Xbox) images; it ships native Windows (x64/ARM64) and Linux (x64/ARM64) payloads.
- CHDStudio replaces the CHD batch tool — The CHD conversion entry now launches CHDStudio; the bundled
chdmanused by the app for CHD→ISO/CUE/BIN conversions ships insidetools\CHDStudio\<arch>\. - RVZStudio replaces the RVZ batch tool — The GameCube/Wii conversion entry now launches RVZStudio with
DolphinToolbundled beside it undertools\RVZStudio\<arch>\. - CHDMounter goes cross-platform — One payload per OS/architecture; on Linux CHD images mount through FUSE with a clean unmount (SIGTERM,
fusermount3/umountfallback) and the managed CHDSharp conversion as the automatic fallback. - SimpleXisoDrive — Mounts
cso/zarXbox images for xemu by generating theimage.isothe emulator expects. - Linux FUSE mounts for archives and Xbox images — SimpleZipDrive 3.1.1 and SimpleXisoDrive 1.5.0 now ship Linux (x64/ARM64) builds: ZIP/7Z/RAR launches (RPCS3/ScummVM/XBLA) mount through FUSE instead of extracting to temp, and Xbox images (
.iso/.xiso/.cso/.chd/.zar) mount through SimpleXisoDrive — including Xbox ISO CHD images via on-demand hunk decompression — for xemu/Cxbx-Reloaded; the extraction/conversion paths stay as automatic fallbacks. - FindRomCover 3.3.0 goes cross-platform — It now ships Linux (x64/ARM64) payloads and appears in the Linux Tools menu.
- RetroAchievementsSharp 1.0.0 — The CLI ships per OS/architecture as
RetroAchievementsSharp.Cli(.exeon Windows) and is resolved fromtools\RetroAchievementsSharp\<rid>\. - Per-RID tool payloads — FindRomCover, RetroAchievementsSharp, SimpleXisoDrive and SimpleZipDrive now use the same one-folder-per-OS/architecture layout as the studios; both packaging scripts keep only the target RID and the Linux package marks the tool binaries executable.
- Release packaging — The Windows and Linux packaging scripts keep only the running platform's tool payloads; the Linux ZIP marks bundled tools executable.
Update & Download Reliability
- Locked update files — The updater now waits (and retries) for files locked by a running instance before swapping the install (#67442–#67445).
- Single-file emulator downloads — Downloads that are a single executable (for example
.AppImage) are installed directly instead of being treated as an archive (#67537). - Cancelled/stalled downloads — Cancelled downloads delete their partial files, and stalled transfers time out and retry with the canceled read kept as the inner exception.
- Update checks — Network timeouts and missing update assets for the current platform are logged as information instead of errors (LB-23).
Emulator Launch & Parameters
- Stray line breaks are erased — CR/LF in emulator parameters are collapsed on save (Edit System and AI suggestions) and again at launch, so a pasted empty line can never corrupt the command line (bug #67575).
- Legacy placeholders resolve —
%ROMFILE%,%ROMNAME%,%GAME%and the$…$/{…}variants now resolve to the current ROM instead of being passed literally; RetroArch's-Lis only recognized as a standalone token. - Grounded AI parameter fix — MAME "Unknown system" failures caused by a full ROM path get a bare-machine-name hint, and the AI parameter resolver receives the real launch-failure context (exit code, emulator output, local diagnosis).
- Expected emulator conditions stay out of bug reports — Access violations (including RPCS3 guest crashes),
ERROR_NO_UNICODE_TRANSLATION(1113), Unicode/ANSI path failures, policy-blocked executables,STATUS_DLL_NOT_FOUND, unclassified emulator exits, missing MAME ROM-set/image errors and canceled UI operations are logged as information, never filed as bugs. - mame.dat failures — A missing/corrupt
mame.datreports after the main window exists (corrupt files offer auto-reinstall), and the app now quits on missing required files instead of hanging. - Windows audio fallback — Managed MP3/WAV decoding now ships on Windows too, so a missing Media Foundation no longer breaks UI sounds.
- System image replacement — Downloading an image over one held open by a viewer/thumbnail generator no longer fails (temp file + rename; bug #67779).
RetroAchievements
- Classification matches the bundled CLI — The system picker and hashing now follow the CLI's supported-console switch exactly: Wii U, PC-9800 and Zeebo are blocked, while C64, ZX Spectrum, Oric, SCV, Uzebox, TIC-80, TI-83, Elektor, VC4000 and Arcadia are hashable; Sega Model 2 no longer steals the Arcade name.
- More aliases — 'Sega Mega Drive (Sega Genesis)', 'PSP GOLD', Famicom/FDS spellings and 'DREAMCAST NAOMI' resolve to the right consoles, and the "no system selected" placeholder is no longer logged as an unmatched system.
Avalonia & UI Fixes
- Audio never blocks the UI — UI sounds play on a dedicated background thread, so a wedged audio stop/dispose cannot freeze the UI or shutdown.
- Dialogs stay with their window — Message dialogs are owned by the active window, so Easy Mode dialogs are no longer hidden behind the main window.
- Card overlay & button size — The card overlay buttons and button-size controls are wired to the Options menu; the "Show Games" cover filter, DataGrid Enter launch and search-cancel behavior were repaired.
- Adaptive theme — The Adaptive base theme resolves the machine's light/dark preference on Linux (gsettings) with a bounded timeout, falling back to Avalonia's platform settings.
- Single instance across sessions — A per-user lock file now enforces single-instance on Linux even for instances started in another session; the lock file is authoritative, so a simultaneous double launch can never leave both processes quitting.
- Preferences window — Navigating the Preferences list no longer crashes while the window is loading.
Easy Mode
- Fallback XML parsed in memory — Easy Mode parses its fallback XML without touching temp files and stops reporting expected conditions as bugs.
- Every emulator/core format installs on Linux — Single-file and archive downloads (including
.AppImage) install for all bundled emulators/cores.
Accessibility
- Accessible names everywhere — Every interactive control (inputs, sliders, grids, status/progress) exposes an accessible name, a stable automation id and polite live settings where it reports status, so Narrator/NVDA on Windows and Orca/AT-SPI on Linux can identify and drive the UI; guardrail tests fail on missing names.
Dependency Updates
- Avalonia 12.1.4, Roslynator 5.0.1, Meziantou.Analyzer 3.0.299, MessagePack 3.1.11, SharpCompress 0.50.5, PBPSharp 1.1.4, xunit.runner 4.0.1 (supersedes the versions listed above).