finds.dev← search

// the find

ggerganov/ggwave

★ 7,715 · C++ · MIT · updated Apr 2026

Tiny data-over-sound library

ggwave is a C++ library that encodes small payloads into audible or ultrasonic tones using multi-frequency FSK, then decodes them from microphone input. It's for developers who need to transfer tiny amounts of data between devices without network infrastructure — think IoT pairing flows, air-gapped data transfer, or contact exchange via sound. The same author as llama.cpp and whisper.cpp.

The core library has no audio backend dependency — it only generates and consumes raw float samples, so you wire in whatever audio API fits your platform. Reed-Solomon ECC is built in, which meaningfully improves real-world reliability in noisy environments. The platform coverage is genuinely wide: Arduino, ESP32, RP2040, iOS, Android, Python, JS/Wasm, and a Debian package, all with working examples rather than stub code. Ultrasonic mode (15kHz+) lets you transmit data inaudibly, which matters for production UX.

8–16 bytes/sec is the ceiling, full stop — this is a signaling channel, not a data channel, and anyone who doesn't internalize that before integrating will be frustrated. The library is at v0.4.3 and last saw real development activity a couple of years ago; the CHANGELOG shows no changes since 2022, which is a concern for a security-adjacent primitive used in pairing flows. No built-in encryption or authentication — the README shows device pairing use cases but you're entirely on your own for key exchange or message integrity beyond the ECC. Sensitivity to real-world noise (HVAC, music, other conversations) is underdocumented; the browser demos work in a quiet room but field performance is hard to predict without testing your specific environment.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →