0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
Configuration
Plug in a USB device and see everything it declares: its Vendor ID and Product ID, the manufacturer, the product, the serial number and the full tree of configurations, interfaces and endpoints with their classes and transfer types. The tool only reads descriptors; it never opens the device nor sends it any data.
Devices offered

How it works

Shows what a USB device declares about itself as soon as it is plugged in. The device descriptor carries the Vendor ID assigned by the USB-IF, the Product ID chosen by the manufacturer, the version of the USB specification it claims to comply with, the version of the product itself and, if the device exposes them, the manufacturer, product and serial number strings.

Below it comes the full tree: every configuration with its interfaces, every interface with its class, subclass and protocol triplet translated into the official USB-IF name, and every endpoint with its address, direction, transfer type and maximum packet size. Interfaces with several alternate settings —common in cameras and audio boards— are listed separately.

The tool only reads descriptors: it never opens a session with the device, never claims an interface and never sends it a single byte, so it does not interfere with the driver that is using it. The whole tree can be exported as JSON to attach it to a report or to compare it with the one from another computer.

Examples

046D:C52B0x00 / 0x00 / 0x00 → 3 × HID (0x03)A wireless keyboard and mouse receiver declares class 0x00 at the device level, so the real type is defined interface by interface: here, three HID interfaces each with one interrupt in endpoint.
0x08 / 0x06 / 0x50Mass Storage · SCSI transparent command set · Bulk-Only TransportThe typical triplet of a flash drive or an external disk: two bulk endpoints, one in and one out, over which the SCSI commands travel.
0x02 / 0x02 / 0x01Communications and CDC Control · Abstract Control Model · AT Commands (ITU-T V.250)This is the virtual serial port of a development board or a modem: a control interface with one interrupt endpoint and a CDC-Data interface with the two bulk endpoints that carry the data.

Use cases

  • Find out the exact Vendor ID and Product ID of a device in order to look for its driver or to write a udev rule on Linux.
  • See the serial number of a flash drive, a reader or an adapter when the operating system does not show it at a glance.
  • Confirm during firmware development that the device publishes the expected interfaces, alternate settings and endpoints, with the right classes.
  • Discover on which endpoint and with which transfer type you have to talk to a device before programming against it.
  • Tell apart two seemingly identical devices by comparing their version, their interfaces and their packet sizes.
  • Document the USB configuration of a computer by exporting the whole tree as JSON.

Frequently asked questions

Why doesn't it work on my iPhone or in Firefox?

The WebUSB API is implemented in Chromium-based browsers —Chrome, Edge and Opera— for Windows, macOS, Linux, ChromeOS and Android. Firefox and Safari do not implement it, and on iOS every browser uses the system engine, so it is not available there either. It also requires HTTPS and that the page is not embedded inside another site.

The device is plugged in but it does not show up in the chooser.

The chosen filter may be too narrow: try the option that offers every device. If it still does not appear, it is likely on the browser's blocklist, which excludes certain products for security reasons —FIDO security keys among them— so that no web page can touch them. On Linux the system permission on the device node may also be missing.

Why does the device say class 0x00?

Class 0x00 in the device descriptor means «look at the interfaces». Almost every composite device uses it, combining different functions over the same cable: a keyboard with a built-in hub, a camera that also exposes a microphone or an all-in-one printer. In those cases the real type of each function is in the class of each interface, not in the class of the device.

What is an endpoint and what does an address like 0x81 mean?

An endpoint is each of the mailboxes through which data enters or leaves an interface. The low seven bits of the address are the endpoint number and the highest bit indicates the direction, so 0x81 is endpoint 1 in —from the device towards the computer— and 0x01 would be endpoint 1 out. The transfer type defines the treatment it gets: bulk for large volumes with no deadline, interrupt for small and frequent events such as a keystroke, and isochronous for audio and video, which would rather lose a packet than arrive late.

Can the tool modify or break anything on the device?

No. It only reads the descriptors the browser already obtained when enumerating the device; it never opens a session, never claims an interface and never writes. That is why you can inspect even a keyboard or a flash drive that the operating system is using at that very moment, although a web page is not allowed to communicate with them.

Why are the manufacturer or the product empty?

Those strings are optional descriptors: many cheap devices simply do not store them, and some operating systems do not hand them over to the browser. For those cases the tool looks the Vendor ID and the Product ID up in the usb.ids catalogue of the Linux USB project, which does record the official name of the manufacturer and, quite often, that of the product.

Does the device data leave my computer?

The descriptors are read in your browser and are not sent to any server. The only exception is the usb.ids catalogue lookup, which queries the Vendor ID and the Product ID —two numbers that identify the model, not your computer nor your unit— and which you can turn off before choosing the device. The serial number is never sent.

What are the alternate settings of an interface?

A single interface can declare several sets of endpoints and keep only one active. Cameras and audio boards use them to offer different combinations of resolution or quality: each alternate setting reserves a different amount of bandwidth on the bus, and the operating system picks the right one when it starts streaming. Alternate setting 0 is the one that stays active while the device is idle.