MeshCore ‒ Part 1
This is the first part of the guide. The second part is about repeaters and other more advanced setups.
From Wikipedia:
MeshCore is an open-source mesh networking protocol and software platform designed for off-grid, low-power text communication using LoRa (Long Range) radio technology. The system enables decentralized, multi-hop wireless messaging without reliance on cellular networks or internet infrastructure.
Use cases include emergency and disaster communications, outdoor and remote activities, [...] and experimental and educational deployments of low-power mesh networking.
[It] is designed to [...] operate in unlicensed ISM frequency bands such as 868 MHz and 915 MHz, depending on regional regulations.
The idea is that each person has a small companion device C paired to their cellphone via Bluetooth, and via that device, they can text each other or post public messages using the 915 MHz band, all without a special license. The signal can travel directly between companion devices if they are close enough, or via a series of repeaters R to extend coverage.
Each person who wants to send messages needs their own companion device.
Use a Chromium-based web browser like Brave.
On Linux, you may have to add the “dialout” group to your user. To do that, type the following in the terminal replacing “USER” with your username and reboot your computer:
sudo usermod -a -G dialout USER
If you already have MeshCore installed, back up your current settings:
Extra Tools” section and select “Export Config”
Select All” and click the check mark in the top right corner to save the “.json” file to your phone.
Flash the MeshCore Firmware:
To reload your previous config file (required only if you lost your configuration for some reason).
123456”.
Extra Tools” section and select “Import Config”.
Select File”.
*.json” file.
Select All” and click the check mark in the top right corner.
Connect” button in the top right corner.
MeshCore-XXXX” device that matches the name shown on your MeshCore device’s screen.
123456”.
If you’re having trouble pairing with Bluetooth, try rebooting your phone.
You should now rename and set a location for your MeshCore node. These settings will be seen by other users on the MeshCore network (and online!) and can be changed anytime.
Share Position in Advert”
The device name in Bluetooth will not update until you reboot your node.
MeshCore can be used all over the world. Different countries have different regulations on which radio frequencies can be used for public, license-free communication. To ensure your node is operating legally, please make sure to select radio settings that are compliant in your country.
The MeshCore app provides a list of radio presets that have been suggested by the community for use in specific countries/regions, but in the SWBC region, we use different settings (see here for more details):
Canada”. After you save, this will change to “Custom”.
909.000”
The max transmit power depends on the device.
The Path Hash Size is a chunk of data that is sent with your messages to identify who you are on the mesh (kind of like your node's address). It is the first 1, 2, or 3 bytes of your public key.
There's a trade-off between how many hops a message can go and how many unique addresses each hash size can have. When two nodes have the same path hash, messages can be routed to the wrong place.
| Path Hash Size | Number of unique addresses | Max Hops | Recommended for |
|---|---|---|---|
| 1-byte | 256 (162) | 64 | Avoid |
| 2-byte | 65536 (164) | 32 | Companions |
| 3-byte | 16 million (166) | 21 | Repeaters |
This page shows nodes with duplicate addresses, which can be fixed by increasing the path hash size.
Default Path Hash Size” and select “2-byte” for companions, or “3-byte” for repeaters.
By default, the app can change your location based on your GPS coordinate. Since we've already set an approximate location earlier, we'll want to disable this option. It can be temporarily enabled if you're going somewhere you'd like others to be able to track you (for example).
Disabled”
The last thing we'll do before exiting the settings is to back up all our configs:
Export Config”
Select All”
Finally, let's tap the ✔ icon in the top right corner one last time to save the settings before exiting.
Unlike SMS, you can only send a private message to someone if you are both in each other's contact list.
In this section, we'll see four different ways of sharing contact information.
Four ways to share contact information:
An advert is an unencrypted packet transmitted by your MeshCore node. It includes your node name, location and type, public identity key and a cryptographic signature to prevent anyone from tampering with the information as it’s sent across the mesh.
You can send two types of adverts:
Zero Hop:
Flood Routed:
There was a deliberate decision made to prevent auto advert for companions (but not for repeaters). As such, you should flood advert at least once a week so that new users can find and add you to their contact list.
The easiest way to add nodes that are in your neighbourhood to your contact list is to use the map feature. However, there are three different kinds of maps in MeshCore:
3) The “Internet Map” shows a map of all the nodes heard by “observers” that are shared to the Internet.
To populate your contact list, use the map under “Discover Contacts”. You might have to leave your node on for a bit for it to hear all the nodes in your area since they need to advert or transmit for your node to see them:
Discover Contacts” → “Map View”
Show Added Contacts”
The map will only show users that have not been added yet. To add them:
Add”
If you go back to the main page's “Map” (1), you should now see that contact.
The maps only show nodes that have shared their Position in Advert. Nodes that have not shared their location will still show in the list, but you won't be able to tell where they are located. That's why it's important to share your approximate location: so others in your neighbourhood can add you to their contact list.
The fastest way to share your contact information with someone next to you is to use QR Codes. However, don't text or email these out; for that, there's a better way...
To share your contact details privately via QR Code:
My Contact Code” menu item.
The QR Code contains your Node Name, Node Type and Public Identity Key. Your contact details will not be transmitted over the mesh. Only the person who scans your QR Code will receive your contact details.
To add a contact via QR Code:
Add Contact” menu item.
Scan QR Code” button (if requested, grant access to the device’s camera).
You may need to accept a permissions request for the MeshCore app to access your camera. This permission must be granted to be able to scan the QR Code.
The easiest way to share your contacts via email or SMS is to use a contact link.
We haven't discussed Channels yet, so feel free to come back to this section later.
This section is optional. It'll help you understand how channels and private messages work, but it won't show you how to do anything new. Feel free to skip it.
There are basically two different strategies for encrypting a message:
Symmetric-key cryptography is a system where the key to encrypt and decrypt a message is the same.
For example, if I generate a long random list of numbers between 1 and 26, I could use that to encrypt a message, and you could use the same list to decrypt it. Let's encrypt the word “hello” by shifting each letter by (1, 9, 2, 7, 3). The result is “innsr”. You can then shift them back using the key to recover “hello”.
This can be very secure if the key is random, is as long as the message itself, and is never reused for other messages. A big practical problem is that I have to somehow give you a copy of the key without it getting intercepted. If I can do that, I might as well give you the unencrypted message.
Public-key cryptography bypasses the problem of sharing the key securely.
You start with a large random number and use that to generate a pair of keys that are “inverses” of each other in some sense. That way, a message encrypted with one key can only be decrypted with its pair. This is based on the idea that a lot of processes in math are not easily reversible, so deducing one key from its pair is almost impossible.
Once you have this pair of keys, you keep one secret, and you publish the other one. That's right, you share one of your keys with everyone! Here are two things that you can now do:
MeshCore uses Public Key Cryptography to:
To send a direct, private message to someone, you both need to be in each other's contact lists.
Contacts” screen, tap on a contact.
When you send a direct message to someone, it’s possible that it may not go through after several automatic attempts. This can happen for many different reasons, such as:
To try sending the failed message again:
Retry Sending” button shown in the message actions pop-up.
Channels are “places” for people to share messages with groups of people. It's not possible to know who did and did not receive messages posted in channels. There is also no “storing” capability, so if someone's node is out of reach, they will miss these messages.
There are three types of channels:
| The Public channel | has a known public/private key pair so every device can send messages to and read messages from that channel. |
|---|---|
| Hashtag channels | can be created and joined by anyone. The public/private key pair is derived from the hashtag name so anyone who knows the hashtag can join. These are public channels based on different topics or regions. |
| Private channels | have randomly generated keys. So only those who know the private key can join the channel. Messages there are private insofar as the private key is not distributed outside the intended circle. |
By default, messages sent to the “Public” channel can be seen by anyone on the MeshCore network. They are repeated across the mesh by all repeaters that hear them. Other mesh nodes in range of you or a repeater that rebroadcast the message should receive it.
To send a message:
Public” channel.
To join the “Public” channel if it's not there:
Add Channel”
Join the Public Channel”
Public” and tap “Join Channel”
Hashtag channels are public channels based on topics or regions. Here are a few channels used in the South West region of BC:
#bc | Public channel for BC |
|---|---|
#salishmesh | Public channel for the Salish area |
#ssi | Public channel for Salt-Spring Island |
#news | News-related items |
#drivebc | A bot that posts Drive BC notifications |
#kod-bot | A bot maintained by VE7KOD for testing. Common commands: test (or t), Path (or p). Full list here. |
To join an existing hashtag channel, or create a new one:
Add Channel”
Join a Hashtag Channel”
# symbol and tap “Join Channel”
Private channels create their key pairs randomly and independently of the channel name. As such, a private channel can be renamed without affecting its “identity”. Here are a list of some private channels used in the South West region of BC.
Sunshine Coast | Private channel for the Sunshine Coast |
|---|---|
VanIsle | Private channel for Vancouver Island |
There may be more that we are not aware of, and we will not list the private keys for these channels here.
To join an existing private channel:
Add Channel”
Join a Private Channel”
Join Channel”
To create a new private channel:
Add Channel”
Create a Private Channel”
Each channel can be configured with one of three different notification levels:
| All Messages | A notification will show for all received messages. |
|---|---|
| Mentions Only | A notification will show if someone mentions you. |
| None | Notifications will not be shown. |
To change a channel's default notification settings:
Notifications”
There are two ways to mention someone in a channel:
Reply”
or
@[TheirMeshCoreName]” somewhere in the message (it doesn't have to be at the beginning).
To check the signal strength to and from a nearby repeater, you can run a ping test:
Ping (Zero Hop)” menu item.
Ping tests do not hop through multiple repeaters. You must be in range of the specific repeater you are ping testing. For a ping test to be successful, the repeater must hear your companion signal directly, and your companion must hear the repeater signal directly. If you’re not in range of the repeater, the ping test will fail with a timeout error.
| https://app.meshcore.nz | The browser version of the MeshCore app |
| https://map.meshcore.io | Official MeshCore Node map |
| https://swbc.meshmapper.net | Community-generated map |
| https://ridgeline.ve7kod.ca | MeshCore Observatory by VE7KOD |
| https://analyzer.letsmesh.net | MeshCore Analyser |
| https://heywhatsthat.com | Path Profiler |
| https://meshcore.io | Official MeshCore website |
| https://github.com/meshcore-dev/MeshCore | Official MeshCore Github |
| https://youtu.be/OwmkVkZQTf4 | Youtube Presentation by Liam Cottle |
| https://scottbaker.ca/meshcore | Scott Baker's website |
| https://ve7lee.tedlee.ca/mesh.html | VE7LEE's MeshCore website |
| https://salishmesh.net | Salish Mesh Website |
| https://www.austinmesh.org/learn/meshcore-vs-meshtastic | MeshCore vs Meshtastic |
| https://idahomesh.org/meshcore-channels-rooms-and-dms | Channels vs Rooms vs DMs |
| https://discord.gg/vHUqyBSTPe | Vancouver Island Amateur Radio Discord Server |
– Patrick, VA7FI 2026/10/25 20:34
This document is licensed under CC BY-SA 4.0 International. The original can be found at https://scarcs/links/meshcore/home
A big part of this document used Liam Cottle's MeshCore Quick Start Guide from November 2025 (CC-BY-SA) as a starting point. We then updated and expanded his guide with regional settings used on the South West Coast of BC.