atak-plugin-pipeline
Health Warn
- License — License: MIT
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 8 GitHub stars
Code Fail
- rm -rf — Recursive force deletion command in scripts/new-plugin.sh
- rm -rf — Recursive force deletion command in scripts/submission-zip.sh
- rm -rf — Recursive force deletion command in scripts/takgov-intake.sh
Permissions Pass
- Permissions — No dangerous permissions requested
No AI report is available for this listing yet.
How takwerx builds ATAK plugins and gets them through TAK's third-party signing pipeline, as a Claude Code skill. No SDK included.
atak-plugin-pipeline
How we build ATAK plugins and get them through TAK's third-party signing
pipeline, packaged as a Claude Code skill.
It covers scaffolding from the SDK template, ATAK-native UI, release builds,
the user manual and its Tool Preferences entry, the tak.gov source-submission
zip, reading what tak.gov sends back, the public plugin repo, and theversionCode rule an MDM needs.
It is a working set of gates, not a write-up. Each script refuses the mistake it
was written for, and every rule in it shipped broken at least once before it
became a rule.
Why
A plugin is not finished when it works on your phone. It is finished when a
stranger can install the right APK for their ATAK version, open the manual from
inside ATAK, and get the next version pushed to them without uninstalling
anything. Most of what goes wrong between those two points is silent: a
plugin that builds and will not load, a manual nobody can open, a signed APK
that reads as broken on the wrong phone, an update the MDM refuses because
every signed build says versionCode=1.
Install
git clone https://github.com/takwerx/atak-plugin-pipeline \
~/.claude/skills/atak-plugin-pipeline
Claude Code picks it up on the next session and uses it when you work on an
ATAK plugin, or on demand with /atak-plugin-pipeline. Update with git pull
in that directory.
To use the scripts from a shell as well:
source ~/.claude/skills/atak-plugin-pipeline/scripts/env.sh
You can also install it per project: clone it into <project>/.claude/skills/
instead. That is the better choice if you want the scripts versioned next to
the plugin.
The SDK is not here, and never will be
The ATAK-CIV SDK comes from tak.gov and nowhere else. Its
license lets you build plugins from it and forbids anyone to redistribute it.
So this repository contains no SDK code, resources or binaries, and neither
should yours. Each developer downloads their own SDK and unpacks it at~/atak-sdk/ATAK-CIV-<version>/, one directory per ATAK version they target.
The scripts find whatever versions are there. Nothing here is tied to one ATAK
release.
What this was measured against: ATAK-CIV SDKs 5.6.0.23, 5.7.0.14 and
5.8.0.3 from tak.gov, on physical phones running both official ATAK and the
SDK's developer build, with plugins that have been through the tak.gov
pipeline for all three targets.
The open ATAK-CIV source
(TAK-Product-Center/atak-civ)
currently goes up to 5.5.1.10. We have not built plugins against it, so nothing
here claims it works.
One-time setup
The SDK, as above.
ATAK_SDK_ROOToverrides the location.JDK 17 and the Android SDK (
platform-toolsfor adb, abuild-tools
for aapt and apksigner).scripts/env.shfinds both, or exportJAVA_HOME/ANDROID_HOME.Machine-local config in
~/.config/atak-plugins/(ATAK_CONFIG_DIR):mkdir -p ~/.config/atak-plugins # tak.gov requires a contact address in the submission README; this keeps it # out of the tracked tree. One line, injected into the README inside the zip. echo "Your Name, your org, your-address" > ~/.config/atak-plugins/submission-poc.txt # literals that must never be published: your addresses, device serials, # customer or site names. One per line, # comments. touch ~/.config/atak-plugins/publish-scrub.denylist~/atak-dist/(ATAK_DIST) for submission zips. Every tak.gov-signed
APK is filed undersigned/and every return's scans underscans/. Keep
them: "is this version an update" is measured against that folder.
Wire the gates in (recommended)
The checks only hold if they cannot be skipped. Copy the hooks into the project
and register them:
mkdir -p <project>/.claude/hooks
cp ~/.claude/skills/atak-plugin-pipeline/hooks/*.sh <project>/.claude/hooks/
<project>/.claude/settings.json:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{ "type": "command", "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/publish-guard.sh" },
{ "type": "command", "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/release-links-guard.sh" }
]
}
]
}
}
- publish-guard runs the publish scrub before any
git push,gh release createor submission zip, and blocks on findings. - release-links-guard runs the download-link and version-code checks before a
push to a plugin's public repo or agh release createthere.
Both find their scripts in the project first (<project>/scripts/), then in this
skill, so a project that vendors its own copies uses those.
Layout
The scripts do not care whether you keep one repo per plugin or a monorepo:
one repo per plugin a monorepo
<repo>/ <repo>/
app/build.gradle plugins/<Name>/app/build.gradle
settings.gradle plugins/<Other>/...
docs/user_manual/ scripts/ (if you vendor these)
Run them from the repo holding the plugin. ATAK_PLUGINS_ROOT overrides the
search if your plugins live somewhere else entirely.
What is in it
SKILL.md |
the pipeline in order, with the five traps that cost the most |
references/setup.md |
SDK, toolchain, build/install, which device proves what |
references/scaffold.md |
naming, scaffolding, build-file invariants, version targeting |
references/licensing.md |
the plugin's own license, and what came from the SDK |
references/ui.md |
ATAK-native UI, the context rule, surviving interruptions |
references/release-build.md |
release vs debug, proguard, when to security scan |
references/manual.md |
the manual and the Tool Preferences entry that reaches it |
references/submission.md |
the tak.gov zip, its gates, per-target builds, POC injection |
references/intake.md |
what tak.gov sends back: signed APK, Fortify, Dependency-Check, SBOM |
references/publishing.md |
public repo standard, versionCode/MDM, releases, links |
references/troubleshooting.md |
the logcat table, and what only looks like a regression |
scripts/ |
the gates, runnable |
hooks/ |
the same gates, wired so they cannot be skipped |
templates/ |
README skeleton, Tool Preferences plumbing, button style, typst task, license exception |
Adapt these, deliberately
- The point-of-contact file is the only place a real address belongs. Never
type one into a README, a commit, or any tracked file. - The denylist is yours to fill in. The scrub is only as good as it.
- The README standard in
templates/README.md.templateis what tak.gov's
reviewer reads and what your users land on. Keep the heading order. - The version scheme (
(MAJOR*10000 + MINOR*100 + PATCH) * 10000 + ATAK_MAJOR*1000 + ATAK_MINOR*10 + ATAK_PATCH) is arbitrary but must be
consistent forever. It only has to rise on every target and differ between
the targets of one release, and the gate checks it against every signed
release you have kept. - The distribution channel (step 8 in
SKILL.md) is the one piece nobody can
write for you. Whatever your users install from — a market catalog, an MDM, a
shared folder — updating it is part of the release, with a check.
Related
joshuafuller/atak-plugin-skill
is a good companion and installs alongside this one. It goes deeper on reading
ATAK's source and on instrumented tests inside ATAK. Its facts were measured on
one ATAK-CIV 5.8.0.1 emulator; ours on physical phones across 5.6, 5.7 and 5.8.
Where the two disagree, these are the three places, and what we measured:
- Do not gitignore template-derived files. That would exclude
gradle-wrapper.jar,app/build.gradleand the proguard files — exactly what
the submission zip requires — and make a tak.gov submission impossible. - "Incompatible" is not always a dev-vs-release signature problem. The
obfuscation failure (a signed APK on a developer ATAK) looks identical, and the
usual fix for the first — install the SDK'satak.apk— wipes the only device
that can validate a signed build. adb install -rplus loading from the plugin manager is the whole flow on
real phones; no copy into/sdcard/atak/support/apks/sideloaded/and no sync
is needed.
License and attribution
MIT. Contributions are welcome under the same terms; see
CONTRIBUTING.md.
This is an independent project. It is not affiliated with, endorsed by or
approved by the TAK Product Center or any part of the U.S. Government.
NOTICE.md says what is and is not in this repository.
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found