Same room? No server.
On a shared LAN peers register a DNS-SD service, spot each other, and dial direct. Clock-free — a device fresh out of the box, before NTP, still gets found.
Your devices find each other and talk directly — encrypted end to end. On the same LAN they discover each other by themselves, over mDNS/DNS-SD. No account, no port forwarding, no static IPs, and no servers you don't run.
Every network now runs mDNS/DNS-SD beside its relay — pure Rust, no Avahi, no Bonjour — so the fastest path is often no server at all.
On a shared LAN peers register a DNS-SD service, spot each other, and dial direct. Clock-free — a device fresh out of the box, before NTP, still gets found.
Peers meet in a room at a signaling relay — the project's, or yours with one command. It brokers the handshake and never sees your traffic.
Set the strategy to "none", leave mDNS on, and co-located devices form a fully air-gapped mesh — zero remote infrastructure, same encryption.
The desktop app bundles the daemon, so a bare
myownmesh just opens it. Or grab a build straight off
the downloads page:
Prefer the terminal? One line installs the daemon and the app:
# macOS / Linux
curl -fsSL https://myownmesh.net/install.sh | sh
# Windows (PowerShell)
irm https://myownmesh.net/install.ps1 | iex
# From source — needs cargo (https://rustup.rs)
git clone https://github.com/mrjeeves/MyOwnMesh
cd MyOwnMesh
cargo install --path crates/myownmesh
Phone, laptop, workstation, a Pi in the closet — same network ID, all sharing work and state directly. No account, no broker. The devices are the service.
Add myownmesh-core, define your message types, and your app's devices talk to each other in ~15 lines. No GUI, no Tauri — a narrow library surface.
One static binary, linux-aarch64 included. Drive the whole fleet from a single desktop GUI over each daemon's local control socket.
A fresh install connects on the project's reference servers, so it just works. But none of it is infrastructure you're stuck with — every piece is the same binary, ready to host. Flip it on and the fleet finds it.
The signaling role is a rendezvous relay your peers use in place of the default. myownmesh install caddy your-domain wraps it in auto-renewing TLS for wss://.
Turn on TURN and you've got STUN + TURN on one port for the peers that can't go direct. Enable both and it just runs the one — nothing to wire up.
On a LAN, riding a tailnet, or out on a public domain: peers connect the same encrypted way, direct or relayed. Same security wherever you put it.
Hosts advertise the roles they offer, so peers find your relay and STUN/TURN on their own — no URLs to hand out. Run a network on infrastructure only you own.
Peers advertise _myownmesh._tcp.local. and browse for their room right on the local network — DNS-SD, pure Rust, no Avahi. Beyond the LAN, a room handle on your relay (or ours) makes the introductions. Both run at once; duplicates get deduped.
Peers hand off to a DTLS-secured data channel — direct when NAT allows, STUN/TURN-assisted when it doesn't. The relay never sees your traffic.
A signed nonce exchange plus a short confirmation code authenticates each peer; approved peers persist in a roster. The signatures establish trust — not the relay.
A seven-tier ladder takes the cheapest recovery for each failure. Close the lid and reopen — it spots the resume, redials, and you're back among your peers in seconds.
myownmeshmyownmesh-coremyownmesh-gui