This project was previously named OpenRudder.
MoveStick turns any movement into game controls.
Attach it to anything — your hand, a cap, a balance board, a wheelchair joystick — and tilt to control a virtual joystick, mouse, or keyboard/gamepad buttons. No drivers, no proprietary hardware.
Built on the excellent HID Remapper by jfedor, with custom gyroscope support for the Seeed XIAO BLE Sense.
A collaboration between PlayAbility Adaptive Software and HitClic.
💡 Don't want to build it yourself?Buy a ready-made MoveStick from HitClic
| Attach to... | Control with... | Use case |
|---|---|---|
| Hand (velcro strap) | Hand tilt | Joystick replacement |
| Cap / Headband | Head movement | Hands-free aiming/steering |
| Balance board | Feet tilt | Racing games, fitness |
| Wheelchair joystick | Existing movements | Smartphone/PC control |
| Any surface | Your imagination | Adaptive gaming setups |
- 🎮 Virtual joystick — map Roll/Pitch to any gamepad stick
- 🖱️ Motion mouse — tilt to move cursor, tap/shake to click
- ⌨️ Keyboard/buttons — trigger A/B/X/Y, space, WASD from tilt angles
- 🔗 Bluetooth hub — connect multiple BT devices and merge into one controller
- ♿ Adaptive ready — works with Xbox Adaptive Controller, Hori Flex, PS Access
| Resource | Link |
|---|---|
| Firmware (.uf2) | Download latest release |
| Web Configuration | playabilitytech.github.io/MoveStick |
| Buy ready-made | HitClic Shop |
Works on Windows, macOS, and Linux — enumerates as standard USB HID.
Build your own MoveStick for under $25:
| Part | Price | Link |
|---|---|---|
| Seeed XIAO BLE Sense (nRF52840 + IMU) | ~$15-20 | Seeed Studio / Gotronic |
| USB-C cable | ~$5 | Any USB-C data cable |
Optional accessories:
- Balance board → Amazon
- Velcro strap (for hand/cap mounting)
- 3D printed case → see
/enclosurefolder
The procedure to update the firmware is similar on all variants. When you go to the configuration website and try to connect to your device when it doesn't have the latest firmware, you will get a message and a link to a version of the configuration interface that is compatible with your current (old) firmware. Click that link, connect to your HID Remapper by clicking "Open device" as usual, then go to the "Actions" tab and click "Flash firmware". This will put your device in firmware flashing mode. A drive should appear on your computer. For all the RP2040-based variants, the drive will be named "RPI-RP2". For the Bluetooth variants, it will be called something else, depending on what board you're using. Download the correct firmware file for your variant (see table below) and copy it to that drive. On custom boards v1, v2, v5, v6 and v7 (dual RP2040 boards), after flashing the firmware you have to disconnect and reconnect your HID Remapper. That's it, you can go back to the regular version of the configuration interface and carry on.
(Please note that previously a manual "Flash B side" step was required on custom boards v1, v2, v5, v6 and v7. That is no longer necessary.)
- Enter bootloader mode
- Hold BOOT + tap RESET (or double-tap RESET quickly)
- A USB drive named
XIAO-SENSEappears
| variant | firmware file(s) | notes |
|---|---|---|
| single Pico | remapper.uf2 | |
| dual Pico | remapper_dual_a.uf2 remapper_dual_b.uf2 | each Pico needs to be flashed separately |
| Feather RP2040 with USB Host | remapper_feather.uf2 | |
| custom board v1 | remapper_board.uf2 | disconnect and reconnect after flashing |
| custom board v2 | remapper_board.uf2 | disconnect and reconnect after flashing |
| custom board v3 | remapper_feather.uf2 | |
| custom board v4 | remapper_feather.uf2 | |
| custom board v5 | remapper_board.uf2 | disconnect and reconnect after flashing |
| custom board v6 | remapper_board.uf2 | disconnect and reconnect after flashing |
| custom board v7 | remapper_board_v7.uf2 | disconnect and reconnect after flashing |
| custom board v8 | remapper_board_v8.uf2 | |
| Feather nRF52840 Express | remapper_adafruit_feather_nrf52840.uf2 | |
| Xiao nRF52840 | remapper_seeed_xiao_nrf52840.uf2 | |
| Xiao nRF52840 Sense | remapper_seeed_xiao_nrf52840_sense.uf2 | |
| serial | remapper_serial.uf2 |
For boards not listed above, use the same file name you used when flashing it for the first time.
- Done! The board reboots as a USB HID device
💡 If the drive doesn't appear, try a different USB cable (must support data, not charge-only)
Open the Web Config Tool: playabilitytech.github.io/MoveStick
- Connect your MoveStick via USB
- Click "Open Device" in the web tool
- Go to Settings → IMU support → ON
- Load an example profile or create your own mapping
| Setting | What it does |
|---|---|
| Angle limit | Max tilt angle before output saturates |
| Buffer size | Smoothing (higher = smoother but more latency) |
| Axis inversion | Flip X/Y directions |
| Shake threshold | Sensitivity for tap/shake detection |
Map motion axes to any output:
- Roll (X) → mouse X, left stick X, arrow keys...
- Pitch (Y) → mouse Y, left stick Y, WASD...
- Shake → click, button A, space, etc.
Roll → Cursor X
Pitch → Cursor Y Shake → Left click
Roll → Left stick X
Pitch → Left stick Y
Shake → Button A
Roll → Left stick X (steering)
Load these from Examples in the web config tool.
MoveStick can also act as a Bluetooth hub, connecting multiple devices wirelessly and merging all inputs into one controller.
Supported devices:
- DualSense / Xbox controllers
- Xbox Adaptive Controller
- PS Access controller
- Bluetooth keyboards/mice
- BLE wheelchair joysticks
See BLUETOOTH.md for setup instructions.
- HID Remapper by jfedor — the foundation this project builds on
- PlayAbility — gyroscope/IMU features and integration
- HitClic — hardware design and distribution
MIT License — see LICENSE
- PlayAbility Adaptive Software — Face/voice/head control for gaming
- HitClic Handigamer — Adaptive gaming hardware
- Xbox Adaptive Controller — Microsoft's adaptive gaming platform
Questions? Open an issue or reach out on Discord