◤ GNU GPL · §6 corresponding source ◥

CORRESPONDING SOURCE

CicadaTAK distributes GPL-licensed software in its node image. Under the GNU General Public License, you are entitled to the complete corresponding source. Here is where to get it.

// One-stop archive

Complete corresponding source — downloadable archive (image v0.8.3)

Everything on this page in a single archive for image v0.8.3 (build 2026-08-09T17:30:30Z): the full OpenMANET/OpenWrt buildroot that image's node OS was built from — including every upstream source tarball the build consumes (Linux kernel, batman-adv, Morse Micro HaLow driver) — both CicadaTAK patches in place, pristine Meshtastic firmware source at both tags we build from, our GPL-3.0 sidecar, and the complete image build scripts. A README inside maps each piece to the binaries in the image.

2.1 GB · sha256 f500bc7ceb45d6434ddac9f7cf7ac3fffef255f49982546840891920eed31d9b

Download the archive ↓

Newer images. From release 0.13.0 the node OS is no longer built on OpenMANET: the baseline is OpenWrt 24.10 plus Morse Micro’s public package feed, and the OpenMANET board-support packages are not shipped. Every upstream component and both CicadaTAK patches are linked individually below, and each published image has a matching image-* tag in our source tree recording the exact tree state and artifact hashes. A single-archive build for 0.13.0 is not posted here yet — request it under the written offer at the bottom of this page and we will send it.

// Modified components

Morse Micro HaLow driver

Images from 0.23.0 ship Morse Micro’s stock morse_driver mm6108-2.0.1 release (rel_mm6108_2_0_1_2026_Jun_11) with one CicadaTAK patch, 901-cicadatak-expected-throughput: the driver reports a neighbour’s link throughput as measured delivery, so a dead link no longer advertises its PHY rate to the mesh routing. Only morse.ko changes; dot11ah.ko is stock. That release plus this patch is the complete corresponding source for the driver package we distribute (kmod-morse 6.6.151.mm6108-2.0.1-r1002), and the image’s CicadaTAK source archive carries both and the script that rebuilds the package:

Download the patch ↓

Images 0.13.0 to 0.22.0 shipped this driver unmodified.

Images up to and including 0.12.0 — MMRC rate-control fix. We shipped the morse_driver kernel module with one CicadaTAK patch to its MMRC rate controller. Stock MMRC can permanently stop sampling on links that carry few unicast frames per control cycle, latching the rate table at whatever it last converged to — we observed links stuck at MCS 0 with −40 dBm signal until re-association. The patch below applies against morse_driver 1.16.4-gateworks (driver commit dec5bc2, mm_rate_control submodule cf45ca7) — that exact base plus this patch is the complete corresponding source for the driver we distribute:

Download the patch ↓

batman-adv mesh routing module

Images from 0.23.0 ship batman-adv 2024.3 (GPL-2.0) as OpenWrt 24.10 builds it, with OpenWrt’s own patches, plus three CicadaTAK patches. 901-cicadatak-silent-router-yields: when the neighbour a route goes through goes silent on its link (sends no link probes), the route gives way to a live neighbour after ten of that neighbour’s link-probe intervals instead of waiting for the route to time out; the module parameter elp_silence_factor sets the ten, and 0 restores the stock behaviour. 902-cicadatak-mcast-expand-head-align: a multicast packet’s headroom grows in 64-byte steps, so its data stays aligned and odd-length multicast frames cross HaLow; cicadatak_mcast_align set to N restores the stock behaviour. 903-cicadatak-wifi-delivery-weight: a 2.4 GHz neighbour’s link metric is weighted by the share of its frames the radio reports delivered after retries, so a link whose radio reports losses ranks below one that delivers; cicadatak_delivery_exp set to 0 restores the stock behaviour. Only batman-adv.ko changes in the package; every other file in it is stock, and the image replaces one of them (below). It reports version 6.6.151.2024.3-r1013. The patches apply after OpenWrt’s; the exact upstream source and OpenWrt’s patches are in each image’s source archive, which also carries the script that rebuilds the package:

Download 901 ↓ Download 902 ↓ Download 903 ↓

The same images ship a changed copy of the package’s script that adds a radio to the mesh, /lib/netifd/proto/batadv_hardif.sh (GPL-2.0-only). Before any radio joins, it puts a virtual interface, primary0, into the mesh first, so a radio dropping out can never change the name the node has in the mesh. It is a shell script, so the file is its own source: it is in every image at that path, and here.

Download the script ↓

Images before 0.23.0 shipped this module and that script unmodified.

OpenWrt storage tools (fstools) and the boot hook that restores settings

Images from 0.23.0 ship OpenWrt’s fstools (2024.07.14~408c2cc4, GPL-2.0) with one CicadaTAK patch, 901-cicadatak-overlay-mount-failure-ramoverlay: when the node’s storage overlay exists but will not mount, the node starts from memory instead of staying on a read-only system with no network. It reports version 2024.07.14~408c2cc4-r1001. The patch applies against fstools as OpenWrt 24.10 builds it; the exact upstream source is in each image’s source archive.

Download the patch ↓

The same images ship a changed copy of OpenWrt’s Raspberry Pi (bcm27xx) boot hook /lib/preinit/79_move_config (GPL-2.0-only). When the node starts from memory, it copies the update’s settings archive instead of moving it, so a restart before the storage is repaired restores the settings again. It is a shell script, so the file is its own source: it is in every image at that path, and here.

Download the boot hook ↓

Images before 0.23.0 shipped both unmodified.

mt76 — the 2.4 GHz mesh radio’s driver core

Images from 0.23.0 ship mt76 2025.11.06 (eb567bc7, BSD-3-Clause-Clear) as OpenWrt 24.10 builds it, with OpenWrt’s own patches, plus one patch in the driver core (kmod-mt76-core), a backport of upstream’s own fix: 901-cicadatak-mt76-npu-mmio-only is openwrt/mt76 commit 2d9b52d (“wifi: mt76: restrict NPU/PPE active checks to MMIO devices”, July 2026), with its author, message and tags kept, re-based onto this version, plus one line that marks the built module. On a USB radio it puts the frames received in one block back in order before their replay check; without it, a frame resent after a later one had arrived was dropped after the radio had acknowledged it. Only mt76.ko changes; the package’s other files and the other mt76 modules in the image are stock. It reports version 6.6.151.2025.11.06~eb567bc7-r1001.

Download the patch ↓

Images before 0.23.0 shipped it stock.

Morse Micro HaLow mesh supplicant (wpa_supplicant_s1g)

Images from 0.23.0 ship Morse Micro’s hostap release mm6108-2.0.1 (BSD-3-Clause) as Morse Micro’s package feed builds it, with Morse Micro’s own patches, plus one CicadaTAK patch, 990-cicadatak-close-peer-holding-timer: when the node closes its HaLow link to one neighbour, it now lets go of that neighbour after the standard holding time even if the neighbour’s reply is lost, so the two link again instead of one side waiting forever. Only wpa_supplicant_s1g changes; wpa_cli_s1g and hostapd_s1g are stock. It reports version mm6108-2.0.1-r1003. The patch applies after Morse Micro’s; the exact upstream source is in each image’s source archive, which also carries the script that rebuilds the package:

Download the patch ↓

Images before 0.23.0 shipped it unmodified.

Meshtastic firmware

Images from 0.19.0 (2026-09-15) ship stock, unmodified upstream Meshtastic v2.7.26.54e0d8d on every LoRa board (Heltec V3, Heltec V4, RAK4631) — the release binaries as published by the Meshtastic project; their complete corresponding source is that tag as-is, no patch.

From 0.23.0 the image also carries that same stock v2.7.26.54e0d8d release build for nine further boards, so an operator can install it on a teammate's radio: SenseCAP T1000-E (tracker-t1000-e), Wio Tracker L1 (seeed_wio_tracker_L1), Heltec Mesh Node T114 (heltec-mesh-node-t114), Station G2 (station-g2), RAK WisMesh 1W Booster (rak3401-1watt), LilyGO T-Deck (t-deck), LilyGO T-Beam (tbeam), LilyGO T-Beam Supreme / S3 Core (tbeam-s3-core) and LilyGO T-Echo (t-echo). Each is the unmodified upstream release asset for that board's own build target, from the same tag — so for every one of the twelve, the complete corresponding source is meshtastic/firmware at v2.7.26.54e0d8d as-is, no patch.

Images up to 0.18.0 shipped the Heltec V3 / RAK4631 board with stock Meshtastic firmware plus one CicadaTAK patch (rotary-encoder UI, message history, canned messages), and that offer stands for those images. The patch below applies against upstream meshtastic/firmware tag v2.7.5.ddd1499 — that exact tag plus this patch is the complete corresponding source for the Heltec V3 and RAK4631 firmware we distribute:

Download the patch ↓

The Heltec V4 firmware was stock v2.7.26.54e0d8d in every image that carried one (from 2026-08-04) — the same tag every board runs from 0.19.0.

// First-party code

CicadaTAK Meshtastic sidecar — GPL-3.0

The Meshtastic sidecar daemon is our own first-party software, released under GPL-3.0 (it links the GPL Meshtastic Python library). Its complete Python source ships inside every node image at /opt/cicadatak/meshtastic-sidecar/ — the corresponding source travels with the binary, so there is nothing extra to fetch.

CicadaTAK gateway — proprietary

The CicadaTAK gateway is our own work and is proprietary in the published images. It is not covered by the corresponding-source offer on this page — see Attribution & licenses.

// Unmodified components

OpenWrt · Linux · morse-feed

We redistribute these unmodified. Their complete source is the upstream source. (The Morse Micro HaLow driver and the batman-adv mesh routing module used to be listed here — from 0.23.0 both are patched, and moved to the modified components above; images before 0.23.0 shipped batman-adv unmodified. OpenWrt’s fstools is patched from 0.23.0 too, also above.) OpenMANET applies to images up to and including 0.12.0, which were built on its baseline and shipped its bsp-common and bsp-bcm271x packages; it is kept here because those images were distributed and the written offer still covers them.

Bundled Python packages — esptool · Meshtastic

Two GPL-licensed Python packages ship unmodified in /opt/cicadatak/lib/ of every image from 0.13.0: esptool 4.8.1 (GPL-2.0-or-later), which writes firmware to an attached LoRa board and runs only as a separate program, and the Meshtastic Python library 2.7.8 (GPL-3.0), used only by the sidecar above. Both ship as readable source, so their source travels with them. Two parts are built rather than written by hand. The Meshtastic library's generated protobuf modules come from its upstream tag, with that tag's protobufs submodule. esptool's compiled flasher stubs are built in other projects: the GPL-2.0-or-later set from esptool-legacy-flasher-stub v1.3.0, and a second set, under Apache-2.0 or MIT with its licences beside it, from esp-flasher-stub v0.3.0.

MeshCore firmware — MIT, not GPL

Every image from 0.13.0 also carries the stock MeshCore Companion firmware companion-v1.17.0 (commit 727fc05) for the opt-in MeshCore LoRa protocol. MeshCore's own code is MIT-licensed, which asks for its notice rather than its source. From 0.23.0 the notice ships beside the firmware in the image. The firmware is built with three LGPL libraries, though (next card), so we provide their source, and MeshCore's public source is what lets you rebuild it with a changed library.

Libraries built into the radio firmware

Each LoRa radio firmware above is compiled together with libraries and an Arduino framework that its build fetches, not only with its own repository. We keep those for every firmware we have shipped, in one archive: the libraries and frameworks each firmware's build installs, for exactly the boards we ship, at Meshtastic v2.7.26.54e0d8d and v2.7.5.ddd1499 and MeshCore companion-v1.17.0 (about 334 MB). Request it under the written offer below. The compilers are not included: they are general-purpose tools, used unmodified.

Among those libraries, the Meshtastic firmware uses three under the GPL (ESP32 Codec2, QMC5883LCompass, RAK13800-W5100S). Adafruit NeoPixel (LGPL-3.0) is in every firmware, and the MeshCore firmware also uses Arduino_LPS22HB and MicroNMEA (LGPL-2.1).

The ESP32 boards' Arduino framework (LGPL-2.1-or-later) is in the archive as source. Its precompiled Espressif libraries were built from ESP-IDF v4.4.7 (38eeba213a), which Espressif publishes. One known limit: Espressif distributes its Wi-Fi, Bluetooth-controller and radio (PHY) libraries as binaries only. Espressif does not publish their source, so we cannot provide it.

// Can't find what you need?

For the exact source corresponding to any specific image we publish, or anything missing above, email info@cicadatak.com and we will provide it (download link or physical media) for at least three years from the date you obtained the image.