Meshtastic ATAK Plugin: pushing Cursor on Target events over a low-power mesh
ATAK Plugin for sending CoT to IMeshService
At a glance
- What is it?
- The Meshtastic ATAK Plugin bridges ATAK and the Meshtastic Android app, converting Cursor on Target events into mesh protobuf packets and back. It is a field integration tool with a narrow bandwidth budget, and several of its capabilities only work under specific radio and network conditions.
- Who is it for?
- Adopt the Meshtastic ATAK Plugin when your team operates ATAK over long-range, low-power links where cellular coverage fails, and when you can accept a 56KB file ceiling and English only voice memos. Do not adopt it as a general ATAK integration: the plugin needs a paired Meshtastic device, a channel, and a radio preset, and the actual work still happens inside the Meshtastic Android app.
- Can I use it commercially?
- Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Yes. The repository last received commits 141 days ago.
- What is it written in?
- Mainly C, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 20, 2026, and from our analysis. They are not legal advice.
Editorial analysis
The gap the plugin fills sits between ATAK and a radio mesh
ATAK handles Cursor on Target events over networks that assume reachability: a server, a cellular link, a VPN. Meshtastic is a mesh of low-power radio devices that reaches far beyond cell towers, but it does not speak CoT. The Meshtastic ATAK Plugin is the bridge, and its stated purpose is sending Cursor on Target events to IMeshService in the Meshtastic Android app. That makes the audience specific: tactical teams whose members carry both an ATAK install and a Meshtastic radio, and who need position, chat and event data to keep moving when the conventional link is gone. The plugin also works in the other direction, injecting mesh traffic back into ATAK as CoT events. The upstream project describes it as the official Meshtastic ATAK plugin, and it is written in C, packaged as an APK, and distributed under GPL-3.0. Everything it does runs on an Android device that already has both ATAK and the Meshtastic app installed.
How an ATAK event becomes a mesh packet and returns
The data flow is documented step by step, and it explains most of the design trade-offs. CoT events from ATAK are intercepted by the plugin, processed and converted into the Meshtastic protobuf format, and then sent through IMeshService to the connected device. The reverse path takes incoming Meshtastic packets, converts them back to CoT, and injects them into the ATAK event dispatcher. The middle step is where the size budget appears: messages larger than 231 bytes are encoded with fountain codes, described as LT codes, before transmission. The architecture is broken into named components, with MeshServiceManager handling the connection and communication with the Meshtastic Android app, CotEventProcessor converting between the two event formats, FountainChunkManager managing fountain encoding for large transfers, and NotificationHelper handling user notifications for file transfers. The v1.1.15 and later refactor split this into a modular layout with centralized service management and thread-safe singleton patterns for shared resources.
Three compression paths exist because the radio is tiny
Different payloads get different encodings, and the reason is packet size on a link that is slow and lossy. Generic CoT events use EXI compression, position and chat can use an optimized protobuf format, and anything above the threshold can be fountain encoded. The settings expose the trade-off directly, with an Only Send PLI and Chat toggle that switches to the optimized protobuf format and is marked as recommended for Meshtastic, off by default. Fountain code encoding exists specifically so that a large payload can be reconstructed from whichever fragments arrive, which suits a mesh where the path changes between hops. Hop Limit is configurable from 1 to 7 with a default of 3, and Request ACK is available but documented as increasing channel usage, so the confirmation of delivery is paid for in airtime. A reader planning a deployment should think of these settings as one budget: every extra feature, from delivery receipts to read receipts, spends on the same narrow channel.
Installing it means four steps and a paired radio
There is no package manager entry or command line install for end users. The documented path is to install the Meshtastic Android app from Google Play, install ATAK-CIV from tak.gov, download the latest plugin APK from the repository Releases page, and install that APK on the device, then launch ATAK and load the plugin from the plugins menu. Settings live under Settings, Tool Preferences, Specific Tool Preferences and then Meshtastic Preferences, and that screen is where channel index, hop limit, PLI interval, relay switches, file transfer and encryption are all configured. Note that the plugin needs the Meshtastic app present and a device paired, since the plugin talks to the radio through IMeshService rather than driving the radio itself. Building the plugin from a checkout takes a clone with submodules and a Gradle wrapper invocation, and the debug APK lands under app/build/outputs/apk/.
# Clone the repository
git clone --recurse-submodules https://github.com/meshtastic/ATAK-Plugin.git
cd ATAK-Plugin
# Configure local.properties with SDK paths and signing keys
cp local.properties.example local.properties
# Edit local.properties with your configuration
# Build the plugin
./gradlew assembleCivDebug
# Output APK will be in app/build/outputs/apk/Using the mesh radio as ATAK's GPS source
One feature is genuinely unusual and worth its own look: the plugin can act as an external GPS provider for ATAK, using the position packets coming from the Meshtastic device. The requirements are a Meshtastic device with a GPS receiver, the example given being a LILYGO T-Beam, with GPS enabled and configured in the device and position packets set up in the Meshtastic settings. On the ATAK side the operator opens Settings, Callsign and Device Preferences, Device Preferences, then GPS Preferences, and sets the GPS Option to ignore internal GPS and use external or network GPS only. Use Meshtastic GPS is then enabled in the plugin settings, and Show Meshtastic Devices is disabled to avoid duplicate markers on the map. This is a differentiator that no ordinary ATAK integration provides, and it is the clearest answer to the question of who should adopt the plugin.
File transfer caps at 56KB and needs Short_Turbo
The file transfer feature is the most constrained part of the plugin and the easiest place to be disappointed. Enable File Transfer is off by default, requires the Short_Turbo modem preset, and the stated maximum is 56KB. The README notes that a mission package or file is transferred using fountain code encoding, and NotificationHelper exists to notify the user during the transfer, which is a reasonable concession to how slow a fragmented transfer over a mesh can be. The dependency on Short_Turbo is a hardware and firmware configuration choice, not a runtime switch, so it has to be resolved on the radio before the ATAK side is relevant. A team expecting to push a large mission package over mesh should size the payload against that 56KB ceiling and against the 231 byte threshold above which every transfer becomes a multi-packet fountain reconstruction.
Server relay, encryption and voice memos each carry a catch
Three features have conditions that are easy to skim past. Relay to Server and Relay from Server are both off by default, and they forward CoT events between the mesh and connected TAK servers, which means the plugin can be a bridge in either direction rather than isolated. Extra Encryption is off by default and encrypts outgoing messages with AES-256-GCM using a pre-shared key that every user must share, so enabling it is a coordination problem as much as a code change. The Voice Memo tool records while a PTT key is held, the PTT KeyCode defaulting to 79, converts speech to text on release and transmits it, and recipients hear it if Text to Speech is enabled. The catch is stated plainly: speech recognition currently supports English only, powered by the Vosk speech recognition library. The ATI plugin also does not document a rollback path or a version compatibility matrix for specific ATAK builds.
Maintenance, licence and the cost of shipping a C plugin
The repository is not archived, and the last push was on 2026-06-04. Recent tagged versions are 1.1.38 on 2026-01-31, 1.1.40 on 2026-02-20 and 1.1.42 on 2026-03-31, and the version numbers skip even values along the way, which suggests a rolling scheme rather than a semantic release policy. The licence is GPL-3.0, and the practical implication for anyone embedding the code is copyleft obligations on derivative works, so review the LICENSE file before folding the source into a larger product. Building from source is documented: Android Studio Arctic Fox or later, Android SDK 33, the Android NDK and the ATAK SDK, with the ATAK SDK being CIV or MIL depending on the target. The clone step pulls submodules, which is why the recursion flag is present, and the build produces a debug APK through the Gradle wrapper.
Editorial conclusion
Adopt the Meshtastic ATAK Plugin when your team operates ATAK over long-range, low-power links where cellular coverage fails, and when you can accept a 56KB file ceiling and English only voice memos. Do not adopt it as a general ATAK integration: the plugin needs a paired Meshtastic device, a channel, and a radio preset, and the actual work still happens inside the Meshtastic Android app. Before deploying, verify on your own hardware that the Short_Turbo preset is available for file transfer, that your channel index matches across the team, and that the CoT message size stays under 231 bytes unless fountain encoding is enabled.
Frequently asked questions
How do I install the Meshtastic ATAK Plugin on an Android device?
Install the Meshtastic Android app and ATAK-CIV first, then download the plugin APK from the repository Releases page, install it on the device, and load the plugin from the ATAK plugins menu. Plugin options are then found under Settings, Tool Preferences, Specific Tool Preferences, Meshtastic Preferences.
What is the maximum file size the Meshtastic ATAK Plugin can transfer?
File transfer is limited to 56KB and is off by default. It also requires the Short_Turbo modem preset on the Meshtastic device, and large payloads are encoded with fountain codes for reconstruction from received fragments.
Can I use a Meshtastic device as the GPS source for ATAK?
Yes, the plugin has a Use Meshtastic GPS setting, and ATAK itself must be set to ignore internal GPS and use external or network GPS only under Device Preferences and GPS Preferences. The device needs a GPS receiver with position packets configured, and the example hardware given is a LILYGO T-Beam.
How does the Meshtastic ATAK Plugin handle messages larger than 231 bytes?
Messages above 231 bytes are encoded using fountain codes, described as LT codes, and managed by the FountainChunkManager component. The fragments are then sent through IMeshService to the connected Meshtastic device.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/meshtastic-atak-plugin)Was this useful?