LXMF Protocol Specification
This appendix specifies the LXMF messaging protocol. Its canonical wire fixture
is generated from the Python LXMF 1.1.0 reference (reference/LXMF, commit 795fdaa)
running on Reticulum 1.3.5 (commit d5e62d4), and is the compatibility contract
for leviculum-lxmf. The original symbol inventory and much of the source-line
audit were captured against LXMF 0.9.6 (8499729); changed wire surfaces are
called out and tested against the active 1.1.0 lock.
LXMF (Lightweight Extensible Message Format) is the store-and-forward messaging layer of Reticulum. It defines how a message is structured, signed, encrypted, sized, and delivered (opportunistically as a single packet, directly over a link, via a propagation node, or on paper), plus the anti-spam stamp and ticket mechanisms. It moves opaque bytes over Reticulum primitives; it carries no media processing of its own.
The Rust implementation is intentionally client-only for propagation: it can
discover a propagation node, upload a recipient-encrypted message as a raw Link
Packet or Resource, and perform the /get list, download, and acknowledgement
exchange. Propagation-node hosting, transit storage, /offer, and peer
synchronisation are documented only as Python-reference context and are not
implemented by leviculum-lxmf. The current /get path supports canonical
single-segment Link request and response Resources. Packed request or response
values above Reticulum's 1,048,575-byte efficient Resource limit, and incoming
split request/response advertisements, are rejected until semantic segment
reassembly is implemented.
How to read this specification
- Normative statements use RFC 2119 keywords (MUST, SHOULD, MAY) and specify
behaviour an interoperable implementation has to reproduce. Every normative
fact carries either a
file:linecitation into the reference, a derivation with the arithmetic shown, or a labelled test vector[VEC-...]. - Informative sections describe internal reference behaviour (router scheduling, queues, persistence) that an implementation MAY diverge from without breaking wire or semantic compatibility.
- Test vectors are the genuine byte output of the reference, regenerated by
vectors/gen_vectors.pyand pinned to the submodule commits. A citation proves "the code says this"; a vector proves "these are the bytes".
Sections
- Introduction and scope
- Cryptographic primitives
- Identifiers and sizes
- Message binary format
- Fields
- Delivery methods and sizing
- On-air sequences
- Stamps and proof-of-work
- Tickets
- Announce application data
- Propagation
- Router internals (informative)
- Constants reference
- Coverage ledger
- Test vectors
- Python 1.1.0 and RNS 1.4.0 parity status
- Symbol inventory (frozen)