A native MeshCore LoRa client for ATAK. Off-grid position, chat and map objects for your team — no TAK server, no cell service, no amateur licence.
An ATAK plugin that bridges MeshCore LoRa mesh radios into TAK over the MeshCore companion-BLE protocol. It operates under Part 15 ISM — MeshCore traffic is encrypted, so no callsign is required and none is transmitted.
Licence: GPL-3.0-or-later · ATAK-CIV 5.6 and newer · Plugin version 1.0
Grab the TAK-signed APK from the Releases page, then follow docs/INSTALL.md — it covers radio setup, channel keys, pairing, and the mistakes that catch everyone.
You need retail ATAK-CIV 5.6+, two MeshCore companion-BLE radios (Heltec V3, RAK, T-Deck or similar), and a shared channel key.
Retail ATAK only loads plugins signed by the TAK Product Center pipeline. A locally-built APK will be refused regardless of version — it works only against an SDK developer build.
Peers on the map with their callsigns. Chat both directions through ATAK's own GeoChat, including real 1:1 conversations with delivery receipts. Automatic position beaconing taken from ATAK's self marker, so the radio needs no GPS of its own. Encrypted channel management with key fingerprints you can compare at a glance. Unattended reconnect after a dropped link or an ATAK restart.
Arbitrary CoT — markers, waypoints, drawings — rides a fountain-coded transfer path. That path is implemented and unit-tested but has not yet been verified on hardware; treat it as untested until this note goes away.
Full list, with the honest limits: docs/FEATURES.md. Release history and what is not yet in a signed build: CHANGELOG.md.
A mature ATAK plugin exists for Meshtastic; nothing equivalent existed for MeshCore. LoRa is slow and shared, so the interesting problem is not "get CoT onto the radio" — it is spending airtime honestly. This plugin computes LoRa time-on-air from the radio's own SF/BW/CR and spends it from a token bucket, packs the high-frequency types (position, chat) into hand-rolled binary codecs, and puts everything else through a rateless erasure-coded transfer path so a lost fragment doesn't cost the whole object.
docs/payload-spec.md is a normative specification of MCTAK — the
payload format carried inside MeshCore channel datagrams — with RFC-2119 language, a kind
registry, and an evolution contract. Golden test vectors live in
docs/payload-spec-fixtures/ and are byte-verified on every
test run.
It is intended to be sufficient for a clean-room implementation on another platform. If you build one, please open an issue — the spec has not yet been validated against a second independent implementation, and that is the one thing it needs most.
app/ The ATAK plugin.
src/main/java/…/meshcore/
companion/ MeshCore companion protocol client (BLE transport in ble/).
mctak/ MCTAK wire codecs — the reference implementation of the spec.
engine/ Airtime governor, dedup, classifier, fountain transfer engine.
plugin/ ATAK 5.x IPlugin lifecycle and tool registration.
src/test/ ~175 pure-JVM tests. No device or SDK required.
docs/
INSTALL.md Operator guide — start here to use it.
DEVELOPING.md Build, test, submit, and the traps. Start here to work on it.
FEATURES.md What it does, and what it deliberately does not.
payload-spec.md Normative MCTAK wire specification.
payload-spec-fixtures/ Golden vectors, byte-checked by FixtureVerifyTest.
architecture.md Design notes.
protocol-notes.md Reverse-engineering notes on the MeshCore companion protocol.
channels.md, chat.md Focused operator guides.
reference/ Distilled notes on upstream projects — not vendored source.
tools/ Python and shell helpers for bench testing against real radios.
branding/ Logo and icon sources.
Requires the ATAK-CIV 5.6 SDK from tak.gov (free account — 5.x SDKs are not on public GitHub). Full instructions, toolchain pins and the tak.gov submission recipe are in docs/DEVELOPING.md.
cp local.properties.template local.properties
./gradlew -PsdkPath=$PWD/sdk-5.6 -Ptakdev.plugin=$PWD/sdk-5.6/atak-gradle-takdev.jar assembleCivDebug
./gradlew test # codecs, engine and protocol — pure JVM, no SDK needed🛑 Never commit the SDK, a keystore, or local.properties. All are gitignored and none has
ever been in this repository.
Contributions are welcome — see CONTRIBUTING.md.
One thing to know up front: this project requires a signed Contributor Licence Agreement. meshcore-TAK is and will remain GPL-3.0, but some organisations cannot ship GPL code, and offering them separate commercial terms is only possible if one party holds sufficient rights in the whole work.
Security issues: please see SECURITY.md rather than opening a public issue.
GPL-3.0-or-later. See LICENSE for the full text, and COPYRIGHT.md for provenance — who owns what, what came from the ATAK plugin template, and why the relicensing option is intact.
Copyright © 2026 Off-Grid Cyberdeck LLC (d/b/a GRIDBASE).
Want to support? www.patreon.com/gridbase
Trademarks. The GPL grants rights in the code. It does not grant rights in the
GRIDBASE and MeshCore TAK names or the logos and icons in branding/. Forks are very
welcome and must simply use their own name and marks. "ATAK", "TAK" and "MeshCore" belong to
their respective owners; this project is not affiliated with or endorsed by the TAK Product
Center or the MeshCore project.
- MeshCore — https://github.com/ripplebiz/MeshCore
- ATAK-CIV — https://github.com/deptofdefense/AndroidTacticalAssaultKit-CIV
- Meshtastic ATAK plugin — https://github.com/meshtastic/ATAK-Plugin (studied as prior art; no code taken — see COPYRIGHT.md)