An open API service indexing awesome lists of open source software.

https://github.com/jasperdevs/skate-kbm

Keyboard and mouse to virtual Xbox controller mapper for skate.
https://github.com/jasperdevs/skate-kbm

bun keyboard-mouse opentui skate virtual-controller windows xbox-controller

Last synced: about 12 hours ago
JSON representation

Keyboard and mouse to virtual Xbox controller mapper for skate.

Awesome Lists containing this project

README

          

🛹 skate-kbm

Keyboard and mouse to virtual Xbox 360 controller mapper for Windows games.

This is a plain terminal CLI. It does not use a full-screen TUI or any non-Node JavaScript runtime.

## Install

Install globally with npm:

```powershell
npm install -g skate-kbm
skate-kbm
```

Install adds the `skate-kbm` command and the native mapper binary.

Requirements:

- Windows 10 or 11
- [Node.js](https://nodejs.org/) 20 or newer
- [ViGEmBus](https://github.com/nefarius/ViGEmBus/releases) driver

Windows needs a signed virtual controller driver before games can see a fake Xbox controller. If the app says it cannot connect, install the driver from the source repo with `npm run driver`, or install ViGEmBus manually from its release page.

## Use

```powershell
skate-kbm
```

Keep the terminal open, then launch your game. Press `Ctrl+Alt+M` to toggle cursor lock if the game needs it. Press `Ctrl+C` in the terminal or `Ctrl+Alt+Backspace` anywhere to stop the mapper.

The command prints normal terminal output only. It should not switch screens, clear your terminal, or close the terminal window.

To change mouse sensitivity:

```powershell
skate-kbm --mouse-sensitivity 300
```

By default, the mapper uses Windows Raw Input for mouse movement and leaves the visible cursor alone. Cursor lock is an explicit toggle, not tied to mouse buttons.

Cursor lock modes:

```powershell
skate-kbm --cursor-lock toggle
skate-kbm --cursor-lock always
skate-kbm --cursor-lock off
```

If raw input is unavailable, it falls back to cursor capture. To test without hiding or recentering the cursor:

```powershell
skate-kbm --no-mouse-capture
```

To print live input diagnostics:

```powershell
skate-kbm --debug
```

## Build from source

Developer setup

Developers also need [Rust](https://www.rust-lang.org/tools/install) to rebuild the native Windows mapper.

```powershell
npm install
npm run build
npm run driver
npm start
```

`npm run build` compiles the Rust mapper and copies it to `dist/app/mapper/skate-kbm-mapper.exe`, which is the binary shipped in the npm package.

## Controls

| Input | Controller output |
| --- | --- |
| `WASD` | Left stick |
| Mouse | Right stick |
| `Shift` or `Space` | `A` |
| `C` | `B` |
| `E` | `X` |
| `R` | `Y` |
| `Q` | Left bumper |
| `F` | Right bumper |
| `V` | Right stick click |
| Left click | Right trigger |
| Right click | Left trigger |
| Arrow keys | D-pad |
| `Tab` | Back |
| `Enter` | Start |

Notes

- The npm package has no JavaScript runtime dependencies.
- The app uses a plain Node.js CLI wrapper and a Rust Windows mapper process for keyboard, mouse, and virtual controller output.
- The game still sees a controller, not native keyboard and mouse.
- ViGEmBus is required because Windows needs a driver to expose the virtual Xbox controller.
- ViGEmBus is archived, so it is treated as the current compatibility backend rather than a forever dependency.

## License

MIT