docs(gh-pages): add Virtual HID Driver product page (#62)

This commit is contained in:
Dave Lane authored and GitHub committed 2026-08-10 10:51:27 -04:00
1 parent cd7d4f9016
commit af2836a64c
6 files changed
+243 -44

No files matched your search

+1
View File
@@ -40,6 +40,7 @@ jobs:
GH_BOT_EMAIL: ${{ secrets.GH_BOT_EMAIL }}
GH_BOT_TOKEN: ${{ secrets.GH_BOT_TOKEN }}
with:
base_url: '_auto'
clean_gh_pages: true
gh_bot_name: ${{ vars.GH_BOT_NAME }}
site_artifact: 'prep'
+23 -23
View File
@@ -112,29 +112,29 @@ same API where the backend exposes them.
Alternatives exist if `libvirtualhid` does not meet your needs.
| Feature | `libvirtualhid` | [ViGEmBus](https://github.com/nefarius/ViGEmBus) | [HIDMaestro](https://github.com/hifihedgehog/HIDMaestro) | [inputtino](https://github.com/games-on-whales/inputtino) | [WinUHid](https://github.com/cgutman/WinUHid) |
|-----------------------------------|--------------------------------------------------|--------------------------------------------------|----------------------------------------------------------|-----------------------------------------------------------|--------------------------------------------------|
| Windows support | ✅ | ✅ | ✅ | ❌ | ✅ |
| Linux support | ✅ | ❌ | ❌ | ✅ | ❌ |
| Windows AMD64 support | ✅ | ✅ | ✅ | - | ✅ |
| Windows ARM64 support | ❌<sup><a href="#alternatives-note-5">5</a></sup> | ✅ | ❌<sup><a href="#alternatives-note-6">6</a></sup> | - | ✅ |
| Windows user-mode driver | ✅ | ❌ | ✅ | - | ✅ |
| No Windows kernel-mode driver | ✅ | ❌ | ✅ | - | ✅ |
| Descriptor-defined HID devices | ✅ | ❌ | ✅ | ✅<sup><a href="#alternatives-note-1">1</a></sup> | ✅ |
| Platform-neutral C++ API | ✅ | ❌<sup><a href="#alternatives-note-2">2</a></sup> | ❌<sup><a href="#alternatives-note-2">2</a></sup> | ❌<sup><a href="#alternatives-note-3">3</a></sup> | ❌<sup><a href="#alternatives-note-2">2</a></sup> |
| Keyboard | ✅ | ❌ | ❌ | ✅ | ✅<sup><a href="#alternatives-note-4">4</a></sup> |
| Mouse | ✅ | ❌ | ❌ | ✅ | ✅<sup><a href="#alternatives-note-4">4</a></sup> |
| Touchscreen, trackpad, or pen | ✅ | ❌ | ❌ | ✅ | ✅<sup><a href="#alternatives-note-4">4</a></sup> |
| Generic HID gamepad | ✅ | ❌ | ✅ | ❌ | ✅<sup><a href="#alternatives-note-4">4</a></sup> |
| Xbox 360 gamepad | ✅ | ✅ | ✅ | ❌ | ✅<sup><a href="#alternatives-note-4">4</a></sup> |
| Xbox One gamepad | ✅ | ❌ | ✅ | ✅ | ✅<sup><a href="#alternatives-note-4">4</a></sup> |
| Xbox Series gamepad | ✅ | ❌ | ✅ | ❌ | ✅<sup><a href="#alternatives-note-4">4</a></sup> |
| DualShock 4 gamepad | ✅ | ✅ | ✅ | ❌ | ✅<sup><a href="#alternatives-note-4">4</a></sup> |
| DualSense gamepad | ✅ | ❌ | ✅ | ✅ | ✅<sup><a href="#alternatives-note-4">4</a></sup> |
| Nintendo Switch Pro-style gamepad | ✅ | ❌ | ✅ | ✅ | ✅<sup><a href="#alternatives-note-4">4</a></sup> |
| Rumble or output callbacks | ✅ | ❌ | ✅ | ✅ | ✅<sup><a href="#alternatives-note-4">4</a></sup> |
| Data-driven profiles | ❌ | ❌ | ✅ | ❌ | ❌ |
| Actively developed | ✅ | ❌ | ✅ | ✅ | ✅ |
| Feature | `libvirtualhid` | [ViGEmBus](https://github.com/nefarius/ViGEmBus) | [HIDMaestro](https://github.com/hifihedgehog/HIDMaestro) | [inputtino](https://github.com/games-on-whales/inputtino) | [WinUHid](https://github.com/cgutman/WinUHid) |
|-----------------------------------|---------------------------------------------------|---------------------------------------------------|----------------------------------------------------------|-----------------------------------------------------------|---------------------------------------------------|
| Windows support | ✅ | ✅ | ✅ | ❌ | ✅ |
| Linux support | ✅ | ❌ | ❌ | ✅ | ❌ |
| Windows AMD64 support | ✅ | ✅ | ✅ | - | ✅ |
| Windows ARM64 support | ❌<sup><a href="#alternatives-note-5">5</a></sup> | ✅ | ❌<sup><a href="#alternatives-note-6">6</a></sup> | - | ✅ |
| Windows user-mode driver | ✅ | ❌ | ✅ | - | ✅ |
| No Windows kernel-mode driver | ✅ | ❌ | ✅ | - | ✅ |
| Descriptor-defined HID devices | ✅ | ❌ | ✅ | ✅<sup><a href="#alternatives-note-1">1</a></sup> | ✅ |
| Platform-neutral C++ API | ✅ | ❌<sup><a href="#alternatives-note-2">2</a></sup> | ❌<sup><a href="#alternatives-note-2">2</a></sup> | ❌<sup><a href="#alternatives-note-3">3</a></sup> | ❌<sup><a href="#alternatives-note-2">2</a></sup> |
| Keyboard | ✅ | ❌ | ❌ | ✅ | ✅<sup><a href="#alternatives-note-4">4</a></sup> |
| Mouse | ✅ | ❌ | ❌ | ✅ | ✅<sup><a href="#alternatives-note-4">4</a></sup> |
| Touchscreen, trackpad, or pen | ✅ | ❌ | ❌ | ✅ | ✅<sup><a href="#alternatives-note-4">4</a></sup> |
| Generic HID gamepad | ✅ | ❌ | ✅ | ❌ | ✅<sup><a href="#alternatives-note-4">4</a></sup> |
| Xbox 360 gamepad | ✅ | ✅ | ✅ | ❌ | ✅<sup><a href="#alternatives-note-4">4</a></sup> |
| Xbox One gamepad | ✅ | ❌ | ✅ | ✅ | ✅<sup><a href="#alternatives-note-4">4</a></sup> |
| Xbox Series gamepad | ✅ | ❌ | ✅ | ❌ | ✅<sup><a href="#alternatives-note-4">4</a></sup> |
| DualShock 4 gamepad | ✅ | ✅ | ✅ | ❌ | ✅<sup><a href="#alternatives-note-4">4</a></sup> |
| DualSense gamepad | ✅ | ❌ | ✅ | ✅ | ✅<sup><a href="#alternatives-note-4">4</a></sup> |
| Nintendo Switch Pro-style gamepad | ✅ | ❌ | ✅ | ✅ | ✅<sup><a href="#alternatives-note-4">4</a></sup> |
| Rumble or output callbacks | ✅ | ❌ | ✅ | ✅ | ✅<sup><a href="#alternatives-note-4">4</a></sup> |
| Data-driven profiles | ❌ | ❌ | ✅ | ❌ | ❌ |
| Actively developed | ✅ | ❌ | ✅ | ✅ | ✅ |
<a id="alternatives-note-1"></a><sup>1</sup> inputtino uses `uhid` for
virtual joypads; its other listed device types use Linux input interfaces rather
@@ -0,0 +1,38 @@
---
- title: "User-mode by design"
icon_img: "https://cdn.jsdelivr.net/npm/bootstrap-icons@1.13.1/icons/windows.svg"
icon_img_alt: "Windows"
icon_img_invert: true
description: >
Uses a UMDF2 control driver backed by Windows Virtual HID Framework, with no
custom kernel-mode driver added by libvirtualhid.
- title: "Standard HID gamepads"
icon_fa: "fas fa-gamepad"
description: >
Publishes virtual HID devices for compatible DirectInput, SDL/HIDAPI,
Windows Gaming Input, GameInput, and browser Gamepad API consumers.
- title: "Process-owned lifecycle"
icon_fa: "fas fa-link"
description: >
Associates each virtual gamepad with the client that created it so Windows
can clean up the device if that process exits or crashes.
- title: "Built-in diagnostic UI"
icon_fa: "fas fa-sliders"
description: >
Includes a native tool for creating, controlling, and monitoring gamepads,
device nodes, battery state, and output feedback.
- title: "Multiple controller profiles"
icon_fa: "fas fa-layer-group"
description: >
Supports Generic, Xbox One, Xbox Series, DualShock 4, DualSense, and Nintendo
Switch Pro-style virtual controller profiles.
- title: "Output feedback"
icon_fa: "fas fa-wave-square"
description: >
Normalizes supported rumble, RGB LED, adaptive trigger, and raw output
events for the application that owns the virtual gamepad.
@@ -0,0 +1,21 @@
{% for feature in include.features %}
<div class="col-md-6 col-lg-4 mb-5">
<div class="card-custom h-100 shadow border-0 rounded-0">
<div class="card-body p-4">
<div class="d-flex align-items-center">
<div class="icon">
{% if feature.icon_fa %}
<i class="fa-fw fa-2x {{ feature.icon_fa }}"></i>
{% elsif feature.icon_img %}
<img {% if feature.icon_img_invert %}class="invert"{% endif %} src="{{ feature.icon_img }}" alt="{{ feature.icon_img_alt | default: feature.title }}"/>
{% endif %}
</div>
<div class="ms-3">
<h5 class="fw-bolder mb-0">{{ feature.title }}</h5>
<p class="mb-0">{{ feature.description }}</p>
</div>
</div>
</div>
</div>
</div>
{% endfor %}
+25 -21
View File
@@ -26,27 +26,7 @@ cover-img:
<div class="container px-auto">
<h2 class="text-center fw-bolder my-5">Features</h2>
<div class="row gx-5">
{% for feature in site.data.features %}
<div class="col-md-6 col-lg-4 mb-5">
<div class="card-custom h-100 shadow border-0 rounded-0">
<div class="card-body p-4">
<div class="d-flex align-items-center">
<div class="icon">
{% if feature.icon_fa %}
<i class="fa-fw fa-2x {{ feature.icon_fa }}"></i>
{% elsif feature.icon_img %}
<img {% if feature.icon_img_invert %}class="invert"{% endif %} src="{{ feature.icon_img }}" alt="{{ feature.icon_img_alt | default: feature.title }}"/>
{% endif %}
</div>
<div class="ms-3">
<h5 class="fw-bolder mb-0">{{ feature.title }}</h5>
<p class="mb-0">{{ feature.description }}</p>
</div>
</div>
</div>
</div>
</div>
{% endfor %}
{% include feature-cards.html features=site.data.features %}
</div>
</div>
</section>
@@ -54,6 +34,30 @@ cover-img:
<!-- More cards -->
<div class="container py-5 px-auto">
<div class="container col-md-10">
<!-- Windows driver section -->
<section class="py-4" id="WindowsDriver">
<div class="card-custom shadow border-0 rounded-0">
<div class="card-body p-4">
<div class="d-flex align-items-center">
<i class="fa-fw fa-2x fas fa-gamepad"></i>
<div class="ms-3">
<h2 class="fw-bolder mb-0">Virtual HID Driver</h2>
<p class="mb-0">
Explore the separate Windows driver package for compatible applications that create
virtual HID gamepads.
</p>
</div>
</div>
</div>
<div class="card-footer p-3 px-4">
<a class="btn btn-outline-theme me-3 mb-3" href="{{ '/virtual-hid-driver' | relative_url }}">
<img class="icon-sm invert" src="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.13.1/icons/windows.svg" alt="Windows"/>
Driver overview
</a>
</div>
</div>
</section>
<!-- Docs section -->
<section class="py-4" id="Docs">
<div class="card-custom shadow border-0 rounded-0">
+135
View File
@@ -0,0 +1,135 @@
---
title: Virtual HID Driver
subtitle: User-mode virtual gamepads for Windows
layout: page
full-width: true
after-content:
- donate.html
- support.html
cover-img:
- /libvirtualhid/assets/img/banners/libvirtualhid.jpeg
---
<!-- About section -->
<section class="py-5" id="About">
<div class="container px-auto">
<p class="lead text-center mx-auto mt-0 mb-4">
Virtual HID Driver is the Windows gamepad backend for libvirtualhid. It installs the user-mode driver
component that compatible applications use to create virtual HID gamepads discoverable by Windows apps.
The driver package is separate from the portable C++ library and is currently packaged for AMD64 systems.
</p>
<div class="text-center">
<a class="btn btn-outline-theme me-3 mb-3" href="https://github.com/LizardByte/libvirtualhid/releases" target="_blank" rel="noopener">
<img class="icon-sm invert" src="https://cdn.jsdelivr.net/npm/simple-icons@16/icons/github.svg" alt="GitHub"/>
View releases
</a>
<a class="btn btn-outline-theme me-3 mb-3" href="https://docs.lizardbyte.dev/projects/libvirtualhid" target="_blank" rel="noopener">
<img class="icon-sm invert" src="https://cdn.jsdelivr.net/npm/simple-icons@16/icons/readthedocs.svg" alt="Read the Docs"/>
Driver documentation
</a>
<a class="btn btn-outline-theme me-3 mb-3" href="/libvirtualhid/">
<i class="fa-fw fa-lg fas fa-arrow-left"></i>
libvirtualhid overview
</a>
</div>
</div>
</section>
<!-- Features section -->
<section class="py-5" id="Features">
<div class="container px-auto">
<h2 class="text-center fw-bolder my-5">Driver features</h2>
<div class="row gx-5">
{% include feature-cards.html features=site.data.driver_features %}
</div>
</div>
</section>
<!-- Product details -->
<div class="container py-5 px-auto">
<div class="container col-md-10">
<section class="py-4" id="Applications">
<div class="card-custom shadow border-0 rounded-0">
<div class="card-body p-4">
<div class="d-flex align-items-start">
<i class="fa-fw fa-2x fas fa-code mt-1"></i>
<div class="ms-3">
<h2 class="fw-bolder mb-2">For compatible applications</h2>
<p>
Applications create and update gamepads through libvirtualhid's platform-neutral C++
API. The Windows backend communicates with the installed driver, while platform-specific
HID details stay out of consumer code. The library and driver must use matching control
protocol versions.
</p>
<p class="mb-0">
The installed package also includes the <code>virtualhid_control</code> diagnostic UI
and the <code>gamepad_adapter</code> example for local validation.
</p>
</div>
</div>
</div>
<div class="card-footer p-3 px-4">
<a class="btn btn-outline-theme me-3 mb-3" href="https://github.com/LizardByte/libvirtualhid/tree/master/examples" target="_blank" rel="noopener">
<i class="fa-fw fa-lg fas fa-puzzle-piece"></i>
Integration examples
</a>
<a class="btn btn-outline-theme me-3 mb-3" href="https://github.com/LizardByte/libvirtualhid" target="_blank" rel="noopener">
<img class="icon-sm invert" src="https://cdn.jsdelivr.net/npm/simple-icons@16/icons/github.svg" alt="GitHub"/>
Browse source
</a>
</div>
</div>
</section>
<section class="py-4" id="Compatibility">
<div class="card-custom shadow border-0 rounded-0">
<div class="card-body p-4">
<div class="d-flex align-items-start">
<i class="fa-fw fa-2x fas fa-circle-info mt-1"></i>
<div class="ms-3">
<h2 class="fw-bolder mb-2">Compatibility notes</h2>
<ul class="mb-0">
<li>
The driver is for virtual gamepads. libvirtualhid's Windows keyboard and mouse
support does not require this package.
</li>
<li>
Xbox 360 is not available through this UMDF/VHF backend because a real Xbox 360
controller uses XUSB rather than standard HID.
</li>
<li>
Xbox-style HID profiles do not guarantee an XInput slot. Applications that require
XInput-specific behavior should review the profile compatibility documentation.
</li>
</ul>
</div>
</div>
</div>
</div>
</section>
<section class="py-4" id="License">
<div class="card-custom shadow border-0 rounded-0">
<div class="card-body p-4">
<div class="d-flex align-items-center">
<i class="fa-fw fa-2x fas fa-file-contract"></i>
<div class="ms-3">
<h2 class="fw-bolder mb-0">License</h2>
<p class="mb-0">
The Windows UMDF driver source and generated driver package artifacts use the
LizardByte Source-Available License 1.0. Packaged helper components may use the MIT
License as documented in the repository license map.
</p>
</div>
</div>
</div>
<div class="card-footer p-3 px-4">
<a class="btn btn-outline-theme me-3 mb-3" href="https://github.com/LizardByte/libvirtualhid/blob/master/LICENSES/README.md" target="_blank" rel="noopener">
<i class="fa-fw fa-lg fas fa-scale-balanced"></i>
View license map
</a>
</div>
</div>
</section>
</div>
</div>