InputGlass is a portable Windows diagnostics dashboard for keyboard, mouse, and XInput controllers. It turns every control into visible, timestamped telemetry so you can inspect what Windows actually receives from physical devices, virtual gamepads, remappers, remote sessions, and compatibility layers.
No installer, administrator rights, network access, DirectX SDK, SDL, .NET, or background service is required. Run one executable and start testing.
- Keyboard: live state for a full ANSI keyboard, separate left/right modifiers, Numpad Enter, press/release/repeat counters, and hold duration.
- Mouse: five buttons, vertical and horizontal wheel input, client coordinates, raw relative or absolute movement, last delta, and accumulated delta.
- Controllers: four XInput slots with every digital button, both triggers, both sticks, packet numbers, connection state, and the number of fields changed in each observed sample.
- Timeline: a color-coded 512-event live view backed by complete CSV and readable text logs.
- Fallback visibility: Raw Input drives the dashboard while corresponding Win32 messages remain visible for comparison. If Raw Input registration fails, Win32 messages take over.
- validating virtual gamepad mappings and multi-button chords;
- diagnosing stuck keys, missing releases, repeats, dead zones, and trigger ranges;
- comparing Raw Input with regular Win32 keyboard and mouse messages;
- testing remappers, streaming clients, virtual machines, Wine, or Winlator setups;
- attaching precise event traces to input-related bug reports.
Download InputGlass-windows-x64.zip from the
latest release, extract it, and run
InputGlass.exe.
Windows may show a SmartScreen warning because community builds are not code-signed. The executable is produced directly by the public GitHub Actions workflow; every release includes a SHA-256 checksum.
- Launch
InputGlass.exeand keep the window focused while testing keyboard or mouse input. - Connect up to four XInput-compatible controllers.
- Exercise one control or combination at a time and watch the dashboard and event timeline.
- Select Clear to reset per-control counters and the timeline without interrupting the current
session log; a new
CLEARmarker remains visible. - Select Open session folder to inspect or share the CSV and text traces.
The header should report FOCUS YES, RAW YES, a loaded XInput DLL, and LOGGING ON. XInput is
resolved from the Windows system directory and sampled every 16 ms. The displayed fields changed
value describes differences from the previous observed sample; it is not a guarantee that the
device changed those fields atomically.
InputGlass creates a unique pair of files for every run:
%LOCALAPPDATA%\InputGlass\logs\InputGlass-session-YYYYMMDD-HHMMSS-PID.csv
%LOCALAPPDATA%\InputGlass\logs\InputGlass-session-YYYYMMDD-HHMMSS-PID.txt
If that directory is unavailable, InputGlass falls back to the executable directory. Records are buffered and flushed at most every 250 ms, limiting measurement interference while keeping recent events durable. A normal shutdown always performs a final flush.
CSV columns are:
timestamp_ms,source,action,code,name,value
Input logs can reveal typed keys and control sequences. Review them before sharing. InputGlass has no network code or telemetry and never uploads a session.
Install CMake and the x86-64 MinGW-w64 toolchain. On Debian or Ubuntu:
sudo apt install cmake gcc-mingw-w64-x86-64 binutils-mingw-w64-x86-64
./build.shThe executable is written to build/bin/InputGlass.exe. Compatible tools can be selected through
CC and RC:
CC=x86_64-w64-mingw32-gcc RC=x86_64-w64-mingw32-windres ./build.shFrom a Visual Studio developer shell:
cmake -S . -B build
cmake --build build --config ReleaseThe project treats compiler warnings as errors in both local and CI builds.
InputGlass is deliberately small: one native C11 application, Win32/GDI rendering, Raw Input, and dynamically loaded XInput. The release binary has no third-party runtime dependencies. XInput DLLs are loaded only from the Windows system directory to avoid unsafe DLL search behavior.
The application targets Windows 7 and newer. Per-monitor DPI behavior is enabled where supported. Wine and Winlator can work well, but their Raw Input and XInput behavior varies by version and host configuration.
- The visual keyboard follows a common ANSI-US layout; uncommon, media, and some ISO keys may appear only in the event timeline.
- XInput polling is timer-driven and intended for diagnostics, not latency benchmarking.
- Runtime input behavior cannot be fully validated by the cross-compilation CI job; physical and virtual device checks still require a Windows-compatible environment.
- InputGlass currently ships an x86-64 build.
Issues and focused pull requests are welcome. Read CONTRIBUTING.md before making a change. For security-sensitive reports, follow SECURITY.md.
InputGlass is available under the MIT License.