libvirtualhid


A LizardByte project

libvirtualhid is a cross-platform C++ library for creating virtual input devices. It focuses on gamepad support for remote streaming hosts, while keeping the public API portable and hiding platform-specific virtual HID details behind backend implementations.

Features

Platform-neutral C++ API

Build against portable runtime, profile, device, and report concepts while backend-specific HID details stay behind the library implementation.

Gamepad-first profiles

Create virtual gamepads that model generic HID, Xbox, DualShock, DualSense, and Nintendo Switch Pro-style controller layouts.

Remote streaming ready

Designed for low-latency streaming hosts that need predictable lifecycle, normalized input state, and output feedback callbacks.

Windows
User-mode Windows support

Windows gamepads are exposed through a user-mode UMDF2 control driver backed by Virtual HID Framework, without requiring a custom kernel-mode driver.

Linux
Linux HID backends

Linux gamepads use descriptor-driven uhid devices, with uinput available for keyboard, mouse, touchscreen, trackpad, and pen tablet devices.

CMake friendly

Consume libvirtualhid through installed packages, vendored source, add_subdirectory, or FetchContent in CMake-based projects.

Documentation

Read the documentation to learn how to build, use, and integrate libvirtualhid.

Source

Browse the library source, public headers, and streaming-host-oriented examples.

Support Center

Find answers and ask questions.

The one who knows all the answers has not been asked all the questions. – Confucius.