From nothing to on the mesh, in an afternoon
You need one small radio and the phone you already own. No license, no exam, no account, and no recurring cost. Here's exactly what to buy and what to do with it.
Four steps, start to finish
01
Buy a companion
A WisMesh Tag is the safest first purchase. It's small, weatherproof, and it has a built-in antenna so you don't have to worry about that yet.
02
Flash MeshCore
Firmware goes on over USB from the browser-based MeshCore flasher↗. Ten minutes, no toolchain, no soldering. We'll walk you through it if it's your first time.
03
Install the app
MeshCore for iOS or Android. It generates your keypair on first launch and pairs to the board over Bluetooth.
04
Join a channel
Get on the regional channel, say hello, and see who hears you. Then dial in the settings below so your node plays well with the rest of the mesh.
Prices and board availability change constantly. Ask in the group before ordering, we keep track of what's currently in stock and what's worth avoiding.
Which board should you buy?
All of these run MeshCore. The difference is what job you want the node to do, so the board guide is split the same way.
Companions
6 boardsThe radio you carry. It pairs with your phone over Bluetooth, and it's the one you send and read messages through. If it has a good external antenna, it can also act as a mobile repeater for areas without coverage to keep your team connected.
Compare companions→Repeaters
8 boardsThe radio you leave somewhere high. It runs unattended and passes everyone else's messages along, which is where the mesh gets its range.
Compare repeaters→Antennas, mounts, and power
Once the board works on a desk, everything that determines whether it is useful is outside the board. Where you put the antenna, how high it goes, and whether the power source survives a week of clouds.
For a handheld or vehicle node
A decent whip antenna and a USB power bank is genuinely all you need. In a truck, a mag-mount on the roof makes a large difference over an antenna inside the cab.
For a repeater
A weatherproof enclosure, a small solar panel with a lithium pack sized for several cloudy days, and a mount that gets the antenna as high as you can safely reach. Use proper coax, keep the run short, and seal every connector.
Run the site through the explorer first. Terrain decides this, not hardware, and it is much cheaper to learn that from a terrain profile than from a ladder.
Replace the stock antenna first
The little rubber antenna in the box is the weakest part of any kit. A decent 915 MHz whip is the cheapest range upgrade you will ever buy.
Height beats gain
A modest antenna twenty feet up outperforms an expensive one at head height. Spend your effort on the mount before the hardware.
Never transmit without one
Powering a LoRa board with no antenna attached can damage the radio. Connect the antenna before you plug in USB, every time.
Dial in your companion
The defaults will get you on the air, but not all of them are good defaults. These four are ordered by what it costs you to skip them: the pairing PIN first, because a weak one hands your node to anyone standing nearby, then a privacy decision only you can make, then two that shape how well you sit on the mesh and how long the battery lasts.
- 01Boards without a screen
- Where
- Settings → Other Settings → Bluetooth Settings
- Set to
- Custom, with a PIN of your own
A companion with a screen invents a random PIN every time you pair and shows it on the display, so there is nothing for you to do. A companion without a screen has nowhere to show one, so it falls back to a fixed default instead: 123456. That default is not a secret, it is the same on every screenless board and it is written down in public, so anyone within Bluetooth range can pair with your node and take over the app side of it. Change it before you take the device out of the house. In the app, open Settings, scroll down to Other Settings, then open Bluetooth. Switch Bluetooth Pin Type to Custom and enter six digits of your own underneath. The app validates what you type, it has to land between 100,000 and 999,999, so it is always a full six digits and can never lead with a zero, something like 012345 is rejected. Tap the check mark to save. Then write the PIN down somewhere you will not lose it, because recovering a forgotten one is not a reset button, it means reflashing the device over USB.

Set Pin Type to Custom, enter six digits, then tap the check mark. - 03
- Where
- Settings → Network Settings
- Set to
- 2-byte (max 32 hops)
The consensus by many in the community at large is that large scale networks should run with this setting, so matching it keeps your messages moving in right direction with places with a lot of repeaters. For this setting it's important to consider the network as a whole; if your companion disagrees with everyone else, your traffic is the traffic that suffers and can affect the overall network performance. As height is important for range, it also means adverts cover more distance so they can reach a wider area than intended affecting neighboring networks. For the reasoning behind 2-byte, see NoDak Mesh's explainer on MeshCore path hash modes↗.

- 04
- Where
- Settings → Other Settings → Position Settings
- Set to
- Disabled
If your board has its own GPS receiver, it draws power the entire time it is powered on. Turning it off and letting the app supply your phone's location instead buys you meaningfully more runtime between charges, and your phone's GPS is usually the better receiver anyway. Skip this step if your board has no GPS; many of the cheaper ones do not.

Scroll to Other Settings and open Position Settings. 
Set GPS Mode to Disabled.
Set up a repeater
A repeater is tuned for different things than a companion. Start by putting it on the network's frequency and giving it an identity of its own, every other repeater step builds on those two.
- 01
- Where
- Command Line → set radio
- Set to
- 910.525 MHz · 62.5 kHz · SF7 · CR 5 or 8
The network runs on the default USA configuration. A repeater only hears nodes on the same frequency, bandwidth, and spreading factor, so those three have to match exactly or it sits on the mast relaying nothing.
- Frequency
- 910.525 MHz
- Bandwidth
- 62.5 kHz
- Spreading Factor
- 7
- Coding Rate
- 5 or 8
Choosing a coding rate
The coding rate sets how much error correction goes out with each packet. Use 5 where there is little interference: less correction means shorter, faster transmissions. Use 8 where there is more interference: the extra correction lets packets survive errors that would otherwise lose them, at the cost of slower transmissions.
Do this on the bench before the repeater goes up. Over USB you can always reach it, whatever it is currently set to.
- Connect the repeater to the computer with a USB cable.
- Open the MeshCore Flasher Console↗ and connect to the repeater through its serial port.
- Enter the command, ending in the coding rate you chose,
5or8:set radio 910.525,62.5,7,5 - The repeater replies
OKif it took. Radio settings only apply after a restart:reboot
The same command works from the Command Line tab in Repeater Admin, but only if your phone can already reach the repeater, which means it is already on the network's frequency. Changing it remotely is mainly for switching the coding rate. Get the numbers right before you send
reboot: a repeater restarted onto the wrong frequency can only be recovered over USB. - 02
- Where
- Prefix tool → mc-keygen → set prv.key
- Set to
- An unused 2-byte prefix
A repeater is identified on the mesh by its public key, and the first two bytes of that key act as its short prefix. Two nodes sharing a prefix are ambiguous to everything around them, so pick one nobody else on the network is already using before you generate the key.
First, claim a prefix
The analyzer has a prefix tool that will generate an unused 2-byte prefix for you, or tell you whether one you already have in mind is free.
Then, generate the key, and back it up
Generate the public/private pair with mc-keygen↗, matching the prefix you just claimed. Store the private key somewhere secure before you go any further. It is what lets you restore the same identity if the repeater ever has to be replaced, and it is not recoverable from the device afterwards.
Finally, write the key to the repeater
Two routes. Use the first if the repeater is already mounted and you would rather not take it down; use the second if you have it on the bench.
Remotely, from your phone
- Generate the key at gessaman.com/mc-keygen↗ on the phone itself, so you never have to retype it.
- In the MeshCore app, log in to the repeater with its admin password.
- Open the Command Line tab at the bottom of the screen.
- Enter the command, substituting your generated key, and press enter:
set prv.key <private key> - The repeater replies
OKif it took. Then restart it:reboot
From a PC, over USB
- Generate the key at gessaman.com/mc-keygen↗ in another tab, so you can paste it straight into the console.
- Connect the repeater to the computer with a USB cable.
- Open the MeshCore Flasher Console↗ and connect to the repeater through its serial port.
- Enter the same command, substituting your generated key:
set prv.key <private key> - Again it replies
OKon success. Restart it to finish:reboot
- 03
- Where
- Repeater Admin → Settings → Network Settings
- Set to
- 2-byte (max 32 hops)
Same setting your companion needs, same reason: the community at large suggests that a network runs on 2-byte path hashes, and a repeater that disagrees makes routing worse for everything downstream of it. Unlike the companion, this one is changed through the repeater's admin screens rather than your own settings. For the reasoning behind 2-byte, see NoDak Mesh's explainer on MeshCore path hash modes↗.
- In the MeshCore app, open the repeater from your contact list and log in to Repeater Admin with its admin password.
- Tap the Settings tab along the bottom, then scroll down to Network Settings.
- To see what the repeater currently has stored, tap the refresh icon beside the check mark on Path Hash Size. Values are not fetched automatically, the app asks you to request them so it is not spending mesh airtime on settings you did not ask to see.
- Select 2-byte (max 32 hops) and tap the check mark to save it.
- Scroll to the bottom of the Settings tab and tap the reboot button. The change does not take effect until the repeater restarts, and there is no need to drop to the command line for it here.

On the Settings tab, scroll to Network Settings. 
Refresh to read the current value, pick 2-byte, then tap the check mark. - 04
- Where
- Repeater Admin → Settings → Advert Intervals
- Set to
- Zero hop 240 min · Flood 23 h
A repeater announces itself with adverts so the rest of the mesh knows it is there. Zero-hop adverts reach only its direct neighbours; flood adverts travel outward across the network. Both run on timers, and the numbers below are what established repeaters on this network use.
- Open the repeater from your Contact List and enter Repeater Admin. Resume the previous admin session if it is still open, or enter the admin password again to start a new one.
- Tap Settings at the lower right, then scroll down to Advert Intervals.
- Tap the refresh icon on both Auto Advert (Zero Hop) and Auto Advert (Flood) to pull the values the repeater currently has stored. Neither is fetched until you ask for it.
- Set the two intervals, then tap the check mark on each to save. Mind the units, one field is in minutes and the other is in hours:
- Auto Advert (Zero Hop)
- 240 minutes
- Auto Advert (Flood)
- 23 hours
Unlike the Path Hash Size in step 03, these intervals take effect the moment you save them, no reboot required.
If this is a brand new repeater
Those intervals are tuned for repeaters the network already knows about. A node nobody has heard from yet should not wait up to 23 hours to introduce itself, tap Advert on the settings screen, just above Advert Intervals, a few times over the next ten minutes to announce it.

Advert Intervals sits just below Advert on the Settings tab. 
Refresh each value, set 240 and 23, then tap the check marks. - 05
- Where
- Repeater Admin → Command Line → multi.acks
- Set to
- 1 (on)
This enables MeshCore's double-ACK feature, so the acknowledgement that confirms a message was delivered goes out a second time. A single acknowledgement lost on a busy or marginal link is enough to make a delivered message look like it failed; sending it twice gives it a second chance to get through.
- Open the repeater from your Contact List and log in to Repeater Admin with its admin password, or resume the session if it is still open.
- Open the Command Line tab at the bottom of the screen.
- Enter the command and press enter:
set multi.acks 1 - The repeater replies
OKif it took.
With the repeater on the bench instead, the same command works over USB from the MeshCore Flasher Console↗, as in step 02.
- 06
- Where
- Repeater Admin → Command Line → agc.reset.interval
- Set to
- 4 seconds
The radio's automatic gain control adjusts how sensitive the receiver is. After a strong nearby signal it can settle on a low gain and stay there, leaving the repeater deaf to the weaker, distant packets it most needs to hear. Resetting it on a timer stops that from lasting. The value is in seconds, so
4resets it every four seconds;0turns the reset off.- On the same Command Line tab as step 05, enter the command and press enter:
set agc.reset.interval 4 - The repeater replies
OKif it took.
Stuck? That's what we're for.
Nobody's first flash goes smoothly. Bring the board to a meetup or post what you're seeing, somebody in the group has hit the exact same error and can save you an evening.
