Skip to content

Bitcoin accepted at checkout  |  Ships from Montreal, QC, Canada  |  Expert support since 2016

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.

MessageGroupField#TypePurpose
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

  • Addressingfrom/to are node numbers; a to of 4,294,967,295 is a channel broadcast, anything else a direct message. id makes each packet unique for the flooding algorithm.
  • Payload — over the air the payload is encrypted bytes; a node with the right channel PSK or PKC key decrypts it into the decoded Data sub-message, which apps actually read.
  • Routinghop_limit counts down at each relay (managed-flood routing); hop_start lets a receiver tell how many hops were used; next_hop/relay_node support next-hop routing.
  • Cryptopki_encrypted + public_key mark public-key (PKC) direct messages; details on the encryption page.
  • Receive metadatarx_snr and rx_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.