Send Your First Encrypted Message with MeshChat
This is Part 3 of a 12-part series on building private, resilient communication networks with Reticulum, LoRa, and associated tools.
You have Reticulum installed and connected to the testnet from Part 2. Now let's actually talk to someone. MeshChat is a browser-based Reticulum client that gives you messaging, file sharing, and a network visualizer — all through a web UI. It's the lowest-friction way to start using Reticulum.
What is MeshChat?
Reticulum MeshChat is a community-built client by Liam Cottle. It runs a local Python server and serves a web interface you access in your browser. Under the hood, it uses Reticulum and LXMF for encrypted messaging.
Key features: - Send and receive encrypted messages to any LXMF-compatible client (Sideband, NomadNet, other MeshChat users) - Browse NomadNet pages (decentralized websites) - Network visualizer showing discovered nodes and interfaces - File and image sharing - Voice message recording
Step 1: Install MeshChat
MeshChat requires Python 3 and pip (same as Reticulum, which you already have).
pip install reticulum-meshchat
Or on systems that restrict pip:
pip install reticulum-meshchat --break-system-packages
Alternatively, you can clone and run from source:
git clone https://github.com/liamcottle/reticulum-meshchat.git
cd reticulum-meshchat
pip install -r requirements.txt
python meshchat.py
Step 2: Launch MeshChat
meshchat
MeshChat will start and print a URL, typically:
MeshChat is running at http://127.0.0.1:8000
Open that URL in a Chromium-based browser (Firefox has some known issues with MeshChat's interface).
Step 3: Your Identity
When MeshChat starts for the first time, it generates a Reticulum identity for you. In the web interface, you'll see your LXMF address — a hex string like a4f8b2c9e1d73f6a0b5c2d8e4f1a9b7c. This is your address on the network.
Set your display name in the settings so other users can identify you.
Step 4: Announce Yourself
Before anyone can message you, the network needs to know you exist. Click the Announce button in MeshChat. This broadcasts your identity and public key to the network.
When other nodes receive your announce, they cache your public key and learn the path to reach you. Similarly, you'll start seeing other users' announces appear in MeshChat.
Step 5: Send a Message
To message someone, you need their LXMF address. You can:
- Wait for announces — other MeshChat, Sideband, and NomadNet users on the testnet will appear automatically as their announces propagate to you
- Enter an address manually — if someone gives you their LXMF address, you can start a conversation directly
Click on a discovered user or enter their address, type a message, and send. The message is encrypted end-to-end using keys exchanged via the Reticulum network. No server ever sees the plaintext.
Step 6: Explore the Network
MeshChat includes a Network Visualizer that shows you a graph of discovered nodes and the interfaces connecting them. This is a great way to understand the topology of the network you're connected to.
You can also browse NomadNet pages from MeshChat. If you see a node that hosts pages, you can navigate to it and view its content — these are decentralized websites hosted directly on Reticulum nodes.
Try connecting to one of the testnet nodes:
- Dublin Hub:
abb3ebcd03cb2388a838e70c001291f9 - Frankfurt Hub:
ea6a715f814bdc37e56f80c34da6ad51
Open the URL dialog and enter the node address to browse its pages.
How the Encryption Works
When you send a message through MeshChat, here's what happens:
- MeshChat looks up the recipient's public key (learned from their announce, or requested from the network)
- An ephemeral Elliptic Curve Diffie-Hellman key exchange on Curve25519 establishes a shared secret
- The message is encrypted with the derived key
- The encrypted packet is routed through the Reticulum network — transport nodes relay it but cannot read it
- Only the recipient's private key can decrypt the message
- A delivery receipt (cryptographically signed proof) is sent back to confirm delivery
No intermediate node, transport relay, or network operator can read your messages.
MeshChat vs. Other Clients
| Feature | MeshChat | Sideband | NomadNet |
|---|---|---|---|
| Interface | Web browser | Native GUI | Terminal (TUI) |
| Platform | Any (Python + browser) | Android, Linux, macOS | Linux, macOS |
| Messaging | Yes | Yes | Yes |
| Page browsing | Yes | Yes | Yes |
| Page hosting | No | No | Yes |
| File sharing | Yes | Yes | No |
| Network visualizer | Yes | No | No |
| Ease of setup | Easiest | Easy | Moderate |
All three are fully interoperable — a MeshChat user can message a Sideband user or browse a NomadNet-hosted page. They all speak LXMF over Reticulum.
Running MeshChat on a Raspberry Pi
MeshChat works great as an always-on node on a Raspberry Pi:
# Install on Raspberry Pi OS (64-bit recommended)
pip install reticulum-meshchat --break-system-packages
# Run as a background service
meshchat &
Then access the web UI from any device on your network by pointing your browser to http://<pi-ip-address>:8000.
Troubleshooting
No users appearing: - Make sure your Reticulum config has the testnet TCP interface enabled (see Part 2) - Click Announce to broadcast your presence - Wait a few minutes — announce propagation takes time, especially over slow links
Messages not delivering:
- The recipient must have announced recently enough for the network to have a valid path
- Check rnpath -t to see if you have a path to their destination
- On slow networks (LoRa), message delivery can take minutes
Browser issues: - Use a Chromium-based browser (Chrome, Brave, Edge). Firefox has known compatibility issues with some MeshChat features.
What's Next
MeshChat is great for getting started, but if you want messaging on your phone, the next guide covers Sideband — a native LXMF client for Android and desktop.
Previous: [Part 2 — Your First Reticulum Install] Next: [Part 4 — Sideband: Encrypted Messaging on Your Phone]
