MAVLink messages are defined in XML files called dialects. The core set lives in common.xml and is implemented by most autopilots (PX4, ArduPilot) and ground stations (QGroundControl, Mission Planner).
Each message has a numeric ID, a name, and a list of typed fields. Autopilot-specific dialects (e.g. ardupilotmega.xml) inherit from common.xml and add vendor extensions. The standard.xml and minimal.xml dialects define progressively smaller subsets.
xml
<!-- Example message definition in common.xml --> <message id="0" name="HEARTBEAT"> <field type="uint8_t" name="type">Vehicle type (MAV_TYPE)</field> <field type="uint8_t" name="autopilot">Autopilot type</field> <field type="uint8_t" name="base_mode">System mode bitmap</field> <field type="uint32_t" name="custom_mode">Autopilot-specific mode</field> <field type="uint8_t" name="system_status">System status</field> <field type="uint8_t_mavlink_version" name="mavlink_version">MAVLink version</field> </message>
Dialect hierarchy
minimal.xml (heartbeat only) → standard.xml (small common subset) → common.xml (full reference) → ardupilotmega.xml / other vendor dialects. Always target common.xml unless you need vendor-specific messages.