PineVoice – Golang Wyoming Protocol A developer released gowyoming, a pure-Go implementation of the Wyoming voice-assistant protocol, enabling Go programs to act as clients, servers, or satellites for Home Assistant's voice pipeline without Python dependencies. The library supports audio streaming for ASR and TTS, and includes example programs for PineVoice hardware integration. A pure-Go, cgo-free implementation of the Wyoming voice-assistant protocol https://github.com/OHF-Voice/wyoming : the wire framing, a typed event model, and both the client and server roles — plus a satellite composition for edge devices and example programs you can run today. Disclaimer: This works for me — that's the entire guarantee. Built with AI in the loop, so check your own biases before you love it or hate it on principle. Use at your own risk, fork freely, and don't @ me when it explodes. But do drop me a note if it helps — pay it forward. Wyoming is the small peer-to-peer TCP protocol the Open Home Foundation Home Assistant uses to wire together voice-pipeline services: wake word, speech-to-text ASR , text-to-speech TTS , intent handling, and the microphone/speaker "satellite" edge role. It is newline-delimited JSON headers plus raw PCM audio on one socket — simple by design. The only maintained reference library is Python. gowyoming gives Go programs a first-class way to speak Wyoming on both sides of every conversation, without reverse-engineering the wire format: Client — connect to a Wyoming service, run the describe/info handshake, stream audio for ASR, receive audio from TTS. Server — expose a Go ASR/TTS/wake engine as a Wyoming service. Satellite — a mic + speaker edge endpoint e.g. a small speaker like PineVoice that a pipeline connects to and drives. - Go 1.22 or newer developed on 1.26 . - No cgo, no external runtime dependencies. - The external-command audio backend optionally shells out to arecord / aplay or any PCM-piping tool ; not required for the file backend or the examples. Build everything and run the tests: make build make test go test -race ./... wyoming-info connects to any Wyoming server and prints what it offers: go run ./cmd/wyoming-info --uri tcp://127.0.0.1:10300 Point a real device e.g. a PineVoice satellite at this server; every utterance it streams is written to disk as a playable WAV, with a one-line summary so wrong gain or silence is obvious: go run ./examples/record-server --uri tcp://0.0.0.0:10300 --out ./out utt-20260714-150405.wav 1.28s 16000Hz/16bit/1ch peak=8123 rms=1580 Two programs that together exercise the whole protocol path — handshake, run-pipeline, audio both directions — with no Python and no hardware: make loopback runs the in-process integration test or as two real processes: go run ./examples/loopback/satellite --uri tcp://127.0.0.1:10700 & go run ./examples/loopback/server --uri tcp://127.0.0.1:10700 A PineVoice https://wiki.pine64.org/wiki/PineVoice runs its factory firmware as a Wyoming satellite server on port 10700 — it listens, and a pipeline Home Assistant, or a gowyoming driver connects to it by IP. It does not connect out to an ASR endpoint, so you talk to it as a client. This is why record-server , which listens, is not the tool for a PineVoice — see the note below. 1. Find the device IP. Look in your router's client list, or rely on mDNS. The port is 10700 . 2. Describe it — the simplest end-to-end check that gowyoming talks to the real hardware: go run ./cmd/wyoming-info --uri tcp://