Introduction

The Android Team Awareness Kit (ATAK) is an Android-based software platform for geospatial situational awareness and collaboration. It was originally developed for military use (where it stands for “Android Tactical Assault Kit”) and is now also available as a civilian version (CivTAK). ATAK provides a real-time view of geospatial data – such as the positions of responders, hazard areas and mission objectives – on digital maps and supports users with navigation, mission planning and communication. Key features include a high-performance map display (2D/3D) with online and offline maps, shared objects (points, routes, areas) and built-in communication functions such as text chat, file sharing, live video and tracking. ATAK’s extensible plugin architecture deserves special mention: it allows additional capabilities for specific missions to be integrated. CivTAK (ATAK-CIV) was released for public use in 2020 under the name “Android Team Awareness Kit”. This article provides a technical analysis of ATAK and CivTAK, focusing on the system architecture, the available APIs and interfaces, plugin development, the implemented security mechanisms, the Cursor on Target (CoT) protocol, the differences between the military and civilian versions, and the open-source resources and SDKs available to developers. Examples and code snippets illustrate the key concepts.

System Architecture

ATAK is designed as a modular client-server system: the main client is an Android app, while the TAK Server component (optional) can act as a central backend that coordinates multiple clients. The architecture of the Android app is divided into several core components, summarized in the following table:

ComponentDescription
Map engineHigh-performance geospatial engine for 2D/3D maps, originally based on NASA WorldWind. Supports online map sources and offline maps (raster/vector) as well as zooming down to sub-meter detail.
Core data modelManages situational objects (own position, team locations, POIs, routes, geofences etc.) and their properties (symbols, metadata). Units and events are displayed using military APP-6/MIL-STD-2525 symbology.
Communication moduleResponsible for network communication and data exchange between devices. Implemented via the Cursor on Target (CoT) protocol, which is shared by all clients and servers in the TAK family (The TAK Ecosystem: Military Coordination Goes Open Source | Hackaday).
Additional tools & UIBuilt-in tools for navigation and collaboration, including real-time tracking of other users, drawing and measuring tools (distance, bearing), GeoChat (location-aware text messages), photo/video sharing and alerting functions (emergency beacons). The Android app provides a customizable user interface (toolbar, overlays) into which plugins can integrate additional elements.
Plugin frameworkA plugin architecture for loading extensions dynamically at runtime. Plugins can add new UI components, data interfaces or functionality (e.g. integration of external sensor systems, specialized mission tools). To support this, the core provides events, services and an API through which plugins interact with the app (see APIs & Interfaces).
Security & storageLocal storage of mission data, map tiles and history on the device. CivTAK encrypts local data by default with a passphrase that is either set by the user or generated automatically (AES) (ATAK CIV 4.0 User Guide). For communication, ATAK offers optional end-to-end encryption in the mesh (see Security Mechanisms).

How it works: In operation, the ATAK client takes its own position from the internal GPS and shows the user their surroundings on the map. Event data (positions, icons, messages) is exchanged with other connected clients via CoT – either directly in an ad-hoc network (via multicast/broadcast) or relayed through a TAK Server in the middle. All connected participants receive real-time updates and share a common operational picture. The TAK Server acts as the central instance for synchronization and data storage: it receives CoT messages from all clients and forwards them to all others. The server also provides services such as user management, persistence (a database of mission data) and, where required, interfaces to other systems. ATAK itself runs on Android (Java/Kotlin), with performance-critical parts written in C/C++ (rendering engine). Thanks to its modular plugin design, the architecture is open to a wide range of extensions – communication plugins can add alternative transport media (e.g. an acoustic modem over voice radio), while data plugins can ingest external feeds (e.g. ADS-B flight tracking, drone telemetry). This open design makes ATAK highly adaptable to different use cases (military, public safety, outdoor, etc.), because specific functions can be added as plugins without modifying the core. The military and civilian app versions share practically the same architecture and are fully compatible with each other – the differences lie mainly in additional plugins or configurations for military users (see Differences Between ATAK and CivTAK).

APIs and Interfaces

ATAK/CivTAK offers several interfaces for developers to feed in data, retrieve it or extend the application. There are essentially two approaches: (1) using the CoT protocol for external data integration and (2) developing plugins inside the ATAK app using the provided API.

1. The CoT protocol as an external interface: Because ATAK transports all situational information as Cursor on Target (CoT) events, an external system can join the data distribution simply by sending or receiving CoT messages. For example, a sensor or another program can send a CoT message describing a specific event (e.g. a vehicle position or an alert) via UDP/TCP to the ATAK clients or the TAK Server – every participant that receives this CoT then displays the corresponding object on its map. This makes it relatively easy to integrate ATAK with third-party systems: you generate CoT messages in the expected XML/Protobuf format. Conversely, you can tap CoT data from ATAK and reuse it in other applications (e.g. to feed the operational picture into your own software). Use case: A simple Node-RED flow or Python script could, for instance, periodically generate CoT XML containing a tracker’s GPS coordinates so that it appears as a “virtual participant” in the ATAK network. Since CoT is well documented and standardized, libraries for serializing and deserializing CoT messages exist for various languages (e.g. node-cot in JavaScript or takproto in Python). In addition, some TAK servers (especially the open-source FreeTAKServer) implement a REST API that third-party applications can use to post new targets or messages, for example – offered as a more user-friendly alternative to injecting CoT directly via UDP/TCP. CoT remains the standard data path, however: the server’s REST API ultimately converts requests into CoT events for the clients as well.

2. The ATAK plugin API: For deeper integration and for extending ATAK itself, the platform provides an internal API as part of the plugin SDK. A plugin runs inside the ATAK app and can access functions and events of the ATAK core. Technically, ATAK implements this through an event-bus-like pattern and defined interface classes. Key classes include the ToolDropDownReceiver (or simply DropDownReceiver) and MapComponent, which are subclassed in the plugin code. The MapComponent serves as the plugin’s entry point; it is initialized when the plugin is loaded and can register UI components (tools, overlays), for example. The DropDownReceiver is implemented as a broadcast receiver and receives ATAK-specific broadcast events (e.g. user actions or system events) – the plugin processes these in its onReceive method and can react accordingly. Through its API, ATAK exposes numerous services, for example to draw on the map display, add markers, access the internal data model (CoT events) or send network messages. A plugin can thus programmatically create a new object and publish it on the map by injecting a CoT event via the internal dispatcher. Listing 1 shows a simplified code snippet (Java) from a plugin that creates a CoT marker and adds it locally to the ATAK app:

// Inside an ATAK plugin: create a CoT event and dispatch it in the local client
CotEvent cot = new CotEvent();
cot.uid   = "Demo-1";                        // unique ID
cot.type  = "a-f-G-U-C";                     // CoT type (here: friendly ground unit, combat)
cot.time  = new CoordinatedTime();           // current timestamp
cot.start = cot.time;
cot.stale = cot.time.addMinutes(5);          // valid for 5 minutes
cot.how   = "m-g";                           // how = method of position fix (m-g = machine, GPS-derived)
cot.setPoint(new CotPoint(50.775, 6.083, 0.0, 50.0, 50.0));  // position (lat, lon, hae, ce, le)
CotMapComponent.getInternalDispatcher().dispatch(cot);       // distribute the event internally (show on map)

The code uses ATAK classes from the SDK (CotEvent, CotPoint, CotMapComponent). First, a new event is created and various attributes are set (see the CoT protocol section), then it is published via the internal dispatcher. As a result, the local ATAK client immediately renders the event on the map (here as the symbol of a “friendly unit” according to the type code). If required, ATAK would also forward this event to connected peers/servers, unless it is marked as local-only. This example illustrates how plugins can use ATAK functions programmatically – for example to integrate external data sources (drone telemetry, IoT sensors) or implement new tools. One community plugin, for instance, integrated MAVLink drone control by injecting the drone positions as CoT and providing control interfaces through the plugin.

In addition to the CoT and plugin interfaces, ATAK also supports classic file interfaces: via the Overlay Manager, users can import KML, KMZ or GPX files, and Data Packages make it possible to bundle layers, key files or mission data into a single package for distribution to others (e.g. as a file or via the server). These mechanisms are aimed more at end users and data exchange than at developers, so they are mentioned here only for completeness. In summary, the main interfaces available to developers are CoT (for loose coupling of external systems) and the ATAK Plugin SDK (for tight integration with full functionality).

Plugin Development

Developing your own plugins for ATAK/CivTAK is one of the main ways to extend the platform and tailor it to specific requirements. ATAK provides an official Plugin Development Kit (SDK) and templates that allow developers to build their own extensions fairly quickly. Below are the most important steps and aspects of plugin development:

  • SDK and development environment: The ATAK-CIV source code is freely available (GitHub), and the TAK Product Center also provides a plugin SDK. Developers download the ATAK-CIV project or the SDK package, which contains sample plugins (HelloWorld etc.) and the required libraries. Android Studio is the recommended IDE. Once the project is set up (importing the plugin template as a module and pointing to the ATAK SDK in local.properties), you can compile the sample plugins and test them on an Android device. Important: for development, it is advisable to use a dedicated debug build of ATAK (included in the SDK or available via civTAK.org), as the Play Store version may expect signed plugins.
  • Project structure of a plugin: An ATAK plugin is essentially a standalone Android app (APK), but it has no UI of its own in the launcher – instead, it is loaded by ATAK. The plugin template typically contains two central classes, e.g. PluginTemplateDropDownReceiver and PluginTemplateMapComponent (names vary depending on the template). These extend the ATAK base classes and are discovered by the ATAK core through entries in the plugin’s AndroidManifest.xml. When the user activates the plugin in ATAK (plugins are usually detected automatically, e.g. by package name or manifest), ATAK instantiates the plugin’s MapComponent. There, the plugin registers new menu entries (dropdown buttons in the ATAK toolbar) or overlays, for example. The DropDownReceiver receives clicks on these plugin UI elements and can then execute logic. Plugins can also use background services or launch their own activities, which appear embedded in ATAK as windows.
  • Using the ATAK API: Inside the plugin, you can access numerous functions of the core app. This is done through manager and helper classes provided by the ATAK core (included in the SDK as JARs or Maven dependencies). Examples: accessing the MapView to draw graphics; MissionPackageUtils to create data packages; the GeoChat service to send chat messages programmatically; or using the CoT classes directly, as shown in Listing 1. The documentation in the Plugin Development Guide (PDF in the SDK) explains the most important classes and lifecycle hooks. Since ATAK is based on Android, many common Android development patterns (activity lifecycle, permissions etc.) apply to plugins to a limited extent – however, plugins run in the context of the ATAK app, not as fully independent apps. Developers must, for example, make sure to perform UI actions on the correct UI thread/context (map UI vs. plugin context).
  • Tools and debugging: During development, it helps to watch the ATAK logs. ATAK logs many events (including plugin events) via Android’s Logcat. The SDK documentation lists filters for showing the relevant logs (e.g. all atak tags). Because plugins run together with ATAK, the Android Studio debugger can be attached as soon as ATAK has started with the plugin.
  • Examples and templates: The official SDK includes a HelloWorld plugin that minimally demonstrates how a plugin adds a button and displays a toast message. From there, developers can gradually build in more complex functionality. There are community tutorials – such as a workshop series by RIIS – that walk through development using examples (e.g. integrating a MAVLink drone feed). The open-source community also provides plugins whose source code can serve as learning material (e.g. CloudRF’s SOOTHSAYER plugin for ATAK on GitHub or the atak-forwarder LoRa plugin).
  • Distribution and installation: Finished plugins can be distributed as regular APKs. CivTAK users can simply add a plugin APK by installing the file; ATAK detects the plugin and it appears in the plugin list. Some plugins for civilian use are even available on the Google Play Store – e.g. the WASP plugin (Wide Area Search Planning) or HAMMER (an acoustic modem plugin for radios). Plugins for military use are usually provided via the government platform TAK.gov (for authorized users only). During development, keep in mind that compatibility with future ATAK versions matters – the plugin API can change, so plugins are usually recompiled when a new ATAK version is released (although the TAK Product Center strives for backward compatibility).

In short, the plugin architecture allows developers to build tailor-made extensions for ATAK/CivTAK – from integrating specialized communication hardware and connecting proprietary databases to implementing entirely new UI features. The SDK and the active community make it easier to get started, which is why ATAK now offers a wide range of plugins across different domains (many of them open source or available as reference implementations).

Security Mechanisms

ATAK/CivTAK is frequently used in security-critical environments, so security mechanisms play a role on several levels: (a) securing communication (network encryption, authentication), (b) access control and roles, and (c) protecting data stored locally on the device.

Network encryption and security: Out of the box, ATAK sends CoT messages in plain text over IP networks (UDP/TCP) – the protocol itself does not include end-to-end encryption. The security of data transmission therefore depends heavily on the transport medium used. In military scenarios, ATAK typically runs over already protected radio networks or VPN tunnels. For civilian users, there are recommendations such as setting up a ZeroTier VPN for team communication so that CoT data is sent encrypted over the internet.

Starting with ATAK CIV 4.0, built-in end-to-end encryption for ad-hoc/mesh networks was added: users can optionally generate an AES-256 key and share it with team members so that CoT data is exchanged in encrypted form on the local network. Once all participating devices have loaded the same key, they only accept encrypted CoT messages from each other; devices without the key are locked out. This AES mesh encryption ensures that positions, chats and other data cannot be read in plain text even on an insecure radio channel (e.g. a MANET without VPN). It is configured in the ATAK settings under Configure AES-256 Mesh Encryption, where you generate a key (key file) that is then distributed to all devices via a Data Package or in advance. For connections between ATAK clients and a central TAK Server, TLS/SSL is normally used – the official TAK Server supports encrypted WebSocket/SSL connections. According to its documentation, the TAK Server implements “encrypted data transmission” and access control, which in practice means TLS (for data in transit) and authentication. The server can be configured so that clients can only connect with valid certificates or access tokens (client authentication). In government environments, VPN or private APN solutions additionally isolate TAK traffic. Important: ATAK itself only encrypts CoT data if you configure it to do so or use a secure transport – out of the box, CivTAK transmits unencrypted on the local network but leaves it up to the user to enable security measures.

Authentication and access control: In pure peer-to-peer operation, there is no user authentication within ATAK – anyone who gets onto the mesh network (and has the AES key, if one is set) sees all data. In server-based setups, on the other hand, every user logs on to the TAK Server with an account. The server manages user accounts, groups and roles. This makes it possible to control which information each user may see or send (role-based access control). For example, certain CoT events could be marked as visible to command staff only. TAK Server 5.x supports such roles and filter rules. The server also logs access, creating an audit trail of who sent or received which data and when.

Local data protection: When CivTAK is started for the first time, the app automatically generates an encryption passphrase to protect local files (ATAK CIV 4.0 User Guide). This passphrase (which the user can change) is used to store cached maps, saved mission data or settings on the device in encrypted form, for example. The aim is to prevent sensitive operational data from being read if the device is lost. The mechanism works transparently in the background. In addition, ATAK lets you quickly delete all stored content via Wipe or Clear Data.

Further aspects: ATAK runs as a regular Android app, so it also benefits from the operating system’s security features (sandboxing, permissions). For example, plugins must be signed, or the app must explicitly agree to load unsigned plugins (a measure to prevent unauthorized code injection). Overall, the TAK ecosystem follows a concept in which transport security is often handled at the network level (VPN, TLS), while content security can optionally be added through application-level encryption. For maximum protection, TAK best practice therefore recommends a combination: secured network channels (e.g. VPN), strong user authentication, enabled AES encryption for CoT and physical device protection. The military version of ATAK may additionally include special certified encryption modules (Type 1 crypto) that are not part of CivTAK – however, there is hardly any public information on this, as these components are subject to ITAR and other restrictions.

The Cursor on Target (CoT) Protocol

The Cursor on Target (CoT) protocol is the backbone of data communication in the TAK ecosystem. It is an XML-based message format originally developed by MITRE that creates a common “language” for exchanging time-critical target and position data between systems (Cursor on Target: Research for a Sensor Network – PMC). ATAK and all other TAK clients (WinTAK, iTAK, etc.) use CoT to encode and share information such as location, direction of movement, event type, messages and much more in a standardized form.

Message structure: A CoT message typically consists of a single XML element <event> with various attributes and child elements. A (highly simplified) example of a CoT event is shown in Listing 2:

<event version="2.0" uid="UID12345" type="a-f-G-U-C" time="2025-02-26T17:30:00Z" start="2025-02-26T17:30:00Z" stale="2025-02-26T17:35:00Z" how="m-g">
    <point lat="50.7762" lon="6.0838" hae="123.0" ce="5.0" le="10.0"/>
    <detail>
        <contact callsign="Alpha1"/>
        <usericon iconsetpath="apps://icons/alpha.png"/>
    </detail>
</event>

Example of a CoT XML message (friendly unit “Alpha1” with position)

Every event has mandatory attributes:

  • uid: unique identifier of the event (e.g. device serial number, callsign or similar). It is used to recognize updates to existing objects.
  • type: the event type, encoded as a hierarchical string. The first character indicates the category (e.g. a = “atom” for physical objects). It is followed by hyphen-separated codes for affiliation (friend/hostile etc.), battle dimension and, where applicable, further subtypes. In the example above, a-f-G-U-C stands for atom–friend–Ground–Unit–Combat (friendly ground combat unit) – the type ATAK uses by default for its own position marker. Many of these type codes are derived from the military standard MIL-STD-2525 (NATO symbology), which ensures consistent display on the map (FTS Documentation).
  • time, start, stale: timestamps. time is the time the event was created, start the beginning of its validity (often identical to time) and stale the expiry time after which the event is considered outdated and can be removed by the system. This gives every object a defined lifetime, which is important for temporary events (e.g. the position of a moving target that is flagged as “no longer reliable” after X seconds without an update).
  • how: indicates how the information was obtained – e.g. m-g for “machine-generated, GPS-derived” or h-e for “human-entered (estimated)”. This can indicate the reliability or source of the data.

Child elements:

  • <point>: contains the geographic position and its accuracy. The attributes are lat (latitude), lon (longitude), hae (height above ellipsoid, in meters), ce (circular error in meters, i.e. the horizontal accuracy radius) and le (linear error in meters, i.e. the vertical uncertainty). In the example, Alpha1 is at an altitude of 123 m, and the position accuracy is 5 m horizontally / 10 m vertically.
  • <detail>: this is where additional details can be placed as structured child elements. It is a flexible field that can contain different information depending on the event type. For position/identification events, common detail entries are: <contact> with attributes such as callsign (the user’s callsign/name), <remarks> for free-text remarks, <group> for team membership, <status> (e.g. ack/nack, activity status) and much more. In the example, the detail contains the contact “Alpha1” and a usericon entry that specifies an icon path (for custom symbols). The detail element is extensible – chat messages, video streams or sensor readings, for example, are also specified in the detail block (often with their own XML namespaces depending on the data type).

A minimal CoT event can do without the detail element altogether, as MITRE’s example of a simple point shows. ATAK plugins often use the detail element to carry proprietary payloads or flags, as long as all clients can interpret them.

Distribution and transport: In ATAK, CoT messages are sent either via UDP broadcast/multicast (directly within a mesh/team) or via TCP/SSL to a server, which then redistributes them to others. Early versions of ATAK used XML exclusively; newer versions also support a binary CoT variant based on Google Protocol Buffers (called TAK Protocol or CoT Proto) (TAK Protocol Description – Encode and Decode TAK data with Python). The same fields are packed into a compact binary format, which saves bandwidth and speeds up parsing. In the default “Mesh SA” mode, for example, ATAK 4.0+ sends CoT messages as Protobuf with a short fixed header (magic byte 0xBF, i.e. 191, followed by the protocol version), whereas the server streaming mode uses a variable-length header. For developers, this means integration can be done either with the XML format (easy to test and read) or with the Protobuf format (more efficient, but requires the .proto schema) – both are interoperable and carry identical content.

Use cases: CoT was designed to represent a very wide variety of events. Besides position points, areas (polygons), routes (polylines), sensor tracks or mission tasks can be modeled as CoT events (usually with more complex detail blocks or references to external files). ATAK uses CoT not only for tracking, but also for things like sending chat messages (the detail then contains e.g. <chat> with the text) or triggering alert events. Thanks to the loose coupling via CoT, other systems can also become part of the network without an ATAK plugin – as long as they speak the protocol. For example, there are IoT sensor platforms that publish events (such as gunshot detection) directly as CoT, which then pop up in ATAK.

In summary, Cursor on Target provides a uniform, event-based data format for real-time interoperability between a wide range of devices and applications. Its standardization (an XML schema is available) and broad use in the military and in civilian public safety agencies make CoT a key protocol for situational awareness systems. ATAK itself has done much to popularize CoT, demonstrating how powerful a common schema can be for any-to-any data exchange.

Differences Between ATAK and CivTAK

The military ATAK version and the civilian CivTAK version are based on the same codebase and are largely identical in terms of functionality. CivTAK was split off from ATAK to provide a version that can be freely distributed and used by civilian agencies, organizations and private individuals without export restrictions. Technically, there are only minor differences:

  • Available features/plugins: Certain military-specific functions are not included in CivTAK or are disabled by default. For example, ATAK (Mil) might include additional plugins for weapons effects, military sensors or encrypted radios that CivTAK lacks. According to the developers, the military version contains only “small, military-specific add-ons”. These could be specific symbol sets or integrations that are irrelevant to civilian users. One indication: the public ATAK-CIV source code contains some functions that are not (yet) accessible via the UI (The TAK Ecosystem: Military Coordination Goes Open Source | Hackaday) – possibly because they are only relevant to the military. The core features such as maps, navigation, CoT and the plugin interface, however, are identical.
  • Security modules: As mentioned, CivTAK uses only commercial/publicly permitted cryptography (AES-256, TLS). The highly classified encryption modules of the military version (e.g. for protecting NATO classified information) are not present in CivTAK. Instead, CivTAK users rely on AES and VPN, which is sufficient for most applications. ATAK-Mil may also be paired with special hardware (crypto chips, secure radios) – these interfaces would be useless in CivTAK and are therefore omitted.
  • Naming and symbology: Externally, the military ATAK is often referred to as the “Assault Kit”, while CivTAK goes by “Team Awareness Kit”. Within the app, however, terms and symbols are largely the same. Military units are displayed in CivTAK with the same MIL-STD-2525 symbols; the app simply avoids combat-related labels. So it does not feel like a “stripped-down” version – CivTAK is ATAK, just officially released for civilian use.
  • Versioning and release: ATAK (Mil) is distributed by the TAK Product Center to authorized users (via TAK.gov), whereas CivTAK is openly available (download via civtak.org, Google Play Store, GitHub). Since 2020, CivTAK versions have usually been released shortly after the TAK.gov releases, so both are largely in sync. For example, ATAK-CIV version 4.3 was released publicly shortly after ATAK-Mil 4.3. Publishing ATAK-CIV as open source has the advantage that community contributions can flow in – although the TAK Program Office decides which changes make it into the official build.
  • Support and usage: ATAK-Mil is used primarily by US and allied military users in exercises and operations; CivTAK has a growing user base among US agencies (fire departments, police, emergency management) as well as private users (e.g. hunters, hikers). Both variants can communicate with each other, though – a fire department team on CivTAK can, for example, share the operational picture with soldiers on ATAK (Mil) via common CoT servers, as long as they use the same network keys/certificates.

In conclusion, ATAK and CivTAK are technically almost equivalent, so developers who build plugins for CivTAK could use them in the military ATAK with minimal adjustments. The biggest difference lies in distribution and licensing: CivTAK is open source (partly public domain), while the military ATAK version is government off-the-shelf (GOTS) software and may only be used with authorization. For most development purposes, CivTAK is entirely sufficient – but if a plugin needs to address highly specialized military hardware, this would have to be done in cooperation with the military developers.

Open-Source Resources & SDKs

Opening up ATAK-CIV has given rise to a dedicated developer community. Numerous open-source resources, SDKs and community projects make it easier to get started and extend what is possible:

Equipped with these resources, a developer can work fairly autonomously in the TAK ecosystem: from setting up their own server infrastructure and building plugins to testing with other community members. CivTAK’s openness fosters innovation – new plugins and integrations are constantly being created and in turn given back to the community. For developers who want to write their own extensions, the ATAK Plugin SDK, the official examples and the exchange with experienced plugin developers are particularly valuable. The combination of a stable core platform (ATAK) and the flexibility of open-source plugins makes the system unique in this field and makes it possible to build complex situational awareness applications with comparatively little effort.

Marcel Neuroth Founder and Managing Director, TAK Hub

Marcel Neuroth is the founder and managing director of TAK Hub. He served as a soldier in Afghanistan and then studied mechatronics. In Ukraine he volunteered and later coordinated operations as a mission leader, including evacuations near the front line. He used ATAK himself on these missions. Today he and his team set up TAK systems for emergency services, train their personnel and support projects in Europe, Latin America and Southeast Asia.