MeshCore — best practices

To remember

  1. 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.

  2. Settings

    Use your community preset. In Europe and the UK, that is usually EU/UK (Narrow).

  3. 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.

  4. 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

  1. Join the MeshCore groups for your city, region or country.
  2. Same band and preset as the local mesh (EU/UK Narrow in Europe / UK, unless the community says otherwise).
  3. Firmware 1.17+ on every node.
  4. 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.

  1. Hierarchical regions listed one by one; region save.
  2. Quiet adverts, multi-ACK, legal duty cycle, correct clock, repeat on.
  3. set path.hash.mode 1 (1.14+) and set cad on (1.17+).
  4. 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.