๐ป Group channels: say it once, and everyone subscribed hears it
Named channels on the mesh โ how they work, what they cost, and who can read them.
Until now, a Loomwave message went to one person. Now it can go to a group. Subscribe your node to a named channel, send to it, and every subscriber's node receives the message over the same radios โ no carrier, no server in the middle, nothing to sign up for.
What a channel doesn't cost
What makes a channel worth announcing is what it does not cost. The obvious way to reach a group on a mesh is to have every node repeat every message until it has been everywhere; that spends the whole network's airtime on each message, whether or not anyone nearby cares.
Loomwave sends a channel message up to the coordinator once, and the coordinator repeats it once for the entire cell โ two transmissions, not one per node โ so a busy channel does not scale its cost with how many radios are listening. Between cells, the message is forwarded only toward cells that actually have a subscriber: coordinators advertise a summary of what their members subscribe to, so a channel costs airtime where it is wanted and nothing where it is not.
The cross-cell hop, measured
That cross-cell hop is not a diagram. In the validation run on 2026-07-11, three clean runs carried a channel message from a node in one production tower's cell to a node in another's, over the radio backbone linking them, in 63 to 67 seconds โ roughly 38 seconds more than the same message takes inside a single cell, and inside the band the design simulation had predicted.
The locality filter showed up in the same session: when the far cell's last subscriber moved away, the near tower stopped forwarding to it and spent no airtime on a cell that had nobody listening.
Those timings are what that run measured, on the firmware of that date. Coordinator frame timing has been tuned since โ read them as the validation figures, not as a current specification.
Messages wait for you
Each coordinator keeps a per-channel history that survives a restart, and a node that was switched off asks for exactly the gap it missed when it comes back, rather than the whole backlog or nothing at all. Turn a node off, miss a conversation, turn it on: the conversation is there.
The first offline test is what taught us to build it that way. An early version tracked only the newest message it had seen, which quietly hid older ones from the catch-up forever. It now advances one message at a time, so a hole stays visible until it is actually filled.
Who can read what
Who can read what is worth being precise about. Direct messages and private channels are sealed end to end โ the infrastructure carries, stores, and replays ciphertext it cannot read, including the stored history.
The built-in Public channel is deliberately not like that: it uses a well-known key that every
Loomwave node derives the same way, so anyone running the firmware can read it. That is the point of
it โ an open channel is what lets someone join from a browser, with nothing installed, on a
coordinator's /chat page โ but treat Public as a public square, not a private room.
Every channel message, public or private, carries its sender's own signature, so you can tell who really sent it.
One configuration is still being worked
A Station G2 can run as the coordinator of its own cell, and it relays channel traffic to its members โ confirmed on the bench, on separate radios. Out at distance from a tower, though, that link is currently one-way: in a controlled test at about a mile, messages from the remote cell reached the rest of the mesh, but messages coming back down into it did not arrive.
Tower-to-tower delivery is not affected โ that is the measured path above โ but if you plan to run a masted G2 as a remote coordinator, treat inbound channel traffic into that cell as in testing rather than proven.
Getting it
Channels ship in the current firmware build โ flash any supported board from a Chrome or Edge browser at flasher.loomwave.org, which labels each build by date and commit rather than by release name โ and in the Android app, currently on Google Play internal testing.