MeshCore IDs & avoiding collisions
Guide · updated June 2026
Every MeshCore repeater is known on-air by the first byte(s) of its Public ID. What 1-, 2-, and 3-byte IDs mean, what talks to what, why IDs collide, and how to pick a clean one.
Will it still talk? Byte settings & compatibility
First, the question everyone asks: does your byte setting have to match the other node’s? Almost never — byte size is about ID detail, not whether a link exists. The real gate is firmware version. Two knobs people mix up:
- Companion (the sender) sets the hash size stamped on every message it originates (app → Settings → Experimental Settings, v1.41.0+).
- Repeater —
set path.hash.modeonly sizes its own adverts, not what it forwards.
Every repeater on firmware v1.14.0+ forwards all three sizes. Older ones forward only 1-byte and silently drop 2- and 3-byte packets — so a multi-byte message needs every repeater in its path on v1.14.0+.
| Message size (set by sender) | Path all v1.14.0+ | Any pre-1.14 in path |
|---|---|---|
| 1-byte (default) | ✓ Delivered | ✓ Delivered |
| 2-byte | ✓ Delivered | ✗ Dropped |
| 3-byte | ✓ Delivered | ✗ Dropped |
Two companions on different settings? Each message rides at the sender’s size — the receiver’s setting is irrelevant — so a 1-byte and a 3-byte companion can be one-sided where older repeaters remain:
| Sender | Rides as | Gets through? |
|---|---|---|
| 1-byte companion | 1-byte | ✓ Always — reaches everyone |
| 3-byte companion | 3-byte | Only if every repeater in the path is v1.14.0+ — otherwise ✗ dropped |
Why not 3-byte everywhere? Bigger hash = fewer hops: ~64 at 1-byte, ~32 at 2-byte, ~21 at 3-byte.
RF Lab convention: companions on 1-byte (reaches every repeater, most hops); repeaters on 3-byte (set path.hash.mode 2) for clean, collision-free map IDs. A repeater’s mode only touches its adverts, so it never blocks 1-byte traffic.
Public IDs, hops & byte modes
Every repeater has a unique Public ID (from its public key). To keep packets small, a repeater stamps only the prefix of that ID as it relays — that stamp is a hop, and the chain of hops is the packet’s path. How many bytes of prefix (1, 2, or 3) is the hop hash mode — the whole story behind collisions. A byte is two hex digits:
| Mode | Prefix | Unique IDs | Set with | Best for |
|---|---|---|---|---|
| 1-byte (default) | 2 hex — e.g. A1 | 254 (01–FE) | default | small, stable regions |
| 2-byte | 4 hex — e.g. A1B2 | 65,536 | set path.hash.mode 1 | growing regions |
| 3-byte | 6 hex — e.g. A1B2C3 | 16.7 million | set path.hash.mode 2 | large / dense regions |
More bytes = a sliver more airtime, far fewer clashes. Needs firmware v1.14.1+.
Collisions — and why they fix themselves
A collision is two different repeaters landing on the same hop ID. With only 254 one-byte IDs, a growing region will hit it — and then the network can’t tell which repeater actually carried a packet. That’s a data-integrity problem, not just cosmetic.
It mostly fixes itself: once both colliding repeaters go multi-byte, AB vs AB becomes AB12 vs AB9F — distinct again. MeshMapper re-evaluates as hop bytes update and restores the repeaters automatically. The one requirement: both must upgrade.
Pick a clean ID with MeshMapper
MeshMapper shows which IDs are taken: MeshMapper → Region Info → Repeater List → Repeater ID Usage — a grid of every first byte (00–FF), color-coded:
- Available — no repeater uses this ID
- Deployed — one or more non-conflicting repeaters
- Conflict — a 1-byte repeater clashes with multi-byte ones
- Reserved — firmware-reserved (
00andFF)
Click a cell to see who holds that ID and their byte modes; a 1-Byte / Multibyte tab switches address spaces.
-
Small, stable region? Grab a green cell
Pick an available (green) first byte that isn’t deployed — a 1-byte ID is fine.
-
Growing, or seeing red? Go multi-byte
Update to v1.14.1+, then on the repeater run
set path.hash.mode 1(2-byte) orset path.hash.mode 2(3-byte) and reboot. -
Re-check the grid
You should show as a clean, conflict-free entry; red collisions clear as the others upgrade too.
Running a repeater here?
Check your ID on MeshMapper, then compare notes with the operators in #meshcore.