The tag

A TrailMesh7 tag is a small LoRa radio running Meshtastic firmware. It carries a battery, an antenna, a button, and GPS. It is the part of the system that actually talks to other people’s tags. Your phone never transmits on the mesh; it talks to the tag over Bluetooth and the tag does the rest.

What the tag does without a phone

The tag keeps its own list of the other tags it has heard from, in its own flash, updated as packets arrive. Two tags left in a rucksack together will find each other with both phones switched off.

It also relays. A packet that reaches your tag may be forwarded on toward someone further away, which is what makes a group’s range larger than the range of any single radio in it.

What the tag needs a phone for

Rooms. A room’s encryption key lives in the app, not in the tag — the tag carries encrypted payloads it cannot read and has no way to join anything on its own. Two tags alone will never form a room, and a room’s membership does not change while no phone is running TrailMesh7.

That split is deliberate: it means the room’s contents are not sitting in plaintext on a device you might drop off a chairlift.

The imprint

Every tag has a code printed on it: two letters followed by six hex characters. Earlier tags are labelled R6……; the current batch is labelled J6……. The prefix is just what got printed — the six hex characters are the part that identifies the tag, and the scheme behind them did not change. That code is the tag’s durable identity, and it is what the app files backups and keys under.

It matters because the identifier the radio uses on the air, the node number, is derived from the tag’s keypair and is recomputed every time the tag boots. Change the keys and the node number changes with them. The printed code does not, so it is the one to quote when asking for help.

Because the app derives this code from the tag’s hardware address rather than reading the label, it files every tag under one canonical form and may show you R6 where your label says J6. Same tag, same code — only the letter differs, and that is deliberate: filing a tag under its label as well would give one device two sets of rooms.

Roles: client and tracker

A tag is set up either as a client — a tag a person carries, paired to a phone — or as a tracker, an unattended beacon.

Trackers are deliberately kept out of the room invite list and the direct-message picker, because the firmware marks them unmessagable and a room could never reach them. They appear in the tracker section of the room sheet instead. If a tag is missing from the invite list but visible under “add a tracker”, its role is the reason.

The role is not permanent: any tag can be made a tracker and converted back. See setting up a tracker and converting one back.

Firmware

TrailMesh7 requires its own firmware. It is a small fork of Meshtastic, and the app will not operate with a tag that is running anything else — it says so and sends you to the update rather than working partly. Three things depend on it, and on stock firmware every one of them fails silently:

It also reports one failure stock firmware handles silently: a stored key the tag cannot sign for. That is the fault that leaves a tag looking completely healthy while every other tag discards its broadcasts.

A tag from a TrailMesh7 kit will have the right firmware already, but kits are not shipping yet. A tag that arrives on stock Meshtastic has to be updated once from a computer over USB, because stock firmware reboots into a USB drive a phone cannot reach. After that first update, the app handles them over Bluetooth.

Region must be set. A tag with its region unset receives normally, pairs normally, and looks completely healthy while transmitting nothing at all. It is the first thing to check on a tag that "does not work" — see setup.