USB Device Info Viewer: Inspect VID, PID, and WebUSB Details in the Browser
Learn how the USB Device Info Viewer uses the WebUSB API to show vendor IDs, product IDs, and device class data locally in Chrome, Edge, or Opera.
Table of Contents
USB peripherals look identical until you need the numbers behind them: vendor ID, product ID, manufacturer string, and device class. The USB Device Info Viewer is a browser-side inspector that uses the WebUSB API so you can request a device, read those identifiers, and keep the session on your machine.
You do not install a desktop device manager or grant a random website a filesystem. The page asks the browser for USB access, you pick a device from the chooser, and descriptors stay in the tab. That is useful when you are wiring firmware, writing a HID report parser, or confirming that a clone dongle is not the chip you ordered.
WebUSB is still an experimental platform API. It works in Chromium-based browsers over HTTPS, it requires a user gesture, and many everyday gadgets never appear in the picker because the OS or the vendor blocks them. This guide explains what the viewer can show, why those hex IDs matter, and how to use the tool without treating it as a replacement for lsusb on every machine.
Why Use USB Device Info Viewer?
- VID and PID without a terminal. Vendor ID and product ID are the two 16-bit values USB hosts use to load drivers. Seeing them as hex in a card is faster than hunting Device Manager on Windows or system_profiler on macOS.
- Permission-based access. The browser chooser is the gate. Nothing is enumerated in the background. You decide which device the page may open.
- Local processing. Descriptor fields never need a server hop. That matters when serial numbers or manufacturer strings appear on lab hardware.
- Same tab as your firmware docs. Keep the viewer next to a datasheet or Arduino sketch instead of switching to a heavy USB analyzer for a one-line ID check.
- Honest browser limits. The tool surfaces Chromium, HTTPS, and WebUSB support up front so you are not debugging a Safari tab that will never see navigator.usb.
- Hardware category companion. Pair it with other local inspectors when you are validating a whole desk: camera, gamepad, NFC, not only USB.
Key Features
| Feature | What you get |
|---|---|
| WebUSB support check | Detects navigator.usb before you try to scan |
| Device information card | Vendor ID, product ID, manufacturer, product name |
| Extra descriptors | Serial, device class, subclass, protocol, USB version when the device exposes them |
| Configurations and interfaces | High-level topology for composite devices |
| Vendor lookup context | Hex IDs you can match against usb.org or linux-usb.org tables |
| Privacy | Client-side only; no upload of device lists |
- Enumerate after consent. The scan path is requestDevice plus the user-selected USBDevice object, not a silent dump of every hub port.
- Experimental badge. Consumer keyboards, mice, and some mass-storage sticks are often filtered. Treat a missing device as a platform rule, not a broken cable, until you confirm WebUSB eligibility.
- HTTPS or localhost. Mixed-content HTTP pages cannot open the USB stack in modern Chrome.
How to Use
- Open the USB Device Info Viewer in Chrome, Edge, or Opera on a secure origin.
- Confirm the page reports WebUSB support. If you see the unsupported panel, switch browser or use HTTPS; Firefox and Safari do not implement WebUSB.
- Plug in the device you care about. Prefer a development board, USB-CDC adapter, or gadget whose vendor documents WebUSB. Avoid expecting the OS-owned boot keyboard to appear.
- Click the request/scan control and pick the device in the browser chooser. Granting access is per origin and can be revoked in site settings.
- Read the card: vendor ID and product ID in hex, manufacturer and product strings, then class/protocol fields if present. Copy the pair into firmware BOARD_VID/BOARD_PID defines or a udev rule.
If permission is denied, the chooser was cancelled or the origin is blocked. Retry from a user click; WebUSB will not reopen from a timer.
Understanding WebUSB, VID, and Device Class
USB identity is a pair of 16-bit integers. Vendor ID (VID) is assigned (or borrowed) by a company. Product ID (PID) distinguishes SKUs under that vendor. Together they look like 2341:8036 for an Arduino Leonardo-class board. The viewer prints them in hex because that is how datasheets, lsusb, and Windows hardware IDs spell them.
Device class is a third axis. Class 03 is HID, 08 is mass storage, 02 is CDC (virtual serial), 09 is hub, E0 is wireless controller, and FF is vendor-specific. A composite device exposes several interfaces, each with its own class. Firmware people care because a board that enumerates as CDC is a serial port; the same silicon as HID is a keyboard; as FF it needs a custom driver or WebUSB claims.
WebUSB sits above that descriptor tree. The site calls navigator.usb.requestDevice({ filters }) optionally with vendorId/productId filters, then reads device.vendorId, device.productId, device.manufacturerName, device.productName, device.serialNumber, and configuration lists. Opening an interface for bulk transfers is a separate, more privileged step. This viewer is the identification layer: names and numbers, not a full packet sniffer.
Security is why the chooser exists. A random page cannot claim your YubiKey, disk, or webcam USB endpoint without a click. Chromium also blocks many HID and mass-storage devices from WebUSB so a website cannot impersonate a keyboard or read a thumb drive. If your Arduino shows up and your Logitech mouse does not, that is intentional.
Compare WebUSB with WebHID and Web Serial. HID is better for gamepads and custom report descriptors. Serial is better for USB-CDC adapters that already look like /dev/tty. WebUSB is the generic USBDevice object when you need VID/PID and configurations that those higher-level APIs hide.
Practical Use Cases
Firmware and bootloader IDs
You flashed a Pro Micro clone and the IDE still waits on the wrong COM port. Open the viewer, request the board in bootloader versus application mode, and note both VID/PID pairs. Bootloaders often use a different PID than the sketch. Put both in your platformio.ini upload_flags or Arduino boards.txt so reset-to-bootloader matches reality.
Incoming hardware QA
A box of “FT232” cables arrives from a marketplace. Request each adapter and compare VID 0403 (FTDI) versus a counterfeit using a different vendor. Manufacturer strings that say “FTDI” while the VID is not 0403 are a red flag before you install a driver on a production laptop.
Teaching USB without root
In a classroom, students cannot run lsusb as root on locked-down PCs. A Chromebook or a locked Windows image still has Chrome. The viewer demonstrates VID, PID, and class on a sanctioned development dongle without installing USBView.exe.
Debugging “device not found” in web apps
If you ship a WebUSB product page, reproduce the customer machine: same browser, HTTPS, and chooser. The viewer confirms whether navigator.usb exists and whether the device is selectable at all. If the chooser is empty, your landing-page JavaScript is not the first bug to fix.
Best Practices
- Use Chrome, Edge, or Opera on HTTPS. Do not spend time on Firefox or Safari for this API.
- Expect filters. Document which VID/PID your app requests so users do not hunt for a mouse that WebUSB will never list.
- Treat serial numbers as secrets. They can fingerprint a unique board. Keep the tab local; do not paste them into public tickets.
- Revoke access when done. Browser site settings hold USB permissions. Clear them on shared lab machines.
- Cross-check with the OS when IDs look impossible. A 0000:0000 pair or empty strings often means the device rejected string descriptors, not that the viewer invented zeros.
- Do not confuse this with a protocol analyzer. For packet timing and SOF frames, use Wireshark with USBPcap or a hardware sniffer.
Ready to read a real VID/PID pair? Open the USB Device Info Viewer, grant access to a WebUSB-capable board, and copy the hex IDs into your firmware or udev rule.
Related Tools You Might Like:
Happy inspecting.