{"id":18639106,"url":"https://github.com/danielhe4rt/stream-decks-go-api","last_synced_at":"2025-07-21T16:05:25.428Z","repository":{"id":260826640,"uuid":"879082190","full_name":"danielhe4rt/stream-decks-go-api","owner":"danielhe4rt","description":null,"archived":false,"fork":false,"pushed_at":"2024-11-08T21:38:16.000Z","size":15,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-09T17:01:58.360Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/danielhe4rt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-10-26T23:20:45.000Z","updated_at":"2024-11-08T21:38:19.000Z","dependencies_parsed_at":"2024-11-02T21:22:15.841Z","dependency_job_id":"c7c2e9b8-cc10-43e5-8024-a35b79cb480f","html_url":"https://github.com/danielhe4rt/stream-decks-go-api","commit_stats":null,"previous_names":["danielhe4rt/stream-decks-go-api"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/danielhe4rt/stream-decks-go-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielhe4rt%2Fstream-decks-go-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielhe4rt%2Fstream-decks-go-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielhe4rt%2Fstream-decks-go-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielhe4rt%2Fstream-decks-go-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/danielhe4rt","download_url":"https://codeload.github.com/danielhe4rt/stream-decks-go-api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielhe4rt%2Fstream-decks-go-api/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266332463,"owners_count":23912661,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-21T11:47:31.412Z","response_time":64,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-07T05:45:03.571Z","updated_at":"2025-07-21T16:05:25.407Z","avatar_url":"https://github.com/danielhe4rt.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# KaDeck Project\n\nThis is a project to support different types of StreamDeck focused devices to develop plugins for them.\n\n## Supported Devices\n\n- [x] StreamDeck Plus\n- [ ] StreamDeck Mini\n- [ ] StreamDeck XL\n\n## Roadmap\n\n- [ ] Implement StreamDeck Plus\n  - [x] Read inputs:\n    - [x] Buttons\n    - [x] Knobs\n    - [x] Touchscreen\n  - [ ] Write outputs:\n    - [ ] Buttons - Icons, Texts\n    - [ ] Touchscreen - Image\n\n## Architecture\n\nDepending on the device, you will have contracts and modules to implement and use it.\n\nSince I'm using the StreamDeck+ as my first (and only) device, I'm focusing on it first.\n\nUnder the contracts we have:\n\n- `triggers_contract.go`: This contract is responsible for the triggers that the device will have. It's the main\n  contract that will be used to interact with the device.\n- `buttons_contract.go`: This contract is responsible for the buttons that the device will have by parsing and reusing.\n  This will be the most common among StreamDecks.\n- `knobs_contract.go`: This contract is responsible for the knobs that the device will have. This is a specific contract\n  for the StreamDeck+ and other similar devices that have knobs.\n- `display_contract.go`: This contract is responsible for the display that the device will have. This is a specific\n  contract for the StreamDeck+ and other similar devices that have a display.\n\nIf you want to implement a new device, you should follow the steps below:\n\n```go\n// In `new_device.go`\npackage devices\n\nimport (\n  \"github.com/karalabe/hid\"\n)\n\ntype NewDevice struct {\n  device *hid.Device\n  currentBuffer []byte\n}\n\nfunc NewNewDevice(device *hid.Device) *NewDevice {\n  return \u0026NewDevice{device: device}\n}\n\n// Implement DeckDevice, ButtonContract, KnobContract interfaces\nfunc (d *NewDevice) DeviceName() string {\n  return \"New Device\"\n}\n\nfunc (d *NewDevice) ReadInput() ([]byte, error) {\n  buffer := make([]byte, 64)\n  _, err := d.device.Read(buffer)\n  if err != nil {\n    return nil, err\n  }\n  d.currentBuffer = buffer\n  return buffer, nil\n}\n\nfunc (d *NewDevice) IsPressed() bool {\n  // Implement button press logic\n  return false\n}\n\nfunc (d *NewDevice) ButtonPressed() ButtonKey {\n  // Implement button press logic\n  return ButtonReleased\n}\n\nfunc (d *NewDevice) KnobEnabled() bool {\n  // Implement knob enabled logic\n  return false\n}\n\nfunc (d *NewDevice) KnobAction() (KnobAction, KnobIndex, int, error) {\n  // Implement knob action logic\n  return KnobClockWise, 0, 0, nil\n}\n\nfunc (d *NewDevice) KnobInteractedIndex() int {\n  // Implement knob interacted index logic\n  return 0\n}\n\n```\n\nIt uses the `github.com/karalabe/hid` package for HID (Human Interface Device) communication.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanielhe4rt%2Fstream-decks-go-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdanielhe4rt%2Fstream-decks-go-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanielhe4rt%2Fstream-decks-go-api/lists"}