KIN is a portable lightweight tray utility which sends realtime data from your system to USB HID devices. It can be integrated with keyboards, macro pads and other HID to make them more intelligent.
Showcase: Here's a video showcasing what KIN looks like in action: https://youtu.be/6Xd1AGg_jqw?si=QLRqIY1OVC_iMn7x
To be exact the video showcases my hackpad and how I've integrated it with KIN. It uses KIN in order to have per-application macros and to display system information on the screen
Currently supported payloads are:
| Payload | Description | Default refresh rate |
|---|---|---|
| volume | System audio volume (0-100) | 200ms |
| active_app | Name of the currently focused application | 1000ms |
🟢 Strong Support - Payload supported through native APIs
🟡 Weak Support - Payload supported through CLIs
🔴 No Support - Payload not supported on platform
| OS | Volume | Active app |
|---|---|---|
| macOS | 🟢 CoreAudio | 🟢 CoreGraphics |
| Windows | 🟢 Windows Core Audio | 🟢 Win32 API |
| Linux | 🟡 wpctl & pactl | 🟡 hyprctl |
Download the appropriate binary for your operating system from the Releases page, unzip the archive, and place the binary wherever you'd like.
Note: prebuilt versions for linux-arm64 and windows-arm64 are untested and may not work, but they should.
The only prerequisite to install from source is Go. To install Go follow the directions found at https://go.dev/doc/install or install through your preferred package manager.
git clone https://github.com/Protract-123/KIN.gitgo build -ldflags="-s -w -H=windowsgui" -trimpath .go build -ldflags="-s -w" -trimpath .Running the commands above will output a KIN (or KIN.exe) binary in the repository directory, which
can then be moved anywhere.
After running the binary, KIN will appear in the system tray and begin sending data to any configured devices connected to the system.
From the tray menu you can :-
- See the connection status of all configured devices
- Open the config folder
- Quit KIN
Note: On Linux you may need to configure your system in order to allow information to be sent to the configured HID devices.
KIN exposes a TOML configuration file which allows you to change application behavior. Its location depends on your operating system, and can be directly opened through the tray item.
| OS | PATH |
|---|---|
| Windows | %AppData%\KIN\config.toml |
| macOS | ~/Library/Application\ Support/KIN/config.toml |
| Linux | $XDG_CONFIG_HOME/KIN/config.toml |
[devices]
[devices.default]
vendor_id = "0xFEED"
product_id = "0x4020"
usage_page = "0xFF60"
usage = "0x61"
report_length = 32
authorized_payloads = ["volume", "active_app"]
[payloads]
[payloads.active_app]
refresh_rate = "1s"
enabled = true
[payloads.volume]
refresh_rate = "200ms"
enabled = trueEach entry under [devices] represents a USB HID device that KIN will try to connect to. [devices.default]
represents a device which is named "default".
To find an HID device's information you can use "System Information" on macOS, "Device Manager" on Windows, and "lsusb" on linux.
| Field | Description |
|---|---|
vendor_id |
USB vendor ID (hex) |
product_id |
USB product ID (hex) |
usage_page |
HID usage page (hex) |
usage |
HID usage (hex) |
report_length |
HID report length in bytes |
authorized_payloads |
Which payloads this device should receive |
Each entry under [payloads] controls the behavior of a data source. [payloads.active_app] represents
the configuration for the payload active_app. A list of payloads can be found at the top of this README.
| Field | Description |
|---|---|
refresh_rate |
How often to send data (requires unit) |
enabled |
Set to false to disable this payload entirely |
KIN sends data using the following report structure:
Byte 0-2 : KIN identifier (0x10, 0xFF, 0x5B)
Byte 3 : Payload type (1 = active_app, 2 = volume)
Byte 4+ : Null-terminated UTF-8 string payload
KIN is released under the MIT License
Third party licenses can be found in the Licenses directory.