{"meta":{"title":"D-Central \u2014 Meshtastic MeshPacket & Data Field Reference","description":"Every field of the Meshtastic MeshPacket envelope and its decoded Data sub-message (31 fields): name, protobuf field number, type and purpose, transcribed verbatim from mesh.proto. The packet-envelope companion to the PortNum application registry.","generated":"2026-09-09T21:56:10+00:00","as_of":"2026-07-21","version":"1.0","license":"https:\/\/creativecommons.org\/licenses\/by\/4.0\/","license_name":"CC BY 4.0","source":"https:\/\/d-central.tech\/meshtastic-packet-structure\/","record_count":31,"provenance":"Transcribed verbatim from meshtastic\/protobufs mesh.proto (MeshPacket + Data messages). Field numbers and types are exact; no behaviour is inferred and no RF\/frequency\/power values appear (those live in the LoRa-regions dataset)."},"fields":[{"message":"MeshPacket","group":"Addressing","field":"from","field_number":1,"type":"fixed32","description":"The sending node number. The crypto implementation also uses this field."},{"message":"MeshPacket","group":"Addressing","field":"to","field_number":2,"type":"fixed32","description":"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."},{"message":"MeshPacket","group":"Addressing","field":"channel","field_number":3,"type":"uint32","description":"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."},{"message":"MeshPacket","group":"Addressing","field":"id","field_number":6,"type":"fixed32","description":"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."},{"message":"MeshPacket","group":"Payload (oneof)","field":"decoded","field_number":4,"type":"Data","description":"The decoded payload (a Data sub-message). Present only once a node with the correct key has decrypted the packet \u2014 software outside the mesh radios only ever sees this form."},{"message":"MeshPacket","group":"Payload (oneof)","field":"encrypted","field_number":5,"type":"bytes","description":"The encrypted payload bytes, as the packet travels over the air before decryption."},{"message":"MeshPacket","group":"Routing","field":"hop_limit","field_number":9,"type":"uint32","description":"Hops remaining before the packet is dropped \u2014 decrements at each relay (managed-flood routing)."},{"message":"MeshPacket","group":"Routing","field":"want_ack","field_number":10,"type":"bool","description":"Request that the destination return an acknowledgement for this packet."},{"message":"MeshPacket","group":"Routing","field":"priority","field_number":11,"type":"Priority","description":"Transmit-queue priority (UNSET\/MIN\/BACKGROUND\/DEFAULT\/RELIABLE\/RESPONSE\/HIGH\/ALERT\/ACK\/MAX). Internal only \u2014 never sent over the air; it orders the local priority queue so acks and routing go out before background traffic."},{"message":"MeshPacket","group":"Routing","field":"via_mqtt","field_number":14,"type":"bool","description":"Set when the packet arrived (or is going) via an MQTT connection rather than the LoRa radio."},{"message":"MeshPacket","group":"Routing","field":"hop_start","field_number":15,"type":"uint32","description":"The original hop_limit at send time, so a receiver can compute how many hops the packet actually took."},{"message":"MeshPacket","group":"Routing","field":"next_hop","field_number":18,"type":"uint32","description":"The next-hop node (last byte of the node number) used by next-hop routing."},{"message":"MeshPacket","group":"Routing","field":"relay_node","field_number":19,"type":"uint32","description":"The relay node (last byte of the node number) that forwarded this packet."},{"message":"MeshPacket","group":"Routing","field":"tx_after","field_number":20,"type":"uint32","description":"Requests that the node delay transmission of this packet by this many seconds."},{"message":"MeshPacket","group":"Routing","field":"transport_mechanism","field_number":21,"type":"TransportMechanism","description":"Which transport the packet arrived over: INTERNAL, LORA (+ALT1\/ALT2\/ALT3), MQTT, MULTICAST_UDP, API or UNICAST_UDP."},{"message":"MeshPacket","group":"Crypto","field":"public_key","field_number":16,"type":"bytes","description":"The sender public key, used for PKC (public-key) encrypted direct messages."},{"message":"MeshPacket","group":"Crypto","field":"pki_encrypted","field_number":17,"type":"bool","description":"True when the packet was encrypted with PKC (per-node public-key) rather than a shared channel PSK."},{"message":"MeshPacket","group":"Crypto","field":"xeddsa_signed","field_number":22,"type":"bool","description":"True when the packet carries an XEdDSA signature."},{"message":"MeshPacket","group":"Receive metadata","field":"rx_time","field_number":7,"type":"fixed32","description":"The timestamp (seconds) at which the packet was received."},{"message":"MeshPacket","group":"Receive metadata","field":"rx_snr","field_number":8,"type":"float","description":"The measured signal-to-noise ratio of the received packet."},{"message":"MeshPacket","group":"Receive metadata","field":"rx_rssi","field_number":12,"type":"int32","description":"The measured received signal strength (RSSI) of the packet, in dBm."},{"message":"Data","group":"Data payload","field":"portnum","field_number":1,"type":"PortNum","description":"Which application the payload is for \u2014 the PortNum enum (see the PortNum registry). Formerly named \"typ\"."},{"message":"Data","group":"Data payload","field":"payload","field_number":2,"type":"bytes","description":"The application payload bytes."},{"message":"Data","group":"Data payload","field":"want_response","field_number":3,"type":"bool","description":"Ask the recipient to respond in kind (e.g. reply with its own position). On a broadcast this yields many replies."},{"message":"Data","group":"Data payload","field":"dest","field_number":4,"type":"fixed32","description":"The destination node address, filled in by the mesh radio software; RouteDiscovery and multihop-routing messages populate it."},{"message":"Data","group":"Data payload","field":"source","field_number":5,"type":"fixed32","description":"The original sender address, populated only for reliable multihop packets (to keep packets small)."},{"message":"Data","group":"Data payload","field":"request_id","field_number":6,"type":"fixed32","description":"The original message ID this message reports failure\/response on (routing or response messages). Formerly original_id."},{"message":"Data","group":"Data payload","field":"reply_id","field_number":7,"type":"fixed32","description":"If set, this message is a reply to a previously sent message with this ID."},{"message":"Data","group":"Data payload","field":"emoji","field_number":8,"type":"fixed32","description":"When set, the payload should be treated as an emoji reaction (e.g. a heart or thumbs-up) to a message."},{"message":"Data","group":"Data payload","field":"bitfield","field_number":9,"type":"uint32 (optional)","description":"Bitfield of extra flags; the first use indicates the user approves uploading this packet to MQTT."},{"message":"Data","group":"Data payload","field":"xeddsa_signature","field_number":10,"type":"bytes","description":"The XEdDSA signature over the payload."}]}