Canonical, community-editable catalog of MeshCore channels, organized by country.
A JSON catalog of named MeshCore channels grouped under country roots. Each
country file lists its channels as
{ "channel": "#name", "description": "Display Label" }. The catalog is the
channel-level companion to
meshcore-regions.
Stable raw URLs:
-
Channels grouped by country:
https://raw.githubusercontent.com/marcelverdult/meshcore-channels/main/channels-by-country.json -
De-duplicated flat list (one entry per unique
channel):https://raw.githubusercontent.com/marcelverdult/meshcore-channels/main/channels-unique.json -
One country at a time:
https://raw.githubusercontent.com/marcelverdult/meshcore-channels/main/channels/<code>.json -
channels-by-country.json—{ "generated_at": "...", "license": "CC0-1.0", "countries": { ... } }.countriesis an object keyed by countrycode(all 252 roots present); each value is that country's channel array of{ channel, description }, pluskeyfor non-hashtag channels, sorted bychannel. -
channels-unique.json—{ "generated_at": "...", "license": "CC0-1.0", "channels": [ ... ] }. One entry per uniquechannel,{ channel, description }pluskeyfor non-hashtag channels, sorted bychannel. When a channel appears under several countries the first (countries incodeorder) wins.
A record's channel value decides whether it carries a key:
- Hashtag channels —
channelstarts with#(e.g.#hansemesh). The key is not stored in this catalog; a consuming app derives it from the channel name. Akeyon a hashtag channel is stripped automatically when a PR merges tomain. - Non-hashtag channels —
channelhas no#(e.g.public). The key cannot be derived, so the country file must carry an explicitkey: base64 of a 16-byte channel key.
The build does not generate keys — it passes through whatever the source
files contain. A hashtag-channel record only needs channel + description.
Pull requests may only modify files matching channels/*.json.
Rules enforced automatically by CI:
- No new country roots. The 252 roots (250 ISO 3166-1 alpha-2 codes plus
scoandioi) are already seeded; if you need another root, open an issue. - No deletions. Once a channel is catalogued under a country it stays.
- A channel may appear under several countries. Adding
#botsto another country is a normal addition, not a move. - Adding channels and editing names or keys is free — no label required.
- Lowercase only. A
channelvalue contains only lowercase letters, digits, and hyphens. Uppercase is rejected by CI. - A
channelvalue is an optional leading#, then hyphen-separated[a-z0-9]segments, each segment capped at 29 characters to fit the MeshCore firmware name buffer. A#channel is a hashtag channel (keymay be omitted); a channel with no#must carry an explicitkey. - Channels within a country file are sorted by
channel.
The generated lists (channels-by-country.json, channels-unique.json),
scripts, schemas, workflows, and this README are maintained by repository
maintainers and the build automation.
- Last build:
2026-05-24T22:29:02Z - Roots: 252
- Channels: 848
- Unique channels: 762
CC0 1.0 Universal — this catalog is dedicated to the public domain. Use it for anything, no attribution required.