https://github.com/dh1tw/streamdeck
Golang API for the Corsair / Elgato StreamDeck
https://github.com/dh1tw/streamdeck
api buttons golang hardware streamdeck streamdeck-sdk
Last synced: 3 months ago
JSON representation
Golang API for the Corsair / Elgato StreamDeck
- Host: GitHub
- URL: https://github.com/dh1tw/streamdeck
- Owner: dh1tw
- License: mit
- Created: 2018-07-29T17:16:11.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2025-09-18T22:54:58.000Z (7 months ago)
- Last Synced: 2025-09-19T00:40:59.814Z (7 months ago)
- Topics: api, buttons, golang, hardware, streamdeck, streamdeck-sdk
- Language: Go
- Homepage:
- Size: 2.72 MB
- Stars: 81
- Watchers: 2
- Forks: 18
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# streamdeck
[](https://goreportcard.com/report/github.com/dh1tw/streamdeck)
[](https://pkg.go.dev/github.com/dh1tw/streamdeck)
[](https://img.shields.io/badge/license-MIT-blue.svg)


**streamdeck** is a library for interfacing with the [Elgato/Corsair Stream Deck](https://www.elgato.com/en/gaming/stream-deck)
This library is written in the programing language [Go](https://golang.org).
## Note
This project is a golang API for the Elgato/Corsair Stream Deck. This library
unleashes the power of the StreamDeck. It allows you to completely customize
the content of the device, without the need of the OEM's software.
## License
streamdeck is published under the permissive [MIT license](https://github.com/dh1tw/streamdeck/blob/master/LICENSE).
## Dependencies
There are a few go libraries which are needed at compile time. streamdeck
does not have any runtime dependencies.
## CGO
Compiling this library requires unfortunately a C compiler since the underlying [HID library](github.com/karalabe/hid) requires cgo for enumerating the HID devices.
## Supported Operating Systems
The library should work on Linux, MacOS and Windows (>=7).
streamdeck works well on SoC boards like the Raspberry / Orange / Banana Pis.
### Linux Device rules
On Linux you might have to create an udev rule, to access the streamdeck.
````
sudo vim /etc/udev/rules.d/99-streamdeck.rules
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0060", MODE="0664", GROUP="plugdev"
````
After saving the udev rule, unplug and plug the streamdeck again into the USB port.
For the rule above, your user must be a member of the `plugdev` group.
Make sure that your streamdeck is correctly recognized
by executing:
````bash
$ go run examples/enumerate/enumerate.go
Found 1 Elgato Stream Deck(s):
SerialNumber: AL12H1A07123
````
## Documentation
The auto generated documentation can be found at [godoc.org](https://godoc.org/github.com/dh1tw/streamdeck)
## Examples
Please checkout the dedicated repository [streamdeck-examples](https://github.com/dh1tw/streamdeck-examples) for examples.
My personal library of streamdeck elements / buttons can be found in the [streamdeck-buttons](https://github.com/dh1tw/streamdeck-buttons) repository.
## Credits
This project would not have been possible without the work of [Alex Van Camp](https://github.com/alvancamp). In particular his
[notes of the StreamDeck's protocol](https://github.com/alvancamp/node-elgato-stream-deck/blob/master/NOTES.md)
were very helpful.
Alex has provided a [reference implementation](https://github.com/alvancamp/node-elgato-stream-deck) in Javascript / Node.js.