The family airwaves,open to everyone.
Hearthwave turns any home server into a shared radio station you reach from any browser. It transcribes what comes over the air and speaks what you type — so no one is left off the channel.
Radio you can read, type, and hear.
A radio that only works if you can hear it and speak clearly shuts people out. Hearthwave was built the other way around.
Deaf & hard of hearing
Every transmission is transcribed live on screen, with a scrollback you can read at your own pace.
Speech & non-speaking
Type a message and Hearthwave speaks it over the air in a clear, natural voice. Or skip typing entirely: the AAC interface swaps the whole screen for large symbol buttons — tap to build a sentence, press SEND, and it's your voice on the channel.
Built-in access
Switch scanning drives the whole app from a single adaptive button; visual alerts flash the screen on incoming messages; plus keyboard PTT and shortcuts, large default type, light & dark themes, and screen-reader labelling — not bolted on, built in.
From the antenna to every screen — and back.
GMRS radio
Your Part-95 radio on the family channel.
Audio cable
One K1 cable into the server's jack.
Home server
Docker stack: STT, TTS, mixer, web.
Your Wi-Fi
No port forwarding, no internet gateway.
Every device
Read, type, and talk from any browser.
One station. Many operators.
Family, neighborhood watch, a place of worship, an accessible net — every member connects from their own device on your home Wi-Fi.
Hear & be heard
A fast local pass shows words as they arrive; a second, more careful pass cleans up longer messages and callsigns. Tuned to handle static and squelch tails — and it configures itself: setup stages the second-pass model for you, and the station picks it up automatically.
Speech-to-text on every transmission, the moment it lands.
Push to talk from a key, a button, or speak — your choice.
Whisper is primed with NATO phonetics, Q-codes, and your contacts' callsigns — so the words it hears most often are the ones it recognizes best.
A misheard character in a known callsign is corrected right in the transcript — visibly marked, with the original a hover away. Ambiguous? It leaves the text alone.
A per-user toggle turns the app into a symbol-button communication board, like the AAC devices many non-speaking people already use — tap big emoji buttons to build a message, press SEND, and it's spoken over the radio. Fully editable and it follows the user to any device.
Opens on a home screen of big activity cards, with a Simple interface level that hides the radio-operator controls. Adjustable text size, high contrast, light & dark themes — usable by everyone at home.
Weather & the neighborhood
Built-in SKYWARN net control, live NWS alerts, and criteria-gated spot reporting.
Per-operator logins, voices, and preferences — one shared station.
A presence board shows who's OK, on air, or overdue; one big "I'm OK" button announces it on air and logs it; admins can set a daily check-in reminder per person. Kid accounts get a locked-down, preset-only interface.
Point a spare tablet at an admin-issued display link and it becomes an always-on household glance screen — who's OK, weather and street alerts, the last few messages, and the next net. Tap to send a preset household message or Mark-OK; no login, no access to the rest of the app. A per-display e-ink mode renders it in fixed high-contrast grayscale with no animation for real paper-like panels.
One-tap roster check-in that works even before the net starts, standardized incident reports spoken on air and kept in a filterable log, and street alerts that banner and notify every connected device. A per-user coordinator grant runs the net and round-table — including checking in a caller who's radio-only with no account, calling any station out of order, and flagging one that doesn't answer — and on a wide screen it opens as a single-viewport ops console with radio traffic, roster, and the incident log all in view at once. Kids can check in and read the log, but can't file reports or coordinate.
Extend the radio without touching core code — drop a plugin into the plugins folder or upload a .zip from Settings, and it hot-loads with its own config form. MeshCore and Meshtastic ship as examples. See the plugin system →
Every contact logged to a session journal; resolve any callsign against an FCC license lookup without leaving the page.
Under the hood
Adaptive squelch rides the channel, and an optional denoise mode samples the actual static between transmissions to subtract exactly that from the speech.
With an AMD GPU, the whole-utterance final pass runs on ROCm — freeing the CPU for live streaming. Falls back to CPU automatically when no GPU is present.
Real-time frequency display, with selectable receive leveling — dynamic AGC, one-shot RMS, or off — and transmit-audio conditioning.
Read one passage into the radio and Hearthwave sweeps gain, noise, and Whisper model settings automatically, then shows you the best-scoring combination to apply.
A single Settings dialog — per-operator preferences plus admin-only station controls — that adapts cleanly from phone to tablet to desktop.
Remote control — not an internet gateway.
Hearthwave is a remote control surface for a radio you own and operate. It stays inside FCC Part 95 by design.
- ✓Automatic station IDIDs your callsign on schedule, hands-free.
- ✓Licensed operators onlyOnly family members on your GMRS license can transmit.
- ✓No third-party linkingIt controls your radio locally — it is not a repeater-over-internet bridge.
Extend it for your net.
Hearthwave has a real, installable plugin system. Net Control is built in; MeshCore and Meshtastic ship as example plugins. Add more by dropping a folder into the plugins directory or uploading a .zip — hot-reloaded, no restart.
Net Control Station
BUILT-INFull-featured NCS panel for managing radio nets — roster, emergency interrupt, and audio replay.
- ✦Live roster — check operators in and out with traffic priority levels, Routine through Emergency.
- ✦BREAK BREAK interrupt — drains the TX queue and broadcasts an emergency interrupt to clear the channel instantly.
- ✦15-second audio replay — replay the last 15 seconds of received audio when you need to catch a missed transmission.
- ✦Auto net ID — periodic station announcements at a configurable interval — FCC-compliant by default.
- ✦Net scripts — read a configurable opening preamble and closing sign-off over the air, with
{callsign}/{name}/{date}placeholders. - ✦Round-table caller — cycle the roster one station at a time, prompting each for traffic and tracking who's been called.
SKYWARN Alerts
BUILT-INMonitors your NWS county zone every 5 minutes and pushes severe weather alerts to the whole household.
- ✦Red alert banner — active NWS warnings appear at the top of every connected browser immediately.
- ✦Browser notifications — opt-in push notifications reach family members on background tabs or locked screens.
- ✦Auto-announce over the air — when the channel is clear, alerts are automatically read aloud over GMRS via TTS.
- ✦Per-county targeting — set your NWS zone code once in config — only alerts relevant to your area come through.
- ✦Spot reports — trained spotters file a criteria-gated report (hail ≥1″, wind ≥40 mph, tornado, flooding) that builds a standardized on-air report and transmits, logs, and journals it.
MeshCore Bridge
EXAMPLE PLUGINShips as an example plugin. Forwards every transmission onto a MeshCore LoRa mesh over a USB Companion radio, so your group stays in contact off-grid.
- ✦Name-prefixed — each message reaches the mesh as
<your name>: …, so mesh-only members know who is talking. - ✦Outbound only — only what you transmit is bridged; received radio traffic is never forwarded.
- ✦Every spoken surface — chat overs, family check-ins, wall-display messages, street alerts and net scripts all reach the mesh, not just typed chat.
- ✦Fits one frame — a live byte counter caps the message box to the mesh packet length minus the name prefix, measured in UTF-8 bytes like the radio does.
- ✦Never blocks the radio — best-effort, non-blocking forward; the over always airs on GMRS normally.
Meshtastic Bridge
EXAMPLE PLUGINShips as an example plugin. Forwards every transmission onto a Meshtastic LoRa mesh; mutually exclusive with MeshCore — run one mesh radio at a time.
- ✦Name-prefixed — each message reaches the mesh as
<your name>: …, so mesh-only members know who is talking. - ✦Outbound only — only what you transmit is bridged; received radio traffic is never forwarded.
- ✦Every spoken surface — chat overs, family check-ins, wall-display messages, street alerts and net scripts all reach the mesh, not just typed chat.
- ✦Fits one frame — a live byte counter caps the message box to the mesh packet length minus the name prefix, measured in UTF-8 bytes like the radio does.
- ✦Never blocks the radio — best-effort, non-blocking forward; the over always airs on GMRS normally.
Build your own plugin
Subclass BasePlugin and declare a PluginManifest with a declarative config schema — the app renders the settings form, so plugins ship no browser code. Access services through a PluginContext and hook into events like on_rx_final, on_audio_rx_chunk, on_audio_tx_pre_queue, on_config_changed, and on_client_message_received, plus setup/on_unload lifecycle. Install by dropping it into the plugins folder or uploading a .zip.
If it runs Docker, it runs Hearthwave.
Any Linux box on your home network — a mini PC or NUC is plenty. No cloud accounts, no monthly fees.
RECOMMENDED · Intel N305 · 16 GB RAM · 64 GB SSD
Minimum: Intel N100, 8 GB RAM, 32 GB SSD. GPU optional — adds a large transcription speed-up.
# 1. Clone the repo $ git clone https://github.com/Xpiatio/Hearthwave $ cd Hearthwave # 2. Run setup (creates .env, downloads # the speech models — about 2 GB) $ ./setup.sh # 3. Start the stack $ docker compose up -d # 4. Open in your browser http://your-server-ip
x86 mini PC or NUC (Linux)
Intel N100 minimum; N305 or better for the two-tier final pass. 8 GB RAM minimum, 16 GB recommended. Docker installed. Whisper STT needs a real x86 CPU.
Audio cable to the radio
A K1 (or equivalent) cable from the radio's 3.5 mm combo jack — into the computer's built-in jack, or a USB sound card. No USB-to-radio connection required.
VOX, or a USB PTT dongle
VOX keying needs no wiring (a primer tone opens the radio first). Or key PTT via a USB serial adapter (RTS/DTR).
GMRS radio + license
A Part 95-certified GMRS radio and an FCC GMRS license (covers your whole family).
Local network
Family members connect from any device on your home Wi-Fi — no port forwarding needed.
Free printable reference cards.
Type your callsign and channel once — the card fills in live. Print it, stick it on the fridge, and you're ready to go.
Station Reference
Key channels, calling phrases, and the 15-min ID reminder — one card for your home station.
My Radio Card
Five numbered steps — turn the channel, call, identify, listen, sign off. A card kids can follow on their own.
My Radio Story
A 12-page illustrated social story — how to turn on the radio, what the sounds mean, when to talk and listen.
Radio Business Card
Wallet-sized front-and-back card. Channel and callsign on the front; what to say on the back. Print and cut.
SKYWARN Script
Facts-only storm-spotting script — the words for severe weather and exactly what to say when you hail Net Control.
Bring the whole family onto the channel.
Free, open source, and built so being unable to hear or speak never means being left out.