Store · Carry · Forward
Your message doesn’t fail.
It finds another way.
MeshDTN is MeshCore with one thing added: a message that waits if the recipient isn’t reachable. Everything that can be delivered now still is, exactly the way it is today — same radios, same network, same people. Only a message that would have failed gets carried, and then it is carried until it reaches them. No towers, no servers, no accounts.
Already running MeshCore?
A superset, not a fork. You give up nothing.
MeshDTN is built on MeshCore and stays inside it. Flash the firmware and your radio is still an ordinary member of the network it is in today — it just stops dropping messages nobody was there to receive.
What stays exactly as it is
- Your radios. Same boards, same antennas, same mounts. It is a firmware flash, not new hardware.
- Your network. A MeshDTN radio is a full MeshCore node. Stock users see it in their contacts and text it the ordinary way.
- Your contacts, repeaters and room servers. Every stock message type behaves exactly as stock.
- Your range. Identical RF settings — same frequency, spreading factor, bandwidth and coding rate. Same sync word, 0x12.
- Your map, neighbors, telemetry and path traces. All still there, now seeing the whole network again.
What you didn’t have before
- A message that waits. Recipient out of range, asleep, or phone dead — it is carried until it reaches them, for up to ninety days, and you are told when it lands.
- A choice, per message. MeshCore, Auto or MeshDTN. You decide which path each message takes, and the app shows you before you send.
- A path with nothing to log. Sent the MeshDTN way, nothing on the wire that a carrier can read says who it is for.
- Stations. A solar box that holds messages for people who aren’t there — and forwards your ordinary MeshCore traffic too.
Nothing is removed and nothing is traded away. Whatever MeshCore does for you today, it still does.
No path required. There is never a moment when every hop between you and the recipient has to be up at once.
No server required. There is no central service storing your message — the network itself carries it.
The recipient doesn’t have to be there. Not now, not today. The message waits in the network and finds them whenever they turn up.
The problem
Mesh radio solved distance. It didn’t solve time.
Radio networking has become very good at reach — getting a packet across terrain, through trees, over kilometers, on a battery. Reach was never the hard part of talking to people.
The hard part is that people aren’t synchronized. They’re at work, asleep, driving, underground, out of battery. The moment you need off-grid messaging most — a disaster, an evacuation, a search — is exactly the moment nobody is where you expect them.
Other systems answer this with a mailbox: one device, set up ahead of time by someone who thought to, and left switched on. Where there’s a mailbox, your message waits. Where there isn’t — most places, and everywhere that has just lost power — it doesn’t.
MeshDTN inverts it. Time apart is the normal condition of the network, not the exception — so every node carries, by default, with no server to configure, no node to designate, and nobody’s permission to ask.
Mesh routing asks: how do I get this packet to Bob?
MeshDTN asks: how do I keep Bob’s message alive when no path to Bob exists — and may not exist for days?
The three-sentence version
Send a message to someone forty miles away, off the air, out of range, phone dead, on the far side of a mountain. The message doesn’t fail — your phone holds it, the next MeshDTN user who walks past takes a copy, and somewhere down the line a copy meets the recipient and opens. Nobody in the middle could read it, and nobody in the middle knew who it was for.
Carries what others drop
Recipient offline? The message waits in the network until it finds them — and you are told when it lands.
Nobody in the middle can read it
Sealed end to end before it leaves your phone. Sent the MeshDTN way, nothing on the wire that a carrier can read says who it is for.
Every link is a road
LoRa for distance, WiFi for speed, Bluetooth for density. One message, all of them.
How it works
The journey of one message
Adam sends to Bob at 8:04 in the morning. Bob’s phone is off. Carol, who has never met either of them and cannot read a word of it, drives 35 miles with the message in her pocket. It lands at 5:31 p.m. and the receipt comes back.
Patience is a protocol
Delay-tolerant networking, borrowed from deep space
NASA built DTN because a packet to Mars takes four to twenty-four minutes each way and there is no such thing as an end-to-end path. The insight generalizes far beyond space: a network doesn’t need a connected path if it has patient storage and moving carriers.
Custody
When a node takes your message, it takes responsibility for it. It doesn’t forward-and-forget; it holds until somebody better has it.
Opportunism
There is no route. There is only who happens to be here now, and a set of rules for deciding what to hand over in the seconds you’re in range.
Patience
Time is a resource, not a failure. A message that takes six hours is a message that arrived.
Many roads, one message
A message doesn’t care how it travels
Every link your phone can make is a way for messages to move, with identical privacy guarantees on all of them — and every transport carries its own budget, so a fast link can never spend a slow one’s.
LoRa — the long one
Kilometers, through terrain, on a battery, where nothing else reaches. Inherits MeshCore’s proven radio layer and board support.
WiFi & LAN — the fast one
Two phones on one network swap everything in about a second. An office or a shelter is an enormous mixing point, at no airtime cost.
Bluetooth LE — the dense one
Phone to phone with no radio at all, every phone in range a potential carrier. No pairing, no network, nothing to join.
Phone-only nodes
You don’t need a radio to join. The radio makes you reach further — it isn’t the price of entry.
Paper — the slow one
A message as a QR code or a short link, carried by a photograph, a printout or a screen held up to a camera. The same sealed message — paper is a route, not a downgrade, and nobody carrying it can read it.
Stations
Infrastructure that helps when nobody is there
A repeater forwards between two nodes in range at the same moment. If you’re the only person on the mountain, a repeater does nothing for you at all.
A MeshDTN station is a different animal: a radio with a persistent store and no phone, no user, and no key to anything it carries. A box that holds sealed messages it cannot read and hands them to whoever comes along next.
Repeaters bridge distance. Stations bridge time.
Two people who are never in the same place on the same day can still exchange messages through it.
The reference build and what it doesStation callout
Put one on a pole and walk away.
Solar. GPS. Weatherproof. Manages over Bluetooth from your phone, updates its own firmware over the air, and holds messages for people who will never meet each other.
- Reference build
- Seeed Studio SenseCAP Solar Node P1-Pro
- Power
- Solar panel, four 18650 cells
- Enclosure
- IPX6, onboard GPS
- Knows about you
- Nothing. It holds no key to any message it carries and keeps no record of who it met.
Keep your hardware
Already running a LoRa mesh radio?
Keep every piece of hardware you own. Same boards, same antennas, same enclosures, same mounts. Flash the firmware, install the app, and your radio stops dropping messages nobody was there to receive.
It stays in your MeshCore network, and every message gets a choice:
MeshCore
Radio only. Every repeater can see who it is for, and it fails if the radio cannot deliver it.
Auto default
Radio first, carried if the radio cannot deliver it. Until it is carried, every repeater can see who it is for.
MeshDTN
Carried only. Nothing on the air that a carrier can read says who it is for.
Ten minutes. No new hardware. No subscription.
What a carrier can see
They’re doing you a favor they can’t inspect
Worth being precise about, because it’s the part that’s easy to hand-wave.
A carrier CAN see
- That it holds a blob of ciphertext of a certain size
- A short opaque identifier for it
- When it expires
- How many phones have carried it
It CANNOT see
- The contents
- Who it’s from
- Who it’s for — the tag changes on every message
- Whether it’s for them, until they try their own key
It CANNOT do
- Select what it carries — no allowlist, no blocklist, no operator filter
- Log who it met — an identifier is somebody else’s metadata
- Reach the internet — there is no hub, on purpose
The seal, the missing field, and why there is no internet path
Open source
A protocol with one implementation is a format, not a standard
MeshDTN is open source, and the specification is public specifically so a second implementation is possible. Frame layouts field by field. Conformance vectors both implementations test against. And a Charter that records the arguments against every decision as carefully as the arguments for — so anyone who disagrees has what they need to reopen the question.
Build a second one. We’ll help.
What’s published
Everything a second implementation needs
- Protocol — every identifier, frame, field and byte, on the air and across the companion bridge
- Charter — the binding rules, and the case against every decision beside the case for it
- Architecture — layers, module boundaries, build targets and test strategy across firmware and app
- Conformance vectors — the shared corpus two implementations test against so they can’t drift apart
- Notice — every bundled license, and the regulatory facts with citations
What we do not claim
Nothing here is audited
No security property in this project has been independently reviewed. Until it has been, every security property described on this site is a design target, not an assurance.
MeshDTN uses standard primitives from widely used libraries and invents none — but a library’s assurance covers the library, not the way we combine it.
A message that can wait is a message that arrives
Distance is easy. Time is the hard part.
A phone and one supported LoRa board is the entire bill of materials. Or just a phone, if the people you’re messaging are within Bluetooth or WiFi range.