v1.8.8
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 —
DOSJoystickPresetenum, AppSettings persistence,DOSJoystickSettingsViewwired 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 —
isReflectingParametersstate inShaderPresetPickerViewandShaderEditorSidebar; a reflection failure can no longer leave the spinner stuck - fix: route
scale_type=sourceslang presets through a source-sized intermediate —hasSourceSizedFinalPassdetection,needsSourceSizedIntermediate, pinned to.bgra8Unormto 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, anddocs/_config.yml