meshcore-regions
August 8, 2026 · View on GitHub
Canonical, community-editable catalog of MeshCore regions used worldwide.
What this is
A simple JSON catalog of region identifiers used across the MeshCore ecosystem. Each region has a stable code (e.g. de-hh-attraktor or hansemesh), a human-readable name (the leaf label, e.g. Attraktor), and optional nested children. A region's code never changes once published, even if it gets re-nested under a different parent.
How to consume
Two stable raw URLs:
- Full catalog (tree + flat lookup):
https://raw.githubusercontent.com/marcelverdult/meshcore-regions/main/index.json - One country at a time:
https://raw.githubusercontent.com/marcelverdult/meshcore-regions/main/regions/<code>.json
Each region node has this shape:
{
"code": "de-hh-attraktor",
"name": "Attraktor",
"regions": [ /* same shape, optional */ ]
}
code is stable and unique across the catalog. It usually mirrors the path from the root (e.g. de-hh-attraktor), but named networks that span multiple parents may keep a standalone code (e.g. hansemesh nested under de). The flat array in index.json lists every node as { "path": "<code>", "name": "<name>" } for quick lookups; path equals the node's code.
How to contribute
Pull requests may only modify files matching:
regions/*.jsonunsorted/todo.json
Anything else (scripts, workflows, schemas, index.json, README.md) is maintained by repository maintainers via direct commits.
Rules enforced automatically by CI:
- No new country root files. PRs may not add files to
regions/. The 249 ISO country codes plusscoandioiare already seeded; if you need another root, open an issue. - No deletions in
regions/. Once a region is in the tree, it stays. - Moves require approval. If your PR moves a node from one parent to another, a maintainer adds the
approved-movelabel before merge. - Subdivision additions and name edits are free. Add subdivisions under existing parents, fix a display name — no label needed.
- Codes are lowercase ASCII letters, digits, and hyphens. Each hyphen-separated segment is capped at 29 characters to match the MeshCore firmware region-name buffer (
char name[31]inRegionMap.h, minus one byte reserved for the implicit#prefix the firmware prepends when deriving auto-hashtag transport keys; see meshcore-dev/MeshCore#2434). A region'scodeis immutable — once published, it does not change, even if the node is re-nested under a different parent. - Children of any node are sorted by
code.
How sync works
The catalog refreshes every night from the public MeshCore map at http://map.kiekr.app. Two ways to add a new region:
- Pin your repeater on the map with the KiekR App for Android or iOS (https://kiekr.app); your region appears here on the next sync.
- Open a pull request against this repository.
Last updates
- Last sync:
2026-08-08T04:06:34Z - Roots: 252
- Total nodes: 1629
- Unsorted entries: 920
| when (UTC) | kind | path | note |
|---|---|---|---|
| 2026-08-07T16:57:59Z | manual | fc38f64 | Merge pull request #66 from marcelverdult/add/community-region-sync-2026-08-07 |
| 2026-08-07T16:55:44Z | sync | 6d399a3 | feat: add 253 region codes from community site survey |
| 2026-08-07T04:49:57Z | sync | 6cb5b3e | Merge pull request #65 from marcelverdult/sync/auto |
| 2026-08-07T04:49:50Z | sync | 92c90f6 | sync: 1 added, 57 resolved, 665 unsorted |
| 2026-08-06T12:11:44Z | manual | 38d5394 | Merge pull request #64 from marcelverdult/sync/auto |
| 2026-08-06T05:40:54Z | sync | 7a005e0 | sync: 7 added, 57 resolved, 664 unsorted |
| 2026-08-05T05:39:30Z | sync | 69c14fd | Merge pull request #63 from marcelverdult/sync/auto |
| 2026-08-05T05:39:24Z | sync | e91efe5 | sync: 4 added, 57 resolved, 662 unsorted |
| 2026-08-04T05:41:16Z | sync | 799aba3 | Merge pull request #62 from marcelverdult/sync/auto |
| 2026-08-04T05:41:11Z | sync | cdf94ca | sync: 5 added, 57 resolved, 657 unsorted |
| 2026-08-03T16:22:32Z | manual | c3aa965 | Merge pull request #53 from marcelverdult/add-de-bsmesh-rheinmain-trier |
| 2026-08-03T16:22:11Z | manual | f20dc24 | Merge pull request #61 from marcelverdult/sync/auto |
| 2026-08-03T06:13:01Z | sync | 5e4b8e7 | sync: 7 added, 54 resolved, 646 unsorted |
| 2026-08-02T05:49:09Z | sync | a17c381 | Merge pull request #60 from marcelverdult/sync/auto |
| 2026-08-02T05:48:50Z | sync | 5ff523c | sync: 1 added, 54 resolved, 646 unsorted |
| 2026-08-01T05:48:18Z | sync | 54c62f3 | Merge pull request #59 from marcelverdult/sync/auto |
| 2026-08-01T05:48:13Z | sync | a0767d9 | sync: 5 added, 54 resolved, 645 unsorted |
| 2026-07-31T05:59:10Z | sync | f4e28de | Merge pull request #58 from marcelverdult/sync/auto |
| 2026-07-31T05:58:53Z | sync | 004daf7 | sync: 21 added, 54 resolved, 642 unsorted |
| 2026-07-30T05:33:02Z | sync | 0a36631 | Merge pull request #57 from marcelverdult/sync/auto |
License
CC0 1.0 Universal — public-domain dedication. This catalog is released with no rights reserved: copy, modify, redistribute, and embed it (including in firmware) for any purpose, with no attribution required.