Idiomatic Go bindings for libusb-1.0
Clone or download
Pull request Compare This branch is 9 commits ahead of codemera:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


The gousb package is an attempt at wrapping the libusb library into a Go-like binding.

Supported platforms include:

  • linux
  • darwin
  • openbsd (no hotplug)

Windows support is unconfirmed, but should work via cgo and libusb-win32.



You must first install libusb-1.0. On Darwin/OS X only brew install libusb is tested.

Example: lsusb

The gousb project provides a simple but useful example: lsusb. This binary will list the USB devices connected to your system and various interesting tidbits about them, their configurations, endpoints, etc. To install it, run the following command:

go get -v


If you installed the lsusb example, both libraries below are already installed.

Installing the primary gousb package is really easy:

go get -v

There is also a usbid package that will not be installed by default by this command, but which provides useful information including the human-readable vendor and product codes for detected hardware. It's not installed by default and not linked into the usb package by default because it adds ~400kb to the resulting binary. If you want both, they can be installed thus:

go get -v{,id}


The documentation can be viewed via local godoc or via Gary Burd's excellent