Skip to content
mojouto3 edited this page Aug 1, 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, and have the last-used combination and target 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. Install the prerequisite drivers

MIM automates vJoy and HidHide, but doesn't install those drivers for you: both need to be installed first.

  • vJoy (virtual joystick driver)
  • HidHide (Nefarius, device visibility filtering)

MIM shows a warning banner with direct download links if either driver isn't detected on launch. See Getting Started for a full walkthrough.

2. 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.

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