{
    "meta": {
        "title": "D-Central — 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-07-22T02:39:37+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 — 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 — 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 — 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 — 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."
        }
    ]
}