Set up your controllers once, then choose exactly which ones each game sees
Features · Installation · Usage · Building from Source · Changelog
Sim racing and flight sim players often end up juggling several USB devices (HOTAS, HOSAS, pedals, shifters, tablets) and three separate, unrelated tools just to make them behave: one to create virtual controllers, one to remap physical inputs onto them, and one to control which game sees which device.
Mojo Input Manager (MIM) unifies all three into a single app:
- vJoy virtual devices: create and remove virtual controllers with a couple of clicks, no manual driver configuration
- Mapping: detect connected physical devices and forward their live input onto a vJoy virtual device
- Device Filtering: use HidHide to control exactly which physical devices are visible to which applications, with save-and-apply profiles per game
Built so you set things up once, then forget about it.
- Lists existing vJoy virtual devices and lets you create the next free one or delete any of them
- Creation/deletion is elevated automatically (UAC prompt) since it changes the driver's persistent configuration
- Detects connected physical controllers live via the Gamepad API, no extra drivers needed to see them
- Shows real-time axes and button state for every selected device
- Combine multiple physical devices onto a single vJoy virtual device: select more than one, and their axes/buttons are forwarded together as one combined input
- Remembers which physical device (or combination) was last mapped to which vJoy target, and restores that selection automatically the next time it sees the same devices connected, no need to click through it again
- Per-axis invert, deadzone, and response curve shaping
- Forwards input with a single Start Mapping toggle
- Automatically excludes vJoy's own virtual devices from the physical device list, so you can't accidentally map a device to itself
- Save named game profiles and switch between them with one click
- A live output panel shows exactly what's being sent to the target vJoy device, no need for Windows' own properties panel
- Per-input rules described in plain sentences ("Normally, it does X", "While holding [button], instead it does Y"), no modes/bindings/sequences to learn
- Up to two designated Shift keys per profile: hold either one to switch any other input to its own alternate behavior
- Tempo: a quick tap and a press held past a threshold press two different vJoy buttons on the same physical button
- Hat Buttons: for hardware that reports a directional hat as a single axis instead of continuous movement, calibrated live per device with a hands-free wizard, and copyable from another already-calibrated axis
- Macro: a fixed sequence of press/release/wait steps played on every physical button press, each step can target a vJoy button, a real keyboard key, or a real mouse button
- Single Press and Tempo can also target a real keyboard key or mouse button instead of a vJoy button
- A live output indicator (or "On" badge for keyboard/mouse targets) shows which vJoy button, key, or mouse button a Single Press, Tempo, Macro, or Hat Buttons pipeline currently has asserted
- "Test in Windows" shortcut opens the native Game Controllers panel to verify live output without leaving the app
- Import an existing Joystick Gremlin
.xmlprofile: brings in button/axis remaps, Tempo, Macros, and Shift-style conditions, and reports anything it couldn't translate instead of dropping it silently
- Lists all gaming HID devices with their current Hidden/Visible status, with a one-click toggle
- Cloaking on/off master switch, so nothing is hidden from any app until you turn it on
- Manage the allow list of applications that can still see hidden devices while cloaking is on
- Save named profiles (a target game + which devices should be hidden, optionally linked to an Advanced Mapping profile) and apply them with one click: hides the right devices, allows the game, and turns cloaking on automatically
- Edit an existing profile in place, no need to delete and recreate it to change something
- Automatic game detection: when a profile's target game starts, apply it (and its linked Mapping profile) automatically, then revert when the game closes, toggle in Settings
- Switch the app's accent color between neon green and electric cyan
- Launch at Windows startup
- Export/import your device filtering profiles and mappings, for backups or moving to a new setup on the same hardware
- Automatic backups every 15 minutes while running, as an extra safety net alongside manual export
- See the current app version and check for updates on demand
- Minimizes to the system tray instead of closing, with an option to launch at Windows startup
- Checks for new versions automatically and updates itself in place, no manual reinstall
- Go to the Releases page
- Download the latest
Mojo Input Manager Setup X.X.X.exe - Run the installer and follow the steps
MIM automates vJoy and HidHide, and if either isn't installed, a banner at the top of the window offers to download and install it for you directly from its official source, no manual download needed.
Open the tab, click Add Device to create the next free vJoy virtual controller, or Delete to remove one.
Plug in a controller (move a stick or press a button if it doesn't show up right away), select one or more devices to combine, pick a target vJoy device from Forward to, and click Start Mapping. Next time you launch MIM with the same devices connected, the selection and target come back on their own.
Save a game profile in Live Mapping first, then switch to the Advanced Mapping tab. Pick an input to set what it normally does, designate a Shift key if you want alternate behavior on other inputs while it's held, and use Test in Windows to confirm the vJoy output without leaving the app.
Hide the physical devices you don't want other apps to see, turn Cloaking on, and add any application that should still be allowed to see everything to the Allowed Applications list. Save a Profile per game to apply the right combination in one click.
Pick your accent color and check the app's version and update status. Closing the main window minimizes MIM to the system tray rather than quitting; use the tray icon's Quit option to actually exit, or its Launch at startup checkbox to have MIM start with Windows.
- Node.js
- npm (included with Node.js)
- Windows
git clone https://github.com/mojouto3/mojo-input-manager.git
cd mojo-input-manager
npm install
npm run devnpm run distmojo-input-manager/
├── assets/ Icons, logos, social preview
├── src/
│ ├── main/
│ │ ├── main.js Electron main process, window, tray, IPC, auto-updater
│ │ ├── vjoy.js vJoyConfig.exe wrapper (create/delete, elevated)
│ │ ├── vjoyInterface.js vJoyInterface.dll wrapper via koffi (live feed)
│ │ ├── hidhide.js HidHideCLI.exe wrapper (devices, cloak, apps)
│ │ ├── profiles.js Per-game device filtering profiles
│ │ └── mappingProfiles.js Remembered physical-device-to-vJoy mappings
│ └── renderer/
│ ├── components/ Shared UI: Card, Button, Badge, Toggle, Tabs, Sidebar...
│ ├── theme.js Accent theme (green/cyan) persistence
│ └── views/ Dashboard, VirtualDevices, Mapping, DeviceFiltering, Settings
└── package.json
See the MIM Roadmap project board and milestones for what's shipped and what's next.
| Who | What |
|---|---|
| mojouto3 | Manager: repo administration, releases, milestones |
| Constantinos-T | Developer: feature branches, commits, PRs |
Both open PRs for their own contributions; the other reviews before merge. All PRs target main and require 1 review.
MIT License, free to use, modify, and share. See LICENSE for details.
Made with 🎮 by mojomultimedia · Constantinos-T
