v1.8.8

August 6, 2026

A release focused on input, shaders, and library ergonomics. Input & TV Mode: DOS games can now see your joystick, with new configuration options, improved controller-port handling for DOSBox-Pure and better mouse-click monitoring. Gamepad fixes make consecutive presses register reliably, the toolbar overlay (L3+R3 / Start+Select) works while another app is focused, and the Stop dialog can be confirmed with the A button in TV Mode. TV Mode also picks the right screen on first launch, and a new external display prompt hands the game over with a brief warm-up before the switch. Shaders: parameters that had no effect are now greyed out, switching between complex shaders is faster with a spinner instead of a blank panel, and presets that emulate composite/NTSC video now render the way they should. Library: custom box art from a local file, dynamic box art refresh across the library, and pinch-to-zoom with live column reflow in the library grid.

Highlights

  • DOS games can now see your joystick: Your connected controller is now visible to DOS games via DOSBox-Pure, with new options to pick the joystick preset per game or system, a hotkey to toggle it, and improved controller-port and mouse-click handling.
  • Only working shader sliders shown: Shader parameters that had no effect on the picture are now greyed out — you only see sliders that actually change something.
  • Faster shader switching: Switching between complex shaders no longer shows a blank "No parameters" panel; parameters load in the background with a spinner.
  • Fixed CRT shader rendering: Presets that emulate composite/NTSC video (like ntsc-md-rainbows) now render the way they should.
  • Custom box art: Set your own box art from a local file, and box art now refreshes dynamically across the library.
  • Pinch to zoom the library: Trackpad pinch zoom with live column reflow in the library grid.
  • External display handoff: Connect a display and TruchiEmu offers to move the game over, with a brief warm-up before the switch — and TV Mode now picks the right screen on first launch.
  • Gamepad & TV Mode fixes: Consecutive button presses register reliably, the gamepad toolbar (L3+R3 / Start+Select) works while another app is focused, and you can confirm the Stop dialog with the A button in TV Mode.
  • Hotkey polish: New fullscreen toggle, Escape hint when the keyboard is captured, a stable hotkey-row layout, and app hotkeys disabled while keyboard is captured for DOS/ScummVM.
  • Stability: Stopping a game no longer freezes the app while iCloud is syncing files.
  • Menu bar icons: Custom menu bar items now show proper icons instead of plain text.

Detailed Changes

  • feat: add DOS joystick support and configuration options — DOSJoystickPreset enum, AppSettings persistence, DOSJoystickSettingsView wired into GameDetailView, hotkey toggle, en/es/pt/ja translations, XPC bridge support for DOS joystick types
  • feat: enhance controller port device handling for DOSBox-Pure and improve mouse click monitoring
  • fix: disable inert slang shader parameters in UI — compute consumed-names set once per chain, stamp ShaderUniform.disabled, cache by preset path + mtime fingerprint
  • feat: implement async reflection for slang presets in ShaderManager and ShaderEditorSidebar; subsequent fixes land in later commits
  • feat: show loading indicator while shader parameters reflect — isReflectingParameters state in ShaderPresetPickerView and ShaderEditorSidebar; a reflection failure can no longer leave the spinner stuck
  • fix: route scale_type=source slang presets through a source-sized intermediate — hasSourceSizedFinalPass detection, needsSourceSizedIntermediate, pinned to .bgra8Unorm to satisfy Metal validation
  • feat: implement source-sized offscreen texture handling for PassFeedback chains and enhance the rendering pipeline
  • feat: point slang-shaders submodule to a fork with macOS path fixes
  • feat: enhance ShaderEditorSidebar with ScrollViewReader for scroll position restoration
  • fix: clear per-game shader override when accepting the system shader
  • feat: add local file picker for box art and update translations
  • feat: integrate BoxArtService for dynamic box art updates in UI components
  • feat: smooth pinch zoom with live column reflow in the library grid
  • feat: add external display prompt with warm-up pill and game handoff
  • fix: resolve TV mode cold-start screen selection after window is up
  • fix: clear stale gamepad nav button state when all buttons released — reset transient poll state on the idle path so repeated presses produce rising edges
  • fix: gamepad toolbar context outranks TV mode nav so Stop confirm receives the A press
  • fix: trigger gamepad toolbar overlay (L3+R3 / Start+Select) while the app is not focused — bypasses the key-window filter that silently paused the runner
  • feat: add fullscreen toggle hotkey and update translations
  • feat: add escape hint functionality and update translations
  • fix: keep hotkey row layout stable when reset and clear buttons appear
  • fix: disable app hotkeys while keyboard is captured for DOS/ScummVM
  • refactor: simplify card background and stroke color logic in GameCardView
  • feat: add SF Symbol icons to all custom menu bar items
  • fix: prevent UI freeze on game stop from iCloud materialization — async XPC proxy with real timeout, launch-time materialization off the connection queue, shared directory-walk budget
  • Bump marketing version to 1.8.8 and build number to 31 across project.yml, both Info.plists, and docs/_config.yml