The big idea is simple: every radio, every mode, every contact —
one chat thread per friend, handled seamlessly in the background.
Automatic transport switching
When a message arrives on any transport, MeshThreader™
logs it, resolves the sender's identity across the protocols you've
linked them to, decides how to route it, and updates the live state
for the web UI — all before your next decode finishes. Routing rules
are per-transport and configurable.
It's a multi-protocol radio bridge that connects Meshtastic LoRa
mesh, JS8Call HF digital, APRS VHF packet, and NOAA Weather Radio.
Messages, positions, and weather flow across all of them through
a single web interface — no internet required at any step.
What you can do
- Message across protocols. Send to Meshtastic, JS8Call, and APRS contacts from one unified chat interface.
- Bridge transports automatically. A message from a local Meshtastic friend can relay via HF to a distant JS8Call station, or via APRS to a vehicle.
- Monitor every band in a single inbox.
- Track positions of mesh nodes, APRS stations, and JS8 stations on one map.
- Get weather from APRS WX stations and NOAA Weather Radio, with location-aware automatic tuning as you move. Received alerts can be rebroadcast in plain text over APRS, JS8, and Meshtastic so anyone on any radio hears them.
- Hear emergency alerts decoded from NWR SAME signaling.
- Merge identities — one contact per friend, even when they reach you across multiple callsigns and node names.
- Configure remotely from any device on your local network, or anywhere via Tailscale.
What it does on its own
MeshThreader™ is engineered to run a station
without constant babysitting. Without operator intervention it will:
- Auto-speed JS8 — picks the right JS8Call speed based on incoming SNR, slowing for weak peers and speeding up for strong ones.
- Auto-offset handler — keeps JS8Call's audio offset where it belongs across band changes.
- Unlimited band switch slots — schedule as many HF band changes through the day as you want. Sunrise/sunset aware. No fixed slot limit.
- APRS beacon on schedule with current GPS position.
- NWR retune when the GPS-determined county changes, for mobile use.
- Audio sanity — re-asserts microphone gain every 30 seconds so input level never drifts.
- PTT safety — releases push-to-talk on boot so the radio never wakes up transmitting.
- JS8Call health check — probes every minute; restarts cleanly if it's gone silent.
Remote control operation
Both MeshThreader™ Lite and the Full Kit
include Field Console — a remote control for your
home radio station. A Meshtastic node in your hand operates the
rig at home: incoming JS8 traffic shows up on the mesh, replies
you tap out transmit from your HF radio. The auto tools handle
JS8Call so you just handle conversations from wherever the mesh
reaches.
The mailbox
MeshThreader™'s built-in mailbox is a full
store-and-forward system with a life of its own — three interlocking
pieces that appear as one unified inbox.
Your own mail. Any message you compose to a
contact who isn't currently reachable becomes a queued mail entry
with a full lifecycle: waiting → notified → delivered. Each mail
records when it was created, when it was picked up, and which
transport carried the delivery. Set a per-message expiry or a
default expiry policy for bulk. Pin a specific transport for
delivery, or leave it on auto — the station uses whichever radio
the recipient shows up on first. When they finally hear you on
any band, telemetry, position beacon, or DM, the mailbox knows
and offers the queued mail automatically. On Meshtastic between
two MeshThreader™ stations, mail pickup
handshakes on its own — no manual reply needed.
Your station as a mailbox for others. This is
what sets it apart. Any station on the air can leave mail
at your MeshThreader for a third party, BBS-style —
and your station will hold it until the intended recipient's
signal touches any of your radios. Even better: the
deposit transport doesn't have to match the pickup
transport. A friend can leave a message on JS8 for
someone who only runs Meshtastic; your station bridges it.
Relay traffic displays with its own flag in the UI so you can
tell what's yours and what you're just holding for others,
surfaces on Today's Highlights as "Relay Mail held for others"
so you always know your station is carrying traffic, and stays
out of your own unread counts (it's not your mail). A blocklist
handles stations you don't want to relay for.
JS8Call's own mailbox, shown alongside yours.
JS8Call has its own built-in inbox that catches messages sent
directly to your callsign over HF. MeshThreader™
pulls those in and displays them right alongside your own mail,
so you check one place instead of two.
Standards-friendly. The mailbox answers the
JS8-standard QUERY MSGS verb as well as
MAIL?, and handles the interop quirk where
JS8Call itself responds to QUERY MSGS from its
own empty store. Group-addressed mail tracks delivery to each
member individually. The first response to a group-context
query posts to the group; subsequent deliveries silently DM
so the channel isn't flooded. In-field mailbox management is
available from any owner handheld through the Meshtastic menu.
Traffic listener & parser
MeshThreader™ doesn't just send and receive
— it listens to everything. Every JS8 decode, every APRS
packet, every mesh node heartbeat that lands on any of your radios
gets logged, parsed, and turned into something useful.
All of it lives in a fully searchable, filterable
database — every message, every heard station, every
packet, every position report, going back to day one of your
install. Filter by callsign, band, mode, time window, message
content, or any combination. Sort by SNR, distance, frequency,
or contact. Nothing gets thrown away; nothing is buried.
- JS8 traffic feed — every directed message, beacon, status, and group call you hear, timestamped and searchable back to install day one.
- APRS traffic log — raw packet history filterable by callsign, type, path, and time.
- Heard-station tracking — automatic SNR / band / time-of-day rollups per station, so propagation patterns surface on their own.
- Position parsing — coordinates, grids, and reported positions extracted from every transport and unified on the map.
- Weather extraction — APRS WX packets parsed and overlaid alongside NOAA decoded alerts.
- Full-text search — remember a message from three weeks ago but not who sent it? Search the body. Find it.
- Nothing disappears — no rolling window, no auto-delete. Your traffic history is yours to keep, on your own hardware.
The Reach tab
This is the payoff for a database that never forgets. Open the
Reach tab and for every contact you'll see MeshThreader™
calculating when they're reachable across every radio
mode you both use — not guessed from generic
band-condition charts, but computed from the times you and they
have actually heard each other. Different friends surface at
different hours on different bands and different modes, and the
Reach tab knows which is which.
Each contact gets a window-by-window readout across JS8, APRS,
and Meshtastic:
"KE5ABC on 40m JS8, most reliable 03:00–07:00 UTC.
Occasional copy on 20m mid-afternoon. Last heard on Meshtastic
2h ago."
One glance and you know whether to key up now, or wait until
dinner, or drop it in the cross-radio message store to catch
them whenever their signal next hits any of your radios. No
propagation-model guessing, no online lookup, no internet
required. Just your own history, distilled
into the answer to the question every ham asks: can I
reach this person right now, and if not, when?
CommStat / STATREP interop
Emergency comms nets don't need one more custom format. MeshThreader™
speaks CommStat / AmRRON STATREP 5.1 natively over
JS8 — decodes the twelve-category status reports off the air,
translates them into plain English with color-coded severity strips,
and files them in a searchable SITREP tab. When a received report
shows a red condition, you get alerted immediately through the same
pipeline that carries NOAA weather warnings — so a critical status
report never sits unnoticed.
Originate your own reports three ways: from the thread composer,
as an automatic scheduled beacon, or as a Meshtastic DM from the
field ("SR" + twelve digits). Every outgoing report is
wire-format-compatible with CommStat.
Live home dashboard
Everything you'd want to check before keying up, on one page.
Sunrise, sunset, day length, and moon phase with a date-picker
to explore any past or future day. Live GPS position and heading.
Node health at a glance — is your Meshtastic radio talking? Is
the AP hotspot up? Is the Heltec associated? Today's traffic
highlights, propagation summaries, heard-station rollups.
Performance metrics from your real usage.
Self-healing hardware
Radios and USB peripherals fail in weird ways — serial links
drop after hours of runtime, WiFi adapters wedge until you
unplug them. MeshThreader™ watches for both
and recovers itself. Meshtastic serial reconnects automatically
with exponential backoff. AP hotspot adapters get a software
unplug/replug when they stop responding. The system runs
unattended for weeks — the way an off-grid appliance should.
Off-grid first
No internet connection is required. MeshThreader™
runs as a headless service on a Raspberry Pi with a local web UI you
reach from your phone or laptop over Wi-Fi (or directly via cable).
Optional Tailscale support gets you remote access when you do have
internet, but the whole stack is built to function indefinitely
without it.