Announcing the release of CtrlAssist v0.3.0, which introduces significant new features and usability improvements. CtrlAssist brings “controller assist” functionality to Linux gaming by allowing multiple physical controllers to operate as a single virtual input device. This enables collaborative play and customizable gamepad setups, making it easier for players of all ages and abilities to enjoy games together.
Major Features
System Tray Interface
This release introduces a graphical system tray application that provides desktop integration for managing controller multiplexing. Users can now:
- Configure primary and assist controller assignments via dropdown menus
- Start and stop the mux without using the command line
- Adjust settings through a context menu interface
- Receive desktop notifications for status changes
- Persist configuration across sessions
The tray interface supports live reconfiguration of device-invariant settings (mux mode and rumble target) while the mux is running.
Multiple Hiding Strategies
Controller hiding now supports three distinct strategies:
- None: No hiding, manual configuration required
- Steam: Automatically manages Steam’s controller blacklist via config.vdf modification
- System: Restricts device permissions system-wide (requires root access)
The Steam hiding strategy enables proper functionality in sandboxed environments without requiring elevated privileges, addressing a key limitation for Flatpak users.
Live Runtime Updates
The mux runtime now supports dynamic reconfiguration without restart for:
- Mux mode changes (Priority, Average, Toggle)
- Rumble target adjustments (Primary, Assist, Both, None)
This functionality is available through both the system tray and programmatic (D-BUS) interfaces, allowing users to adapt behavior during gameplay sessions.
Flatpak Distribution
CtrlAssist is now packaged as a Flatpak application with:
- Automated GitHub Actions workflow for release builds
- Desktop entry and metainfo for application catalogs
- Proper sandbox permissions for device access
- Support for Steam configuration modifications within the sandbox
Flatpak bundles are automatically built and attached to GitHub releases.
Additional Improvements
- Configuration persistence to
$XDG_CONFIG_HOME/ctrlassist/config.toml - Controller selection by name with best-effort matching across sessions
- Enhanced documentation with installation instructions for both Cargo and Flatpak
- New pixel art banner and application icon (via Aseprite)
- Improved force feedback device recovery after disconnection
- Better error handling and user feedback throughout the application
Installation
CtrlAssist v0.3.0 can be installed via:
- Cargo:
cargo install ctrlassist --force - Flatpak: Download the bundle from the releases page and install with
flatpak install
Full installation instructions are available in the README.
Breaking Changes
The --hide flag now requires an enum value (none, steam, system) instead of being a boolean flag. Users upgrading from v0.2.x should update their scripts accordingly:
- Previous:
ctrlassist mux --hide - Current:
ctrlassist mux --hide system


It’ll be helpful for people with HOTAS systems where the joystick and throttle are separate playing games that only support one joystick. I ran into that problem with Freespace 2 a few years ago but I think proper multi-stick support has been added since then.