MeshCore — best practices
To remember
Join the local groups
First of all, get in touch with the MeshCore groups for your city, your region or your country. They are the ones who will keep the network alive with you.
Settings
Use your community preset. In Europe and the UK, that is usually EU/UK (Narrow).
2-byte hops
In the app, set the path header to 2 bytes (32 hops). That avoids losing the message route and being unable to reply.
Need advice?
Ask for help in your country's channel, or if needed in Public, and for Meshloom users in the #Meshloom channel!
Useful firmware: 1.14+ for multi-byte hops, 1.17+ for CAD. Recent MeshCore app (1.41+ for hops, 1.49+ for the network menus described here).
Community
The most useful advice: get in touch with the MeshCore groups for your city, your region or your country. The radio preset, region names, channels and repeater placement are decided there. A lone node, even well configured, can hurt the mesh if it ignores local choices.
Radio
Every node on the same mesh must share the same frequency, bandwidth, spreading factor and coding rate. A different preset, and you hear nobody.
Pick the preset in Settings → Radio settings (or at flash time). In Europe and the UK the recommended preset is EU/UK (Narrow): 869.618 MHz, 62.5 kHz, SF8, CR8. Switzerland uses the same settings. Other countries have their own line in the app. Do not copy a foreign preset “because it looks better”.
Hardware must match the legal band: 868 MHz in Europe and the UK, 915 MHz in the United States, Canada, Australia and New Zealand. An 868 radio does not become legal in the US by changing a menu.
Presets listed by the official MeshCore app (checked October 2026; the app remains the source of truth):
| Area | Preset | Frequency | SF | BW | CR |
|---|---|---|---|---|---|
| EU / UK | EU/UK (Narrow) | 869.618 MHz | 8 | 62.5 kHz | 8 |
| Switzerland | Switzerland | 869.618 MHz | 8 | 62.5 kHz | 8 |
| Czechia | Czech Republic (Narrow) | 869.432 MHz | 7 | 62.5 kHz | 5 |
| Hungary | Hungary | 869.618 MHz | 7 | 62.5 kHz | 5 |
| Netherlands | Netherlands | 869.618 MHz | 7 | 62.5 kHz | 5 |
| Netherlands (Limburg) | Netherlands (Limburg) | 869.618 MHz | 8 | 62.5 kHz | 8 |
| Portugal 868 | Portugal 868 | 869.618 MHz | 7 | 62.5 kHz | 6 |
| Slovakia | Slovakia | 869.618 MHz | 7 | 62.5 kHz | 5 |
| USA | USA | 910.525 MHz | 7 | 62.5 kHz | 5 |
| Canada | Canada | 910.525 MHz | 7 | 62.5 kHz | 5 |
| Australia | Australia | 915.800 MHz | 10 | 250 kHz | 5 |
| Australia (Narrow) | Australia (Narrow) | 916.575 MHz | 7 | 62.5 kHz | 7 |
| New Zealand | New Zealand (Narrow) | 917.375 MHz | 7 | 62.5 kHz | 5 |
| Vietnam | Vietnam (Narrow) | 920.250 MHz | 8 | 62.5 kHz | 5 |
Some presets suggest wider hops: 2 bytes for Czechia, Hungary, Slovakia, Netherlands (Limburg) and New Zealand, 3 bytes for Canada. The app also lists presets that are not shown here (433 MHz, Brazil, Costa Rica, other Australian regions, New Zealand (Gisborne), Southern California). Entries marked “Deprecated” (EU/UK, Vietnam) are old settings that MeshCore has abandoned: only use them if your local mesh still does.
European 869.4–869.65 MHz sub-band: typically 500 mW ERP and a 10% duty cycle. With a gain antenna, lower TX power so you stay inside the limit. In the United States, FCC 15.247 is different: there is no European 10%. Check the local authority (Ofcom, ANFR, BNetzA, FCC, ACMA…).
2-byte hops
A packet path can encode repeater addresses in 1, 2 or 3 bytes. One byte is enough for old firmware, but identifier collisions are common: the message goes out and reaches its recipients, who then cannot reply. 2 bytes (65,536 identifiers, 32 hops at most) is the right trade-off. Repeaters older than 1.14 silently drop 2- and 3-byte packets: check that the repeaters around you are up to date before you switch.
On the companion: ⚙ Settings → Network settings → default header size 2 bytes.
Companion
Name the node in ⚙ Settings → Public information. The ISO country + subdivision prefix is used on every node, companions included: GBNWK-Sam, USWA-Alex.
In Network settings: header 2 bytes, default region = your country (gb, us, fr…). Add your community hashtag channels (often #gb, #emergency for emergencies only, #info, #meteo, #test, plus the local one). Then, channel by channel, set the region scope.
Checklist
- Join the MeshCore groups for your city, region or country.
- Same band and preset as the local mesh (EU/UK Narrow in Europe / UK, unless the community says otherwise).
- Firmware 1.17+ on every node.
- Header / hops at 2 bytes in the app.
I have a repeater
Hierarchical regions
Without a region, a neighbourly message can cross a whole country and saturate the mesh. A region is a tag on the packet. The repeater forwards it only if that tag is in its list.
Common convention: lowercase, a-z, 0-9, hyphens, 30 characters at most (firmware limit; a longer name is cut off).
| Continent | Country | Area | Local |
|---|---|---|---|
| eu | gb | gb-eng | gb-nwk |
| eu | fr | fr-pac | fr-06 |
| eu | nl | nl-nh | |
| us | us-fl | us-fl-cfl | |
| au | au-nsw | au-nsw-syd |
Exact names come from your community. Discover them in the app: open a channel → ⋮ → set region scope → discover regions.
Example chain on a repeater (adapt it):
region def eu gb gb-eng gb-nwk
region default gb
region home gb
region save
region def builds a parent → child chain and allows flood. region put child parent does the same piece by piece. region default is the scope this node puts on packets it originates. region home says where it sits. region save writes flash. A repeater that only has * is not a local filter: many communities refuse to rely on it.
On the companion, bind each channel to one region. A pattern, not a mandatory list:
| Channel | Typical region |
|---|---|
| Public | continent (eu, sometimes the country) |
#country (#gb, #nl) |
country |
| #emergency, #info, #meteo, #test | area |
| local channel (town, county) | local |
A #northwest message scoped gb-nwk stops at the first repeater that does not list gb-nwk. That is the point. Use full place names and hyphens so names stay unique (#kingston-upon-hull).
Repeater
Name it COUNTRY-SUB-City-District-free. The first four letters of the city are uppercase, the rest lowercase. The district is optional; the last segment is free (site, owner). Example: GBNWK-MANChester-Ancoats-Sam. The firmware keeps only the first 31 characters of a node name, so keep it short. Put it high, keep it powered, use a tuned antenna and a short feed. Add a public contact. Leave telemetry open to guests: no guest password. Sync the clock (clock sync from the companion).
Typical CLI, adapt it (duty cycle 10 is mainly Europe on 869.4–869.65 MHz; elsewhere follow local law). Some communities disable zero-hop adverts (set advert.interval 0):
set advert.interval 240
set flood.advert.interval 24
set flood.max.advert 6
set flood.max.unscoped 5
set multi.acks 1
set path.hash.mode 1
set loop.detect minimal
set dutycycle 10
set agc.reset.interval 4
set cad on
set repeat on
region def eu gb gb-xx gb-yy
region default gb
region home gb
region save
reboot
clock sync
| Command | Role |
|---|---|
advert.interval 240 |
Zero-hop advert every 4 hours, for nearby neighbours. |
flood.advert.interval 24 |
Network discovery once a day, without flooding the channel. |
flood.max.advert 6 |
Flood adverts do not travel too far. |
flood.max.unscoped 5 |
Messages with no region stay local. |
multi.acks 1 |
Extra acknowledgements, more reliable. |
path.hash.mode 1 |
Repeater adverts use 2 bytes. |
loop.detect minimal |
Drops loops (thresholds depend on 1, 2 or 3 bytes). |
dutycycle 10 |
10% cap (typical EU). 100 = no software limit. |
agc.reset.interval 4 |
Periodic AGC reset, useful in a noisy site. |
cad on |
Listen before transmit (firmware 1.17+). |
repeat on |
Forwarding enabled. |
Firmware 1.17+ is recommended for CAD + 2-byte hops + regions.
CAD
CAD (Channel Activity Detection): the radio listens before it transmits and waits if the channel is busy. On a 1.17+ repeater or room server:
set cad on
It is off by default.
On a very noisy site, CAD can delay a transmission by a few seconds. Talk to the community before you turn it off. On a companion, the current firmware always leaves CAD off and offers no setting for it: the useful step is set cad on on the repeater.
- Hierarchical regions listed one by one;
region save. - Quiet adverts, multi-ACK, legal duty cycle, correct clock,
repeat on. set path.hash.mode 1(1.14+) andset cad on(1.17+).- Name in the
COUNTRY-SUB-City…form (first four city letters uppercase), public contact, guest telemetry left open, decent antenna and power.
Sources
Adapted from the Alpes-Maritimes guide.
Commands: MeshCore CLI.
Hops: MeshCore FAQ.
EU radio: MeshCore Europe.
Presets: MeshCore radio presets.
CAD: 1.17.0 notes.
Project: meshcore.io.