Skip to main content

MeshTender's key

MeshTender server public key
a5ed2cccad241b25fb5f78213494a84ab6246dc9560f027c71f6cd377b5d78df

MeshTender is a home for a MeshCore mesh: an organization's members, repeaters, recommended configuration and weekly check-in nets, in one place. What you need depends on what you do:

  • Members need only the companion app they already use: register their companion and check in to nets.
  • Repeater owners can set up a new repeater over USB to their organization's spec, document it, and share it, with no extra hardware.
  • Admins, stewards and net control can add a KISS modem to manage repeaters and run nets over the air.

For members

Organizations

An organization is a community that runs a mesh together: its members, their repeaters, its recommended configuration, and its check-in nets. Join yours from the directory, or start one.

Its admins publish a recommended configuration: configuration profiles (the settings a repeater should run) and regions drawn on a map, so each member sees the exact commands for where their repeater stands. A new repeater set up over USB gets them automatically.

An organization can also set the radio settings its mesh runs on (frequency, bandwidth, spreading factor and coding rate). Its profiles can use them instead of hard-coding values — set radio {{ radio.freq }},{{ radio.bw }},{{ radio.sf }},{{ radio.cr }} — and a repeater set up with a profile that doesn't set its radio gets them too.

Companions & check-ins

A companion is the MeshCore radio you carry and use with the companion app — all a member needs to take part in nets. Register yours under Companions with its public key (the app shows it), then send a flood advert from it within 24 hours. When an organization's observer (or net control's modem) hears that advert, the companion is confirmed; a registration that's never heard expires. You can also show a companion on your public profile, with a QR code that adds it as a contact; that's off unless you turn it on.

From then on, every advert your companion sends is a check-in: MeshTender checks the advert's signature, so nobody else can check in as you, and records when it was heard, how many observers heard it, and how many repeaters were seen passing it on. It deliberately doesn't keep which repeaters those were — that would show roughly where you are — so your check-ins look the same to you and to the members of your organizations.

An advert carries the time on your companion's clock, and one more than ten minutes off doesn't count (that's what stops an old advert from being replayed). The app sets the clock from your phone; if the companion's page says an advert was too far off, sync the clock and advert again. A zero-hop advert counts too, but only reaches observers in direct range, so the roster marks it.

Check-in nets

A net is a weekly window for members to check in, like a ham radio net. Admins schedule one in Settings › Nets with a day, start time, length and time zone; it keeps its local start time across daylight-saving changes.

During the window, a member checks in by sending a flood advert from any of their companions. Each session's log shows who checked in and when, how widely each advert was heard, and the channel news.

Net control runs the net: the organization's admins, plus any members designated in the net's settings. A net either counts every heard advert as acknowledged, or waits for net control to acknowledge each one — usually after replying on the air. Net control can also add a check-in by hand, with a note, for someone MeshTender didn't hear.

For repeater owners

Adding a repeater

There are two ways in, matching how you reach the repeater:

  • Set up a brand-new repeater (USB) — connect a freshly-flashed repeater over USB serial and MeshTender runs the whole setup for you from your organization's configuration profile: identity, radio, region, name, and the admin grant. You need only the repeater and a USB cable — no modem, not even a companion.
  • Add one that's already on the network (over the air) — for a repeater you've already configured, MeshTender reaches it over the air through a KISS modem attached to your browser. You grant MeshTender admin with the setperm command yourself first, then register it here.

A registered repeater shows as confirmed once MeshTender has actually reached it. There's nothing to click for that: open the repeater's Configure tab and connect through your KISS modem, and the signed login that opens every session doubles as the proof — it confirms the repeater the first time it replies. If the reply reports guest access, the setperm grant hasn't been applied yet; run it, then connect again.

Either way, the device must already be running MeshCore's Repeater firmware — MeshTender configures repeaters, it doesn't flash them. A MeshCore device runs one firmware at a time (Repeater, a Companion variant, or KISS modem), so switching roles means re-flashing.

Granting MeshTender admin (setperm)

MeshTender signs in to a repeater as its server identity — one fixed public key. Until a repeater grants that key admin (permission level 3), MeshTender only has guest access — open to anyone with a blank password — and can't administer the repeater.

Run this on your repeater — through the repeater console in the MeshCore companion app, directly over USB serial, or let MeshTender run it for you during USB setup:

The long value is MeshTender's public key — not your repeater's. If you see a guest-access warning when the console connects, this is the fix: run the command above, then connect again.

Sharing & stewards

You can share a repeater with other people so they can help operate it, and mark trusted helpers as stewards — co-maintainers listed on the repeater's public page. Public repeater and organization pages link to each person's public profile, so visitors can find a way to reach the people who keep the mesh running.

For organization admins

Observers

An observer is a MeshCore radio that uploads the packets it hears to an MQTT broker. An organization's admins point MeshTender at that broker in Settings › MQTT — a wss:// address for a broker behind HTTPS, or tls:// / tcp:// for raw MQTT, on the public internet.

Observers that report their status on the broker show up there by themselves; an admin approves the ones the organization vouches for, or adds one by its public key. MeshTender only listens, and only counts what approved observers upload, so an unknown uplink on the same broker can't check anyone in.

More observers in more places means more of your members' adverts are heard.

Repeaters on the mesh

Approved observers also hear the organization's own repeaters advertise. MeshTender checks each advert's signature and shows what it says in the repeater's Details: when it was last heard, its path hash size, the region its flood adverts are scoped to, and whether its clock is right. It never changes what's registered by itself. If the name or location it advertises differs, a warning beside the registered one says what it advertises, and the owner can use the advertised one from Settings › Details.

It also estimates how often the repeater sends a flood advert, from the gaps between the ones heard, and says which firmware default the result matches. The default has changed twice:

  • 3 hours before firmware 1.8
  • 12 hours from 1.8 through 1.15
  • 47 hours from 1.16 on

Updating the firmware doesn't change a repeater's saved setting, so a repeater still on an old default is flagged on its page. Set it with set flood.advert.interval 47.

The estimate needs at least two matching gaps, so it takes a few intervals to appear. A missed advert, a manual advert or a reboot changes one gap, but the most common gap still wins.

With a KISS modem

What's a KISS modem?

You only need one to manage repeaters over the air or to run a net on the air; members, and owners who set up their repeater over USB, don't. A KISS modem turns a MeshCore device into a plain radio for a host to drive: instead of acting as a repeater or companion, it just relays raw packets to and from whatever's connected to it. That's how MeshTender talks to your mesh over the air — you attach a KISS-modem device to your browser over USB serial, and MeshTender uses it as its radio to reach repeaters that are already deployed (the over-the-air flow above).

It's a relatively new addition to MeshCore, and it's a standard firmware variant — you flash it right from the standard MeshCore flasher, the same place you'd flash a Repeater or a Companion. It's available for a large number of MeshCore devices, though not all of them — check the flasher for your specific board.

Remember that firmware variants are exclusive: a device running KISS-modem firmware is your radio interface, not a repeater. To turn that same device into a repeater later, you'd re-flash it with Repeater firmware.

Net control uses the same kind of modem to run a check-in net on the air.

Running a net on the air

Net control can connect a KISS modem to their browser during a session and let MeshTender handle the net's side of the air. The modem is tuned to the organization's radio settings, so those have to be set first. MeshTender then:

  • sends announcements — net open, net closed with the count, or your own message — as channel messages;
  • acknowledges check-ins with Copied: @[name], mentioning each companion by the name it advertises, which companion apps highlight. On a net that acknowledges automatically these go out in batches about every 30 seconds; otherwise each goes out when net control clicks Acknowledge. Nobody is acknowledged twice, even if the modem reconnects;
  • counts the adverts the modem hears, as one more observer.

MeshTender sends one message at a time and waits for the mesh to pass each on before the next, so a net never floods it. One modem can be connected to a session at a time.

The net's settings say where its messages go: the channel (Public, a hashtag channel, or a private channel and its key), a region to scope them to, so repeaters that only carry scoped traffic still repeat them, and the name they're sent as. Hashtag channel names should be lowercase, since that's all the companion app lets members type.

Messages on the net's channel that start with its log prefix (news: by default) are kept in the session log under News, without the prefix — whether net control's modem or one of the organization's observers heard them. Channel messages aren't signed, so a name in the log is whatever its sender typed.