Documentation and message reference: https://mavlink-m.dronecode.org/
MAVLink-M is one open interface for military payloads and platforms: a dialect of MAVLink 2 that adds a public message set for safety and arming, targeting and engagement, remote weapon systems, and shared tracks. Platforms and payloads that implement it work together without a custom integration for every pair.
Where the common MAVLink message set covers flying the aircraft, MAVLink-M covers what the platform carries and how it coordinates with others. The messages are shaped so that a platform speaking this dialect can be understood by the wider force, translating cleanly, through a gateway, into the command-and-control message standards those systems already run on.
MAVLink-M is a message-schema dialect. It defines field layouts on top of open MAVLink; it is not an implementation, and it does not describe how any device works internally.
What the dialect deliberately does and does not carry is the core of its design:
- It carries descriptive intent and observation — what was seen, what is requested, and the current status of a participant. This is the information a cooperating system needs to coordinate.
- It excludes device-internal configuration — no fuze timing values, no laser codes, no performance or effectiveness data. The messages describe coordination between participants, never the internal programming of a device.
- Kinetic and non-kinetic intent are separable — observation cueing is a distinct message from action requests, so a consumer can tell "observe this" from "act on this" by message ID alone.
- Accountability is a record, not a trigger — messages that record a decision or authorization are exactly that: a record for audit and shared awareness, not a command that causes an action.
These boundaries are intentional. They keep the dialect a coordination and telemetry vocabulary that interoperates across systems, and keep the internal programming of any device off the wire.
| File | Purpose |
|---|---|
military.xml |
The shared MAVLink-M dialect. Includes common.xml. |
military_extensions.xml |
A template only, showing how a downstream implementor defines private, local messages in the reserved 53900-53999 block without adding them to the shared dialect. Not part of the generated dialect here. |
IDMAPPING.md |
Message-ID allocation for the 53000-53999 range. |
Message IDs are allocated as 53000-53099 for the initial shared messages,
53100-53899 reserved for future shared growth, and 53900-53999 for
private/downstream messages. See IDMAPPING.md for the full map.
The dialect drops into any MAVLink 2 stack. Generate bindings for your language with mavgen, for example:
python3 -m pymavlink.tools.mavgen \
--lang=C --wire-protocol=2.0 \
--output=out military.xmlPre-generated C headers are published to
mavlink-military-c_library_v2,
regenerated by CI on every change to military.xml on main.
For a worked example on real hardware — a flight controller relaying MAVLink-M messages to a peripheral — see nucleo-mavlink-m-demo.
MAVLink-M is a public draft: message layouts can still change until the
standard freezes in November 2026. See the
status and roadmap for
what that means for implementers. The 53000-53099 allocation is active for
this dialect, and message IDs are stable once assigned. The working group
discusses proposals on the
MAVLink-M mailing list. To propose a
new shared message or a change, open a pull request against military.xml;
keep additions within the scope and boundaries above.
See CONTRIBUTING.md for the commit format, the DCO sign-off,
and review expectations.
MIT. See LICENSE.