Dear patreons, we're back with another update, two weeks outside our usual Patreon rhythm—but for good reason! This release brings major improvements to performance, stability, and overall user experience.
This update brings a major breakthrough in CPU and memory usage—an area we’ve been working hard to optimize. With the help of the community, especially @JC, we were able to track down and fix several memory and CPU leaks that had been affecting performance. Thanks to these improvements, Handheld Companion is now more efficient, consuming fewer resources while running smoother than ever. We've heard rumors of users reporting memory usage as low as 85MB.

We’ve made significant upgrades to the Layout Manager, making it more versatile and customizable. You can now assign multiple actions to axis inputs (joysticks, triggers, and trackpads), allowing for more complex control setups. Additionally, we’ve introduced new axis output shapes (Default, Square, Circular)—with Square helping diagonal movement in some games and Circular improving joystick circularity. We also added options to invert horizontal and vertical axes, giving users even more control over their layout configurations. Gyro settings will now also apply to the virtual Sony DualShock 4 controller, making motion controls more seamless across different configurations.


We’ve put a lot of work into improving display management, ensuring better compatibility and smoother resolution handling. Handheld Companion can now more accurately detect and capture the native resolution of displays, ensuring the best possible visual output. We’ve also improved compatibility with integer scaling resolutions, making sure the correct resolutions are restored when switching profiles. Finally, we’ve enhanced support for native portrait displays, ensuring they are properly recognized and managed for an overall better user experience.

Implemented Battery Charge Limit percentage, thanks to @JT.
Implemented new hotkey: Gamepad mode, allowing user to cycle through different gamepad modes: auto/gamepad/desktop. This hotkey has replaced the one previously known as Desktop Layout.
Implemented application self-signature, allowing it to display content above any Windows UI elements.
Improved Layout Manager, with new Axis output shape settings: Default, Square, Circular. Setting axis output shape to Square might help with certain games when moving in diagonal. Circular will improve the circularity of the axis.
Improved Layout Manager, with multi-actions for axis (joystick, trigger, trackpad) support.
Improved Quicktools and MainWindow hotkeys, allowing the user to pick the page to be shown while targeted window opens.
Improved Layout Manager, with two new axis layout settings: Invert Horizontal Axis and Invert Vertical Axis.
Improved On-screen Display (OSD), with better memory and GPU values reading.
Improved display and resolution management, allowing us to capture native screen resolution and better manage portrait-native displays.
Improved overall performance and stability, with reduced CPU and memory usage and better UI threading management.
Improved overall controller management, with better sleep/resume handling and improved per-profile controller logic.
Improved overall GPU library management, with ability to unblock AMD libary (ADLX).
Improved MotherboardInfo cache querying logic. This should speed up the boot process by a second. (added in 0.22.1.16)
Fixed an issue causing hotkey order on quick home to be incorrect.
Fixed an issue causing a crash when trying to read file paths from LayoutManager and HotkeysManager.
Fixed an issue causing hotkey duplication when trying to convert old hotkeys.
Fixed an issue causing a crash when manipulating multithreaded ObservableCollections and Dictionaries.
Fixed an issue preventing DualShock UDP (DSU) server to halt on startup.
Fixed an issue causing a crash when trying to read/write MotherboardInfo cache file.
Fixed an issue preventing updates to desktop layout from applying immediately.
Fixed an issue causing a crash when trying to dispose Direct3D9 Device when already disposed.
Fixed an issue causing a crash when Steam process is halted.
Fixed an issue causing a crash if LayoutManager FileSystemWatcher couldn't initialize.
Fixed an issue causing a crash when trying to load a layout from LayoutManager before it's ready.
Fixed an issue causing a crash when GamepadMotion calibration data is null.
Fixed an issue causing a crash when trying to deserialize GamepadMotion data.
Fixed an issue preventing default resolution from being restored when a profile with IntegerScaling setting was being discarded.
Fixed an issue causing a crash when manipulating disposed CrossThreadLocks.
Fixed an issue causing a crash when trying to initialize LegionGo controllers.
Fixed an issue causing high CPU usage when a controller would get disposed.
Fixed an issue causing high CPU usage when connecting a controller compatible with JoyshockLibrary.
Fixed an issue causing high memory usage due to RTSS library.
Fixed an issue causing high memory usage and memory leak when changing display settings.
Fixed an issue preventing HC from terminating gracefully because an AutomationEventHandler would remain locked forever.
Fixed an issue causing a crash when device and controller would go to sleep/hibernation.
Fixed an issue causing crash when multiple Direct3DDevice() would be manipulated in parallel. (improved in 0.22.1.17)
Fixed an issue causing a crash when JslDisconnect would fail on unofficial Sony Dualshock and Dualsense controllers disconnection.
Fixed an issue preventing Controller Page from displaying the right reordering attempt. (added in 0.22.1.16)
Fixed an issue preventing virtual controller from awakening, causing infinite controller management loop. (added in 0.22.1.16)
Fixed an issue causing a crash on null DesktopScreen DeviceName. (added in 0.22.1.16)
Fixed an issue preventing foreground process reading when targeted application would prevent Modules reading. (added in 0.22.1.17)
BenjaminLSR
2025-02-23 11:16:32 +0000 UTCLuqman Kamis
2025-02-23 07:45:21 +0000 UTC