Skip to content
mojouto3 edited this page Aug 2, 2026 · 6 revisions

Mojo Input Manager

Mojo Input Manager (MIM) is a controller setup and management desktop app for Windows, built with Electron (JavaScript, React).

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. MIM unifies all three into a single app.


Key Features

  • Virtual Devices (vJoy) Create and remove vJoy virtual controllers with a couple of clicks. Creation and deletion are elevated automatically (UAC prompt) since they change the driver's persistent configuration.

  • Mapping Detect connected physical controllers live via the Gamepad API and forward their input onto a vJoy virtual device. Combine multiple physical devices onto a single vJoy target, or run several mappings at once (a HOTAS's throttle and stick, or two HOSAS sticks, each with its own target), with a quick swap to flip which target a mapping feeds. Tune each axis with invert, deadzone, and a response curve. Save a whole setup as a named game profile to switch games with one click, and individual combinations are remembered and restored automatically next time.

  • Device Filtering (HidHide) Control exactly which physical devices are visible to which applications. Save named profiles (a game plus which devices it should see) and apply the right combination with one click.

  • Settings Switch the app's accent color between neon green and electric cyan, and check the app version and update status.

  • Runs in the background Minimizes to the system tray instead of closing, with an option to launch at Windows startup, and updates itself in place when a new version is released.


Tech Stack

  • Platform: Windows desktop
  • Framework: Electron, React, Tailwind CSS, Framer Motion
  • Native integration: koffi (FFI) for vJoyInterface.dll, spawned CLI wrappers for vJoyConfig.exe and HidHideCLI.exe
  • Package manager: npm

Getting Started

1. Download and Install MIM

  • Go to the Releases page.
  • Download the latest Mojo Input Manager Setup x.x.x.exe.
  • Run the installer and follow the on-screen steps.

If you are running from source, see Developer Setup.

2. Install the prerequisite drivers

MIM needs two more drivers to work: vJoy (virtual joystick driver) and HidHide (Nefarius, device visibility filtering). You don't need to visit either link yourself: launch MIM, and if either driver isn't detected, a banner at the top of the window shows an Install button that downloads that driver's latest installer directly from its official source above and runs it for you. See Getting Started for a full walkthrough.

3. Basic Usage

  1. Virtual Devices: create your first vJoy virtual controller.
  2. Mapping: plug in a physical controller, select it (or several to combine), pick the vJoy device you just created as the target, and click Start Mapping.
  3. Device Filtering: hide the physical device(s) from other apps, allow your game through, turn Cloaking on, and save the combination as a profile for next time.

Tabs Overview

Tab What it does
Dashboard Landing page with quick links into the setup steps below
Virtual Devices Create and remove vJoy virtual controllers
Mapping Detect physical controllers and forward their input to a vJoy device, single or combined
Device Filtering Hide/show physical devices per app using HidHide, with save-and-apply profiles
Settings Accent color, app version, and update status

Project Structure

mojo-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, Select, Sidebar...
│       ├── theme.js              Accent theme (green/cyan) persistence
│       └── views/                Dashboard, VirtualDevices, Mapping, DeviceFiltering, Settings
└── package.json

More

Clone this wiki locally