Skip to content

Repository files navigation

Switch 2 Controller Helper

A macOS app that connects Nintendo Switch 2 Pro Controllers via Bluetooth Low Energy and bridges their input to your Mac. The primary goal of this project is to allow the Switch 2 Pro Controller to behave exactly like a native Game Controller on macOS, bridging the proprietary Switch 2 BLE protocol to standard macOS HID events.

Features

  • Wireless BLE connection to Nintendo Switch 2 Pro Controller
  • Virtual Native Gamepad — Uses a virtual HID device so your Mac sees it as a real native game controller.
  • Full button mapping — All 19 buttons including the new Chat (C) button.
  • Analog stick support — Full analog stick reporting with deadzone handling.
  • Keyboard fallback bridge — Maps controller input to keyboard events if the native gamepad driver isn't available.
  • Auto-connect — Automatically detects and connects to Nintendo controllers.

Requirements

  • macOS 13.0 or later
  • Mac with Bluetooth Low Energy support
  • Nintendo Switch 2 Pro Controller
  • For Native Gamepad integration: Apple Developer Program ($99/yr) for the com.apple.developer.hid.virtual.device entitlement, or disabling SIP with the amfi_get_out_of_my_way=1 boot-arg for local testing (which I have not done, so it is entirely untested).

Usage

  1. Build and run the app in Xcode.
  2. Put your Switch 2 Pro Controller in pairing mode (hold the SYNC button).
  3. The app will auto-detect and connect to the controller.
  4. Input will be sent natively to macOS via the virtual gamepad driver, allowing any game to seamlessly recognize the controller. Alternatively, the app falls back to keyboard bindings.

Button Mapping

Byte 2 Byte 3 Byte 4
0x01 = B 0x01 = D↓ 0x01 = Home
0x02 = A 0x02 = D→ 0x02 = Capture
0x04 = Y 0x04 = D← 0x10 = Chat (C)
0x08 = X 0x08 = D↑
0x10 = R 0x10 = L
0x20 = ZR 0x20 = ZL
0x40 = + 0x40 = −
0x80 = RS Click 0x80 = LS Click

Known Limitations

  • Native gamepad visibility requires either an Apple Developer Program entitlement or disabling SIP for local testing. Without it, the app falls back to keyboard emulation which can be less ideal for some games.
  • Motion data (gyro/accelerometer) and rumble capabilities may require additional protocol reverse-engineering to fully activate.

If anyone has access to an Apple Developer account and wants to test and get it to work, please feel free to submit a pull request!

References & Acknowledgments

For research and most of the coding, I used a combination of Claude for the planning and research and Gemini for the coding (was going to take this more seriously if I was actually able to do this without spending a ton of money). The LLM referenced the following repositories, some of which are now dead links, when creating this project:

Protocol Research

  • ndeadly/switch2_controller_research Comprehensive documentation of the Nintendo Switch 2 controller BLE protocol, including GATT services, characteristic UUIDs, input report formats, and the proprietary pairing handshake.

Reference Implementations

  • bitaxislabs/Switch2BLE iOS reference app (Swift/CoreBluetooth) implementing Nintendo's proprietary BLE pairing protocol and 63-byte input report parsing. Displays live controller state including buttons, sticks, triggers, motion, and HD Rumble testing.

  • bitaxislabs/nintendo-switch-2-controllers-for-web WebBluetooth implementation of the full BLE pairing protocol with SPI flash calibration, live input visualization, motion sensors, and mouse sensor support.

  • seitanmen/Joycon2forMac macOS app (Obj-C++/Swift) for connecting Switch 2 controllers. Implements BLE connection, input parsing, and keyboard bridging. Key reference for the Switch 2 button byte layout and characteristic identification.

  • aureliendesert/switch2bridge-macos Python/macOS bridge using the bleak BLE library. Useful for verifying BLE connectivity and protocol behavior independently of Swift/CoreBluetooth.

  • Nohzockt/Switch2-Controllers Python-based controller research and implementation. Additional protocol documentation and connection flow reference.

Related Projects

  • nicman23/dkms-hid-nintendo Linux kernel HID driver for Nintendo controllers (Switch 1). Foundation for understanding Nintendo's HID protocol conventions.

About

WIP as I don't have entitlements to actually test further. Concept is getting the Switch 2 Pro Controller to behave as a real Switch Pro Controller on macOS

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages