Skip to main content
Cursor-on-Target (CoT) is an XML-based messaging format used for sharing situational awareness information between tactical systems, including ATAK, WinTAK, and FreeTAKServer.

Overview

CoT messages are XML documents that describe events occurring in time and space. Each CoT message represents an “event” with spatial coordinates, temporal validity, and optional detailed information. Format: XML Protocol: XML over TCP or SSL/TLS Namespace: No formal namespace (legacy format)

CoT Event Structure

Basic Schema

A CoT message consists of three main elements:

Event Element

The root <event> element contains core attributes:

Event Attributes

version - CoT protocol version
uid - Unique identifier (100 characters max, event.py:14)
type - Event type using CoT taxonomy (100 characters max, event.py:15)
time - Event creation timestamp
start - Event validity start time
stale - Event expiration time
how - Method of coordinate derivation

Point Element

The <point> element defines spatial location (point.py:11-25):

Detail Element

The <detail> element contains extended information (detail.py:17-30):
Common detail sub-elements:
  • contact - Contact information (contact.py)
  • usericon - Icon/marker information (usericon.py)
  • marti - Marti/TAK server metadata (marti.py)
  • __group - Team/group membership
  • status - Device/entity status
  • takv - TAK version information
  • track - Movement data

CoT Type Taxonomy

Type Format

CoT types follow the format: a-f-G-U-C Breakdown:
  • a - Atom (basic entity)
  • f - Friendly (affiliation)
  • G - Ground (dimension)
  • U - Unit (function)
  • C - Combat (status)

Common Types

User Position Updates

Type: a-f-G-U-C (Friendly Ground Unit Combat) Used for ATAK user location updates (XMLCoTController.py:174-183):

GeoChat Messages

Type: b-t-f (Bits-Text-Freeform) Used for chat messages (XMLCoTController.py:170-172):

Ping Messages

Type: t-x-c-t (Tasking-Execute-CommsTest-Test) Used for connection testing (XMLCoTController.py:166-168):

Map Markers

Type: a-n-G (Atom-Neutral-Ground) Used for map points/markers (XMLCoTController.py:185-192):

Processing CoT Messages

XML Parsing

Class: XMLCoTController (XMLCoTController.py:33) FreeTAKServer uses defusedxml for secure XML parsing:

Type Determination

Method: determineCoTType() (XMLCoTController.py:133) Routes messages based on type:

XML to Dictionary Conversion

Method: convert_xml_to_dict() (tcp_cot_service_main.py:416)

Model to XML Conversion

Method: convert_to_xml() (tcp_cot_service_main.py:314)

Domain Model

Event Model

Class: Event (cot_management/persistence/event.py:12)

Point Model

Class: Point (cot_management/persistence/point.py:11)

Detail Model

Class: Detail (cot_management/persistence/detail.py:17)

Constructing CoT Messages

Python Example

Sending CoT Messages

Via TCP Service

Via SSL Service

Message Validation

CoT messages should validate:
  1. Well-formed XML - Valid XML structure
  2. Required attributes - event, uid, type, time, start, stale
  3. Valid timestamps - ISO8601 format, stale > start
  4. Coordinate ranges - lat: -90 to 90, lon: -180 to 180
  5. Type taxonomy - Valid CoT type string