Meshtastic MeshPacket & Data Field Reference: The On-Air Packet Envelope
Quick answer
What is a Meshtastic MeshPacket?
Download CSV Download JSON REST API →
The on-air packet envelope for Meshtastic, sourced verbatim from
meshtastic/protobufs → mesh.proto (MeshPacket + Data, as of
2026-07-21). Field numbers and types are exact. Routing and crypto behaviour
is intentionally left to the linked deep-dives rather than restated here; no RF/frequency/power values appear on a
protobuf reference.
| Message | Group | Field | # | Type | Purpose |
|---|---|---|---|---|---|
MeshPacket |
Addressing | from |
1 | fixed32 |
The sending node number. The crypto implementation also uses this field. |
MeshPacket |
Addressing | to |
2 | fixed32 |
The immediate destination. 4,294,967,295 (max uint32) means the packet is a broadcast on the channel; any other value is a direct message to that specific node. |
MeshPacket |
Addressing | channel |
3 | uint32 |
Index into the secondary-channels table the packet was sent/received on; unset means the primary channel. Deep inside the router (while the payload is encrypted) this field instead holds the channel hash. It is a local concept, meaningless to send between nodes. |
MeshPacket |
Addressing | id |
6 | fixed32 |
A unique ID for this packet, used by the flooding algorithm. Always 0 for no-ack or non-broadcast packets; otherwise unique on a per-sender basis. |
MeshPacket |
Payload (oneof) | decoded |
4 | Data |
The decoded payload (a Data sub-message). Present only once a node with the correct key has decrypted the packet — software outside the mesh radios only ever sees this form. |
MeshPacket |
Payload (oneof) | encrypted |
5 | bytes |
The encrypted payload bytes, as the packet travels over the air before decryption. |
MeshPacket |
Routing | hop_limit |
9 | uint32 |
Hops remaining before the packet is dropped — decrements at each relay (managed-flood routing). |
MeshPacket |
Routing | want_ack |
10 | bool |
Request that the destination return an acknowledgement for this packet. |
MeshPacket |
Routing | priority |
11 | Priority |
Transmit-queue priority (UNSET/MIN/BACKGROUND/DEFAULT/RELIABLE/RESPONSE/HIGH/ALERT/ACK/MAX). Internal only — never sent over the air; it orders the local priority queue so acks and routing go out before background traffic. |
MeshPacket |
Routing | via_mqtt |
14 | bool |
Set when the packet arrived (or is going) via an MQTT connection rather than the LoRa radio. |
MeshPacket |
Routing | hop_start |
15 | uint32 |
The original hop_limit at send time, so a receiver can compute how many hops the packet actually took. |
MeshPacket |
Routing | next_hop |
18 | uint32 |
The next-hop node (last byte of the node number) used by next-hop routing. |
MeshPacket |
Routing | relay_node |
19 | uint32 |
The relay node (last byte of the node number) that forwarded this packet. |
MeshPacket |
Routing | tx_after |
20 | uint32 |
Requests that the node delay transmission of this packet by this many seconds. |
MeshPacket |
Routing | transport_mechanism |
21 | TransportMechanism |
Which transport the packet arrived over: INTERNAL, LORA (+ALT1/ALT2/ALT3), MQTT, MULTICAST_UDP, API or UNICAST_UDP. |
MeshPacket |
Crypto | public_key |
16 | bytes |
The sender public key, used for PKC (public-key) encrypted direct messages. |
MeshPacket |
Crypto | pki_encrypted |
17 | bool |
True when the packet was encrypted with PKC (per-node public-key) rather than a shared channel PSK. |
MeshPacket |
Crypto | xeddsa_signed |
22 | bool |
True when the packet carries an XEdDSA signature. |
MeshPacket |
Receive metadata | rx_time |
7 | fixed32 |
The timestamp (seconds) at which the packet was received. |
MeshPacket |
Receive metadata | rx_snr |
8 | float |
The measured signal-to-noise ratio of the received packet. |
MeshPacket |
Receive metadata | rx_rssi |
12 | int32 |
The measured received signal strength (RSSI) of the packet, in dBm. |
Data |
Data payload | portnum |
1 | PortNum |
Which application the payload is for — the PortNum enum (see the PortNum registry). Formerly named "typ". |
Data |
Data payload | payload |
2 | bytes |
The application payload bytes. |
Data |
Data payload | want_response |
3 | bool |
Ask the recipient to respond in kind (e.g. reply with its own position). On a broadcast this yields many replies. |
Data |
Data payload | dest |
4 | fixed32 |
The destination node address, filled in by the mesh radio software; RouteDiscovery and multihop-routing messages populate it. |
Data |
Data payload | source |
5 | fixed32 |
The original sender address, populated only for reliable multihop packets (to keep packets small). |
Data |
Data payload | request_id |
6 | fixed32 |
The original message ID this message reports failure/response on (routing or response messages). Formerly original_id. |
Data |
Data payload | reply_id |
7 | fixed32 |
If set, this message is a reply to a previously sent message with this ID. |
Data |
Data payload | emoji |
8 | fixed32 |
When set, the payload should be treated as an emoji reaction (e.g. a heart or thumbs-up) to a message. |
Data |
Data payload | bitfield |
9 | uint32 (optional) |
Bitfield of extra flags; the first use indicates the user approves uploading this packet to MQTT. |
Data |
Data payload | xeddsa_signature |
10 | bytes |
The XEdDSA signature over the payload. |
How the packet fits together
- Addressing —
from/toare node numbers; atoof 4,294,967,295 is a channel broadcast, anything else a direct message.idmakes each packet unique for the flooding algorithm. - Payload — over the air the payload is
encryptedbytes; a node with the right channel PSK or PKC key decrypts it into thedecodedDatasub-message, which apps actually read. - Routing —
hop_limitcounts down at each relay (managed-flood routing);hop_startlets a receiver tell how many hops were used;next_hop/relay_nodesupport next-hop routing. - Crypto —
pki_encrypted+public_keymark public-key (PKC) direct messages; details on the encryption page. - Receive metadata —
rx_snrandrx_rssi(dBm) are set locally when a node hears the packet; they never travel over the air.
Related
Meshtastic PortNum registry (this envelope’s portnum field) ·
encryption & PSK/PKC model ·
LoRa regional settings ·
Nostr event-kinds reference (the Nostr analogue).
Credit: the MeshPacket and Data messages are defined and maintained by
the Meshtastic project in meshtastic/protobufs (GPL-3.0). This page is a dated, human- and machine-readable index of that file.
Related products, repair, and setup paths
- Bitcoiner sovereignty hub
- the plebs sovereign stack
- Nostr for Bitcoiners
- run your own Nostr relay
- getting started with Meshtastic
- Bitcoin over Meshtastic mesh networks
- open-source hardware tools directory
- off-grid Bitcoin mining
Last reviewed July 21, 2026.
