Skip to content

About

A virtual gamepad driver and menu-bar app for macOS Monterey (v12) and above.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

76 stars

Watchers

2 watching

Forks

Latest commit

 

History

2,203 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OpenJoystickDriver

Play Mac games with the controller macOS does not support.

CI Latest release Downloads GitHub Sponsors License: PolyForm Noncommercial

Wiki · Supported controllers · Changelog

The Controllers window with a DualShock 3 served as a virtual gamepad

macOS reads a short list of game controllers and ignores the rest, such as the DualShock 3 above. OpenJoystickDriver (OJD) is a menu-bar app that reads those controllers over USB, Bluetooth or a 2.4 GHz dongle and gives games a virtual Xbox or generic gamepad. A controller macOS already handles is left to macOS. OJD runs in your user session with one DriverKit extension and no kernel extension, so SIP and AMFI stay on.

Warning

Many controllers have no hardware test yet, and some games do not read the virtual controller. Check Supported controllers and Playing games before you rely on it.

Quickstart

Requires macOS 12 or later, on Apple silicon or Intel.

  1. Download the .dmg from the latest release, drag OpenJoystickDriver.app into Applications and open it.
  2. Click the controller icon in the menu bar. If it shows Grant Access, allow OJD in Input Monitoring and Accessibility.
  3. Connect the controller, select it under Controllers and click Open Input Test... to watch each control respond live.
  4. Start a game.

An Xbox One or Series controller on USB also needs the driver extension, under System Settings > General > Login Items & Extensions > Driver Extensions. Stuck? See Troubleshooting.

Features

  • 600+ controller records across Xbox, PlayStation, Nintendo Switch, Steam, GameSir, NVIDIA SHIELD, Flydigi and generic HID gamepads.
  • Three virtual profiles per controller: SDLCompatible (an Xbox Adaptive Controller for SDL games and Steam), GameControllerCompatible (an Xbox Wireless Controller for Apple's Game Controller framework) and Generic.
  • Remapping with combinations, sequences and layers, plus keyboard, pointer and scroll output.
  • A live input test for every button, stick and trigger.
  • Mods that add controller records, patches, profiles and virtual devices without touching the signed app.
  • ojd, a command-line tool with JSON output for scripts.

Usage

Install ojd from Settings > Install Command-Line Tool, which links /usr/local/bin/ojd. Check the service, extension and permissions, then list connected controllers:

ojd status
ojd controller list

Start an SDL game with your virtual controllers' mappings in SDL_GAMECONTROLLERCONFIG:

ojd virtual launch /Applications/PCSX2.app

Check a mod package, then install it:

ojd mod install ~/Downloads/my-controller-mod --dry-run
ojd mod install ~/Downloads/my-controller-mod

The wiki covers the rest: Getting started, Using the app, Remapping profiles and the Command reference.

Screenshots

The menu-bar menu The Library window with an installed controller record The Activity window with the live log The General pane of Settings

FAQ

Do I need to disable SIP or AMFI?

No. OJD needs neither, in any build.

Does it work with Steam?

Yes, with the SDLCompatible profile: Steam read every control and drove the rumble motors on macOS 27. With Generic, Steam was erratic and slow to respond. See Playing games.

Why does my controller work in one app but not another?

Each app reads controllers through its own API, and some SDL apps cannot read the virtual controller. See Game does not see the controller.

Contributing

Run ./Scripts/ojd setup and just check before opening a pull request; see CONTRIBUTING.md. Bugs and controller test results go through Reporting a bug. Sponsorship pays for the controllers and Macs that tests run on; if your company uses OJD, please sponsor it.

License

PolyForm Noncommercial 1.0.0 © 2026 Krystian J., from 0.6.0-alpha.2 on. Use, fork and share it freely for noncommercial purposes. For commercial use, talk to the maintainer: see COMMERCIAL.md. Releases up to and including 0.6.0-alpha.1 are MIT. Xbox and PlayStation are trademarks of Microsoft and Sony; OJD is not affiliated with either.

About

A virtual gamepad driver and menu-bar app for macOS Monterey (v12) and above.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

76 stars

Watchers

2 watching

Forks

Releases

Sponsor this project

Contributors

Languages