{"adoption": {"forks": 466, "observed_at": "2026-08-28T04:10:06.423245+00:00", "stars": 7840}, "canonical_url": "https://ross.abutalabs.com/products/ggwave", "card": {"archived": false, "artifact_type": "library", "description": "Tiny data-over-sound library", "domain": ["embedded-systems", "iot", "developer-tools", "cross-platform"], "enriched": true, "function": ["audio-processing", "sdk", "serialization", "error-handling"], "health_score": 85, "homepage": "https://youtu.be/Zcgf77T71QM", "language": "C++", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["ggerganov/ggwave"], "name": "ggerganov/ggwave", "platform": ["cross-platform", "python", "cpp", "embedded", "cli"], "pushed_at": "2026-04-16T08:00:59+00:00", "repo": "ggerganov/ggwave", "stars": 7840, "tags": ["data-over-sound", "fsk", "ultrasound", "acoustic-data-transfer", "audio-qrcode", "device-pairing", "ecc", "modem", "arduino", "esp32", "audio", "nodejs", "web"], "topics": ["data-over-sound", "sound-library", "ultrasound", "fsk", "ecc", "internet-of-things", "qrcode", "pairing", "serverless", "python", "arduino", "modem"], "urls": [], "use_cases": ["send data between air-gapped devices using sound", "transmit data over audio to microcontrollers like arduino or esp32", "implement audio QR codes for broadcasting small payloads", "pair devices without network connectivity using sound", "share files between devices serverlessly via speakers and microphones", "decode data-over-sound signals in python or javascript"], "what_it_is": "ggwave is a tiny C++ library that transmits small amounts of data over sound using an FSK-based protocol with error correction, playable and capturable through any audio backend. It supports air-gapped device communication, IoT microcontrollers, audio QR codes, and device pairing, with bindings for Python, JavaScript, and embedded platforms.", "when_to_avoid": ["you need to transfer large files or high-bandwidth data", "you require reliable communication in noisy acoustic environments", "you need encrypted or authenticated channels out of the box"], "when_to_choose": ["you need to move tiny payloads (8-16 bytes/sec) between devices with no network", "you want acoustic data transfer on embedded hardware or in the browser", "you need a serverless one-to-many broadcast channel via sound"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/ggwave", "repo": "ggerganov/ggwave", "role": "main", "score": 70}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:10:06.423245+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T17:33:57.937370+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "15d0a6011bc040cdd8f1626528065fd3914a53246a7869f81d29ccfcd5918f47", "fetched_at": "2026-08-28T04:10:06.423245+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ggerganov/ggwave"}, {"content_hash": "d410a61f90b0190f141e78e1507da3c543421b07f07a74f23f9c142adeb8f115", "fetched_at": "2026-08-29T08:30:27.452354+00:00", "kind": "homepage", "missing": false, "url": "https://youtu.be/Zcgf77T71QM"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:10:06.423245+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T17:33:57.937370+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "15d0a6011bc040cdd8f1626528065fd3914a53246a7869f81d29ccfcd5918f47", "fetched_at": "2026-08-28T04:10:06.423245+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ggerganov/ggwave"}, {"content_hash": "d410a61f90b0190f141e78e1507da3c543421b07f07a74f23f9c142adeb8f115", "fetched_at": "2026-08-29T08:30:27.452354+00:00", "kind": "homepage", "missing": false, "url": "https://youtu.be/Zcgf77T71QM"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T17:33:57.937370+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "15d0a6011bc040cdd8f1626528065fd3914a53246a7869f81d29ccfcd5918f47", "fetched_at": "2026-08-28T04:10:06.423245+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ggerganov/ggwave"}, {"content_hash": "d410a61f90b0190f141e78e1507da3c543421b07f07a74f23f9c142adeb8f115", "fetched_at": "2026-08-29T08:30:27.452354+00:00", "kind": "homepage", "missing": false, "url": "https://youtu.be/Zcgf77T71QM"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:10:06.423245+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:10:06.423245+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:10:06.423245+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T17:33:57.937370+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "15d0a6011bc040cdd8f1626528065fd3914a53246a7869f81d29ccfcd5918f47", "fetched_at": "2026-08-28T04:10:06.423245+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ggerganov/ggwave"}, {"content_hash": "d410a61f90b0190f141e78e1507da3c543421b07f07a74f23f9c142adeb8f115", "fetched_at": "2026-08-29T08:30:27.452354+00:00", "kind": "homepage", "missing": false, "url": "https://youtu.be/Zcgf77T71QM"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:10:06.423245+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:10:06.423245+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T17:33:57.937370+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "15d0a6011bc040cdd8f1626528065fd3914a53246a7869f81d29ccfcd5918f47", "fetched_at": "2026-08-28T04:10:06.423245+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ggerganov/ggwave"}, {"content_hash": "d410a61f90b0190f141e78e1507da3c543421b07f07a74f23f9c142adeb8f115", "fetched_at": "2026-08-29T08:30:27.452354+00:00", "kind": "homepage", "missing": false, "url": "https://youtu.be/Zcgf77T71QM"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:10:06.423245+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:10:06.423245+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:10:06.423245+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T17:33:57.937370+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "15d0a6011bc040cdd8f1626528065fd3914a53246a7869f81d29ccfcd5918f47", "fetched_at": "2026-08-28T04:10:06.423245+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ggerganov/ggwave"}, {"content_hash": "d410a61f90b0190f141e78e1507da3c543421b07f07a74f23f9c142adeb8f115", "fetched_at": "2026-08-29T08:30:27.452354+00:00", "kind": "homepage", "missing": false, "url": "https://youtu.be/Zcgf77T71QM"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:10:06.423245+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:10:06.423245+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T17:33:57.937370+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "15d0a6011bc040cdd8f1626528065fd3914a53246a7869f81d29ccfcd5918f47", "fetched_at": "2026-08-28T04:10:06.423245+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ggerganov/ggwave"}, {"content_hash": "d410a61f90b0190f141e78e1507da3c543421b07f07a74f23f9c142adeb8f115", "fetched_at": "2026-08-29T08:30:27.452354+00:00", "kind": "homepage", "missing": false, "url": "https://youtu.be/Zcgf77T71QM"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T17:33:57.937370+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "15d0a6011bc040cdd8f1626528065fd3914a53246a7869f81d29ccfcd5918f47", "fetched_at": "2026-08-28T04:10:06.423245+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ggerganov/ggwave"}, {"content_hash": "d410a61f90b0190f141e78e1507da3c543421b07f07a74f23f9c142adeb8f115", "fetched_at": "2026-08-29T08:30:27.452354+00:00", "kind": "homepage", "missing": false, "url": "https://youtu.be/Zcgf77T71QM"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T17:33:57.937370+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "15d0a6011bc040cdd8f1626528065fd3914a53246a7869f81d29ccfcd5918f47", "fetched_at": "2026-08-28T04:10:06.423245+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ggerganov/ggwave"}, {"content_hash": "d410a61f90b0190f141e78e1507da3c543421b07f07a74f23f9c142adeb8f115", "fetched_at": "2026-08-29T08:30:27.452354+00:00", "kind": "homepage", "missing": false, "url": "https://youtu.be/Zcgf77T71QM"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T17:33:57.937370+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "15d0a6011bc040cdd8f1626528065fd3914a53246a7869f81d29ccfcd5918f47", "fetched_at": "2026-08-28T04:10:06.423245+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ggerganov/ggwave"}, {"content_hash": "d410a61f90b0190f141e78e1507da3c543421b07f07a74f23f9c142adeb8f115", "fetched_at": "2026-08-29T08:30:27.452354+00:00", "kind": "homepage", "missing": false, "url": "https://youtu.be/Zcgf77T71QM"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 77, "longevity": 100, "rhythm": 43}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2103, "days_push": 139, "days_rel": 165, "gap_med": null, "n_releases_24m": 1}, "score": 70, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}