# How input works

<!--{"order": 900, "parent": "input"}-->

**One interface, many devices.** Every source (keyboard and mouse, a hardware
pad, touch, VR controllers, an AI) produces the same `ControlInput`, and every
drivable thing consumes it. These pages are the layers: the interface, the
virtual gamepad that sources fill in, and one page per device.

<!-- toc -->
- [control-input](/control-input/)
- [b3d-controllable](/b3d-controllable/)
- [virtual-gamepad](/virtual-gamepad/)
- [keyboard-gamepad](/keyboard-gamepad/)
- [hardware-gamepad](/hardware-gamepad/)
- [xr-gamepad](/xr-gamepad/)
- [touch-gamepad](/touch-gamepad/)
- [gamepad-svg](/gamepad-svg/)
- [text-entry](/text-entry/)
<!-- /toc -->
