Android

MeshSat Android changelog: mobile gateway app releases.

Every tagged release of the app, generated from the commit history of meshsat-android: features and fixes, newest first. Untagged work on the main branch is listed under Unreleased. Signed APKs are on the releases page; the repository’s CHANGELOG.md carries the same history in Keep a Changelog form.

See v2.24.0 for the latest tagged changes. Later commits are listed under Unreleased.

Unreleased (main)

No user-facing changes (2 commits of other types).

v2.24.0 (2026-10-29)

Features

  • kits: a field kit on the LAN has its own card under Setup, with its address and the API token the kit may ask for, kept in the encrypted preferences and sent as the Bearer on every direct request; a 401 becomes one line asking for the token; through the Hub relay nothing changes (f124aacd)
  • warnings: a public warning a MeshSat kit relays over the mesh, on ALERT_APP or as a text with the kit’s relay line, sounds the alarm, fills the screen while the app is open and stays under Setup > Safety > Warnings until the kit’s cancel or a newer one of its event; a TEST warning says so with the normal sound (b1a71405)
  • lxmf: a voice note and a photo ride in a message’s LXMF fields, are kept with the row, played and shown in the chat, and go on a Reticulum link only (aed83984)

Fixes

  • privacy: nothing goes online before it is asked for: the map is built when its tab is first opened, orbit data is downloaded once a satellite modem is set up, the welcome asks for each permission once, and no SMS log line carries a number or a text (a5a1dd3b)

v2.23.0 (2026-10-26)

Features

  • tak: a dispatcher’s TAK chat to this phone arrives as a message with a notification, and the answer goes back to the dispatcher (4b2640a5)

Fixes

  • node: what a node in its updater is left with belongs to the recovery session, so a later attempt never says the old firmware is still there after an earlier one erased it, and a recovery without history never claims it (ab2383ec)
  • node: a firmware update that stops once the node went to its updater keeps the image and its address and offers a retry, saying whether the old firmware may be erased (7122d40c)
Older releases (144)

v2.22.8 (2026-10-24)

Features

  • node: Check for update fetches the newest MeshSat firmware for the node’s own build and checks its size and SHA-256; the update scans for the node’s updater first (9eaf6570)

Fixes

  • node: the firmware card shows the release as available beside the version on the node, never as newer, because a version ends in a commit hash (d23d1cc9)
  • 9704: the modem’s segment request is answered the moment it is read, ahead of signal reads, MT handling and other Bluetooth writes; the signal shows its age once stale (00433b4a)

v2.22.7 (2026-10-24)

Fixes

  • satellite: a plain text behind the version byte opens as a plain message on a phone that seals nothing, instead of cannot open (f82ae17a)

v2.22.6 (2026-10-24)

Fixes

  • node: a cached Bluetooth table without CONTROL is dropped and discovered again, so the switches show after a firmware update (d3f3aa50)

v2.22.5 (2026-10-24)

Features

  • node: update the node’s firmware from a file over Bluetooth, through the OTA loader in its app1 (7079541c)
  • node: switch the node’s status LED and screen on and off from Settings, through the node’s CONTROL characteristic (3a1bf4d2)

Fixes

  • node: the firmware update waits at most 300 ms for a write-without-response report, the updater’s ACK being the flow control (acbe5125)

v2.22.4 (2026-10-24)

Features

  • sms: SMS go out in app SMS wire v2, whose frame names its codec inside the ciphertext, and the receiver reads v2 by it and v1 by the old rule (645ca3bf)
  • directory: the phone reads its organisation’s contacts and groups from the Hub, signed by the key it pinned from its provisioning bundle, and follows the Hub’s key rotations (fc7b8f12)
  • lxmf: every LXMF message the app writes carries its message id, and a repeat of one already taken is dropped, also after a restart (6ed801eb)

Fixes

  • iridium: a 9704 send that saw no satellite comes back within a minute instead of on the 9603’s 30-minute schedule, and an unanswered signal read keeps the last bars instead of showing 0 (83972b9b)
  • sms: what the key opens outranks a clear SMS wire v2 reading of the same bytes, so an old sealed SMS whose nonce starts like a v2 header reads as its words (3f327e66)
  • directory: a reprovision to another Hub, bridge, topic root or tenant starts the directory over even under the same key, takes only the bundle’s tenant, and drops a reply from before (22d445b9)
  • lxmf: an inbound message and its id are filed in one Room transaction and shown only once filed, so a failed write can be taken again (a8e4dbe5)
  • sms: a single Greek word or emoji SMS that was never compressed reads back as sent, not as SMAZ2 (cbb258ac)
  • codec: text with bytes 0x01-0x08 survives SMAZ2 with the default table, as on the Bridge, and every other text compresses exactly as before (a1a3b917)
  • iridium: the 9704’s firmware version comes from the modem’s firmware query, and malformed segment fields from the modem are ignored instead of crashing the driver (e6bac086)
  • sms: an encrypted SMS that was never compressed, such as Greek text, reads back as sent instead of as SMAZ2 gibberish (54de9eb1)

v2.22.3 (2026-10-22)

Features

  • satellite: Settings shows the satellite key’s check value to compare with the kit’s, and the service’s satellite send and receive are the tested chain steps themselves (20e004d8)

v2.22.2 (2026-10-22)

Features

  • satellite: the satellite chain can roll back to the kits’ old chain (smaz2, encrypt, base64) both ways, and its key is read as iridium:shared only, never another channel’s shared key (2c991c52)

Fixes

  • hub: births go out one at a time from one worker, so an older birth taken late can no longer clear a newer one that failed, and a stamp always labels the snapshot built with it (c6c43848)

v2.22.1 (2026-10-22)

No user-facing changes (1 commits of other types).

v2.22.0 (2026-10-22)

Features

  • satellite: the app reads and writes the kits’ encrypted satellite chain over the 9704 and declares it to the Hub with ordered birth stamps (4d0c70c8)
  • sos: an SOS carries its own id, so the Hub pages once whichever routes carry it, and its cancel goes until the Hub has it (26faed19)
  • messages: texts to another MeshSat app or kit through the Hub, marked delivered only on the recipient app’s own answer (b0a84f5c)
  • hub: a phone provisioned into an organisation’s tenant publishes and subscribes under that tenant’s topic root (e5af6337)

Fixes

  • hub: a ready 9704 reads online on the Hub, not offline (0249d1a6)
  • sms: a compressed SMS whose text is Greek or other non-English is shown as text, not as its raw bytes (3adc16ea)
  • sms: a compressed SMS with Greek or other non-ASCII text reads back as it was sent instead of garbage (31f3aefb)
  • sos: an owed SOS cancel is never dropped to make room, however many SOS follow (457b8338)
  • sos: an SOS cancel is no longer lost to a failed enqueue, a new SOS, or a cancel during the first Hub publish (e1cbcac0)
  • messages: a reconnect in the middle of a Hub pass no longer hides a lost status, and nothing goes out before the Hub subscriptions hold (3073d3d1)
  • messages: the Hub bridge id field takes the id as typed, without autocorrect (f1c53dff)
  • ui: the welcome screen headings show on the dark background instead of black on black (607b7f77)
  • reticulum: Reticulum over the Hub’s MQTT publishes under the tenant’s topic root too (3f94112e)
  • iridium: a satellite send that ends uncertain no longer takes back “The Hub has it” from an earlier session’s receipt (28fb5279)
  • delivery: a delivery report that lands while a send is out is never undone by the worker, and a confirmed delivery is never sent again (89abb0b0)
  • sms: a delivery report and the outcome it leads to are saved together, a failure never takes back a delivered SMS, and a send’s part count is fixed before it goes out (b90c94e9)
  • sms: a long SMS shows delivered only once every part is, and a CDMA delivery report is read as one (0b144032)
  • delivery: each channel’s pending acks time out on its own timeout, a mesh broadcast no longer waits for an ack, only an SMS the phone confirmed shows delivered, and a late ack is kept (534224b1)

v2.21.0 (2026-10-13)

Features

  • rns: an RNode on USB OTG or Bluetooth LE puts the phone on a LoRa mesh (8a315885)
  • rns: AutoInterface, so Sideband and rnsd on the same WiFi find the phone by themselves (771f6d71)
  • lxmf: messages through a propagation node, syncing from one, and all four send methods (5977ed6c)

v2.20.0 (2026-10-13)

Features

  • api: Reticulum link settings through the local API (55497fd2)
  • rns: the phone listens for Reticulum peers on this WiFi over TCP (6f82efe9)
  • ui: Reticulum conversations: an LXMF address to copy, a name, Announce now, Direct or Auto on send, delivery marks (167aff09)
  • rns: the node and LXMF run in the app, with the 9704 as a paid Reticulum link (e2540c34)
  • lxmf: LXMF messages, verified against Python LXMF 1.2.0 (7b5e13ac)
  • rns: the Reticulum node: paths, transport, links, proofs and resources, verified against Python RNS 1.5.5 (bd960ede)
  • rns: the upstream Reticulum wire format, verified against Python RNS 1.5.5 (4b846426)

Fixes

  • rns: a neighbour heard across the satellite gets HEADER_1 packets, whatever its extra hops (35d03f2e)
  • rns: one interface instance per transport, started and wired for receive (860aa04f)

v2.19.13 (2026-10-08)

Fixes

  • api: the local API answers only adb and the app itself (dff3da70)

v2.19.12 (2026-10-08)

Fixes

  • iridium: a 9704 message that fails leaves the link’s state alone (f58bde99)

v2.19.11 (2026-10-08)

Fixes

  • iridium: messages for the satellite go out through the node’s 9704 when it carries one (141d7087)
  • iridium: a 9704 send that sees no satellite is cancelled in the modem before it is retried (39c66d11)

v2.19.10 (2026-10-08)

Fixes

  • iridium: a 9704 behind the node’s pipe tries its start again until it answers (306fcdca)

v2.19.9 (2026-10-08)

Features

  • iridium: the node says which modem it carries; the app follows it (4da8b990)

v2.19.8 (2026-10-08)

Features

  • iridium: the 9704 driver runs over the MeshSat node’s pipe; Settings says which modem the node carries (0ae49684)

v2.19.7 (2026-10-03)

Fixes

  • security: no backups of the app’s data, and release builds speak TLS only (713490dc)

v2.19.6 (2026-10-02)

Fixes

  • tak: a phone that lies still reports its position to TAK once a minute (41da6a3e)

v2.19.5 (2026-10-02)

Fixes

  • tak: the phone sends its TAK messages to the Hub, and shows what the Hub delivers back (f115c83a)

v2.19.4 (2026-09-27)

Fixes

  • satellite: re-read STATS every 10 s while the Node health card is on screen (b037f3c3)
  • ble: refresh Android’s cached GATT table when the node’s pipe comes back without STATS (8280ef20)

v2.19.3 (2026-09-27)

Features

  • node: Setup > Advanced > Node log, the node’s live log over Bluetooth (06560a31)
  • satellite: node health card from STATS, pass windows to the node, STATUS v2 accepted (53643634)

Fixes

  • satellite: a BLE drop ends the AT command at once, no session on reconnect, Reticulum ToRadio decodes (b456e1af)

v2.19.2 (2026-09-25)

Features

  • ci: publish-play uploads each tag’s Play bundle to a Console track (c928b4df)

Fixes

  • play: screenshots at exactly 9:16, what the store listing form takes (fb1c20a4)
  • play: screenshots padded to 2:1, the ratio Play accepts (8687316f)

v2.19.1 (2026-09-25)

Fixes

  • test: drop the Paho bug demonstration that goes either way on the CI runner (1254ccc7)
  • build: vcsInfo belongs to the release build type (bac24329)
  • build: keep the git commit out of the APK so F-Droid can reproduce it (5c85f341)

v2.19.0 (2026-09-25)

Features

  • build: target Android 16 (SDK 36) with AGP 8.10.1, as Google Play requires (541c7ae1)
  • play: a Google Play edition without SMS as the play flavor; fdroid stays the full app (7abd12bd)

Fixes

  • test: the Paho reconnect test waits for the next backoff step instead of assuming 3 s (d310ab95)

v2.18.26 (2026-09-21)

Features

  • node: the node’s battery, voltage and time left on Home and the node screen (63bbd4e7)

v2.18.25 (2026-09-21)

Fixes

  • hub: the wait for the Hub’s settings shows on screen and carries on when you leave it (6711d1b7)
  • hub: a stopped gateway left its old Hub connection retrying under the same client id (ab8d596e)

v2.18.24 (2026-09-21)

Fixes

  • passes: the fallback orbit download repeated some satellites and skipped others (82f7b9f4)

v2.18.23 (2026-09-21)

Fixes

  • passes: the SGP4 propagator put every satellite in the wrong place (35b0bba2)

v2.18.22 (2026-09-21)

Fixes

  • ui: the signal vs passes chart replaces the Home sparkline, and the passes screen fits a small phone (17f9f8c5)
  • hub: a scanned Hub QR code waits for the Hub instead of failing when its broker is not ready (24a94fea)

v2.18.21 (2026-09-21)

Features

  • passes: signal vs passes like the Bridge’s, on Home and the passes screen (2fff4f86)

v2.18.20 (2026-09-21)

Fixes

  • ui: the QR scanner opened sideways and full screen (d4407734)
  • ui: the Hub card said “Not set up” while the phone was connected to the Hub (78f09bb6)
  • hub: a failed first connect to the Hub was never tried again (43dedcc5)

v2.18.19 (2026-09-21)

Fixes

  • relay: every other request to a kit through the Hub relay failed (f495f24f)

v2.18.18 (2026-09-21)

Fixes

  • relay: a request to a kit through the Hub relay was refused on every phone (03afba53)

v2.18.17 (2026-09-21)

Features

  • relay: reach a kit’s own API through the Hub relay from the phone, timed (ad75d16d)

Fixes

  • hub: say why the Hub is unreachable, and connect after provisioning without a restart (4d09771b)

v2.18.16 (2026-09-21)

Fixes

  • sms: “Allow SMS” did nothing when Android refused without asking (f80a0c30)

v2.18.15 (2026-09-21)

Fixes

  • iridium: a long satellite message was cut into parts the Hub reads as something else (72693c87)

v2.18.14 (2026-09-21)

Fixes

  • sos: the contact picker still asked which app to use (c1341d6b)

v2.18.13 (2026-09-21)

Fixes

  • sos: choosing an emergency contact went through “Contacts or Solid Explorer?” first (09eb47e3)
  • config: an imported config was ignored by the running gateway until it restarted (6ab744a3)

v2.18.12 (2026-09-21)

Features

  • sos: choose emergency contacts from the phone’s contacts instead of typing the number (2b1bf27b)

v2.18.11 (2026-09-21)

Fixes

  • hub: a message passed on to the Hub is filed under who sent it, not under the satellite modem (3902589a)

v2.18.10 (2026-09-21)

Fixes

  • ui: with Bluetooth off, the banner said “Cannot reach your MeshSat node” instead of saying so (5956f659)

v2.18.9 (2026-09-21)

Fixes

  • mesh: typed mesh messages went out as coded frames no other radio could read (30bfd782)
  • mesh: a node’s name announced on the air was dropped, so it stayed “Node !4370c1d8” (92b7ea9a)

v2.18.8 (2026-09-21)

Features

  • mesh: apply a whole node profile in one go, and read the full node config back (bb75214f)

Fixes

  • ble: switching Bluetooth off lost the node until the app was restarted (41fac937)

v2.18.7 (2026-09-21)

Fixes

  • rules: the rule editor’s “Hub” was a dead link, and the real one had no name (9f5f8324)

v2.18.6 (2026-09-20)

No user-facing changes (0 commits of other types).

v2.18.5 (2026-09-20)

Features

  • rules: say so when a rule sends the Hub a second copy of a satellite message (7b684610)

v2.18.4 (2026-09-20)

Fixes

  • ui: the node banner said “No your MeshSat node”, and lied about since when (7874d1eb)

v2.18.3 (2026-09-20)

No user-facing changes (1 commits of other types).

v2.18.2 (2026-09-20)

Fixes

  • hub: send the satellite channel values after all (38260976)

v2.18.1 (2026-09-20)

Fixes

  • hub: hold back the satellite channel values (8d9ef7e6)

v2.18.0 (2026-09-20)

Fixes

  • hub: tell the Hub which link a forwarded message arrived on (a8271424)

v2.17.2 (2026-09-20)

Fixes

  • sms: stop claiming SMS is not allowed, and name the fallback number honestly (b74fe0b7)

v2.17.1 (2026-09-20)

Fixes

  • sms: a message that arrives by SMS now goes through the rules (a7781675)

v2.17.0 (2026-09-20)

Features

  • ui: say on every screen when the phone cannot reach its node (08a5a205)

v2.16.2 (2026-09-20)

No user-facing changes (1 commits of other types).

v2.16.1 (2026-09-20)

Fixes

  • people: the Paste button broke across two lines (870cded8)

v2.16.0 (2026-09-20)

Features

  • people: swap contact cards face to face by QR code (c80afb88)

v2.15.1 (2026-09-20)

Fixes

  • hub: follow the Hub client from where it is made (9ec6e887)

v2.15.0 (2026-09-20)

Fixes

  • hub: show the Hub link the phone really uses, and let a rule reach it (42d9d3ec)
  • hemb: put the compact header on the Bridge’s bits (87b32c5f)
  • ui: About said the 9603 talks over HC-05, which it has not since 2.9.0 (094dc131)

v2.14.9 (2026-09-20)

Fixes

  • iridium: tell a failed write apart from a modem handover (c9b6a95b)
  • iridium: notice when the node’s modem stops taking writes (23a48b1e)

v2.14.8 (2026-09-20)

Fixes

  • iridium: drop a satellite message from the modem once it is stored (6f45f147)
  • hemb: read the stream id the way the Bridge writes it, and reap on a monotonic clock (fd899aae)

v2.14.7 (2026-09-20)

No user-facing changes (0 commits of other types).

v2.14.6 (2026-09-20)

No user-facing changes (1 commits of other types).

v2.14.5 (2026-09-19)

Fixes

  • iridium: the satellite signal is what the modem can actually hear (bd6626e2)

v2.14.4 (2026-09-19)

Fixes

  • iridium: a satellite message is sent once, and goes as soon as the modem sees a satellite (a526f641)

v2.14.3 (2026-09-19)

No user-facing changes (1 commits of other types).

v2.14.2 (2026-09-19)

Fixes

  • map: the map is dark like the rest of the app (bb60a741)

v2.14.1 (2026-09-19)

Features

  • ui: the mesh and satellite icons come from the MeshSat mark (1b06750b)

v2.14.0 (2026-09-19)

Features

  • messages: a second tick when the Hub has a satellite message or the carrier delivered an SMS (ecd76fae)

v2.13.1 (2026-09-19)

Fixes

  • messages: a conversation’s preview is its newest message, not its oldest (3b891c38)

v2.13.0 (2026-09-19)

Features

  • service: an option to start the gateway after a phone restart (ed73b1c6)
  • ui: a welcome that says what each permission is for, a getting-started list, and a red night mode (f408854b)
  • sos: hold to send, emergency contacts, every route retried until you cancel, and a real alarm test (757cf79b)

Fixes

  • ui: the Hub page starts from its QR code, and dead or misleading controls work or are gone (05ded118)
  • ui: no crash when the radios appear while a screen is open (f1cafa89)
  • sms: SMS works on phones with Android 8 to 12 (0e878be7)

v2.12.0 (2026-09-19)

Features

  • people: message a node or find it on the map from People; the offline map opens where it has detail (1bc7e521)
  • messages: conversations are with someone, mesh replies reach them, and a new message asks who it is for (373241d2)

Fixes

  • iridium: a message that arrives during any satellite session is stored at once (05bcdff6)
  • map: the map works off-grid, keeps its space and its zoom, and zones are placed on it (95b7eb2e)
  • mesh: a real mesh topology, correct signal readings, node details, and radio settings that never send what was not read (d02d999d)
  • ui: routing rules, the message queue, links and the audit log speak plainly and keep what you set (5b1ce69e)

v2.11.1 (2026-09-19)

Fixes

  • iridium: the satellite queue sends in order, waits out the modem’s pause, and says when a message may have arrived (2d28bc54)

v2.11.0 (2026-09-19)

Features

  • ui: Home shows how a message can get out, and Setup replaces the long Settings scroll (6e80b82d)

v2.10.0 (2026-09-19)

Features

  • ui: the MeshSat brand throughout the app: Space Black, Signal Orange, IBM Plex and the approved mark (4fe382dd)

v2.9.11 (2026-09-19)

Fixes

  • iridium: the satellite icon actually shows in the status bar (f6e5410d)

v2.9.10 (2026-09-19)

Features

  • ble: reconnect to the MeshSat node and take its modem by itself (8e944e21)

v2.9.9 (2026-09-19)

Fixes

  • iridium: a modem notice no longer stalls the satellite queue (535380b2)

v2.9.8 (2026-09-19)

Fixes

  • iridium: wait for the node’s modem to answer before probing it (6a001616)

v2.9.7 (2026-09-19)

Fixes

  • messages: the message box stays above the keyboard, and sent messages show a delivery mark (aeafb65c)

v2.9.6 (2026-09-19)

Features

  • passes: refresh Iridium elements from the TLE API when Celestrak cannot be reached (a4a67179)

v2.9.5 (2026-09-19)

Fixes

  • iridium: a satellite message is queued and retried, never dropped (cebc96aa)

v2.9.4 (2026-09-19)

Features

  • iridium: a satellite icon with the signal bars in the status bar (52b92a7b)
  • passes: predict Iridium passes fully offline, from elements shipped in the app (302d9834)

v2.9.3 (2026-09-19)

Features

  • messages: New message sends over the satellite or the mesh from an empty inbox (2f24a340)

v2.9.2 (2026-09-19)

Features

  • iridium: Check Mailbox asks the satellite for waiting messages on request (f4a79a6c)

v2.9.1 (2026-09-19)

Fixes

  • mesh: keep protobuf field names in release builds, so the Meshtastic sync runs (b541caae)

v2.9.0 (2026-09-19)

Features

  • iridium: the RockBLOCK 9603 runs through the MeshSat node’s BLE pipe, replacing HC-05 (1cb42786)
  • app: the app is now net.meshsat.android (ff684488)

Fixes

  • mesh: talk to real Meshtastic firmware over BLE (c86c0552)

v2.8.7 (2026-09-19)

Features

  • provision: open meshsat://provision links, showing the Hub before anything is fetched (b32ee019)
  • hub: relay client, a tunnel through the Hub to reach a kit behind NAT (204d92e8)
  • sdd-tier6: customer-facing CHANGELOG.md generated from git history (0d27a5ec)
  • sdd-tier5: per-tag release notes generated from outcomes (d262d7e0)
  • sdd-tier4: CI gate + retrospective outcomes (7f22a811)
  • sdd-tier3: acceptance test mappings + worker dispatch packets (188d2c51)
  • sdd-tier2: observability blocks on every task (2ce17568)

Fixes

  • hub: subscribe and announce again after a reconnect, and report modem IMEIs in the birth (018eb795)
  • hub: keep the MQTT client in release builds so the app reaches the Hub again (4c3518eb)
  • hub: force TLS SNI on Hub MQTT sockets (088c6d7b)
  • sdd: recount metrics, drop Astrocast, pin the SDD validator (a395ea4b)
  • license: align all licence statements to GPLv3 and add NOTICE (7ce6351b)

v2.8.6 (2026-04-05)

Features

  • telemetry: local release telemetry ring buffer (f6db9324)

v2.8.5 (2026-04-05)

Features

  • crypto: TOFU key pinning in KeyBundleImporter + bundle v2 (f1ea6960)

v2.8.4 (2026-04-05)

Fixes

  • transport: gate all I/O on connection state, silence disconnected-state spam (6ae63557)

v2.8.3 (2026-04-05)

Fixes

  • sat: correct ms/sec unit mismatch in PassScheduler OOM (07f405aa)
  • satellite: cache pass predictions to prevent OOM in PassScheduler (165dc7ec)

v2.8.2 (2026-04-05)

Fixes

  • crypto: move BouncyCastle to end of JCA provider chain (4ece0ea1)

v2.8.1 (2026-04-05)

Fixes

  • proguard: add osmdroid keep rules to prevent white map tiles on release (e31a8a46)

v2.8.0 (2026-04-05)

Features

  • ci: add release signing with OpenBao + Play Store AAB (32f3652c)

Fixes

  • proguard: add dontwarn rules for Tink compile-time annotations (ad4499dd)

v2.7.0 (2026-04-04)

Features

  • tak: receive TAK positions from Hub broadcast + settings API (b64ab9a2)
  • map: TAK/CoT-compliant Canvas markers: diamond, square, emergency (d286d672)
  • tak: protobuf v1 + waypoint builder + enriched position (8c400ff4)
  • tak: add TAK Settings section with enable/callsign/output toggles (e122a0ac)
  • sms: auto-forward + /api/sms/auto-forward endpoint (c3425937)
  • api: add /api/sms/send to Android LocalApiServer (296cf1b6)
  • sms: Android outbound SMAZ2 compress + wildcard key encrypt (6d638416)
  • codec: port SMAZ2 compressor/decompressor to Kotlin (f426352d)

Fixes

  • map: replace zoomToBoundingBox with direct center+zoom (9122bad8)
  • map: debounce Room position Flow to prevent ANR from marker burst (5be19540)
  • map: prevent ANR from repeated zoomToBoundingBox on marker updates (67b563a8)
  • mqtt: subscribe to TAK broadcast topic for fleet-wide positions (a3a9cb0d)
  • tak: use CotPrecision camelCase field names (altSrc, geoPointSrc) (7e6dc96f)
  • tak: use explicit getters for PrecisionLocation proto fields (dfe31b7d)
  • tak: use java_package imports for proto-generated classes (d1d66756)
  • tak: correct protobuf class names for java_multiple_files + proto3 (c2c928e8)
  • tak: use explicit hasXxx() checks in protoToCotEvent (67855d65)
  • sms: show SmsReceiver-decrypted text in Messages UI (7f96ca55)
  • sms: fall back to Hub wildcard key (sms:*) for SMS decryption (5bdd2203)
  • hemb: synchronize RLNC decoder to prevent concurrent ArrayIndexOutOfBounds (5c77d3b8)
  • hemb: wire HeMB inbound detection on Android RnsTransportNode (9ea3c81b)

v2.6.1 (2026-03-31)

Fixes

  • hemb: backport 2 HeMB bug fixes from bridge E2E integration (6282976b)

v2.6.0 (2026-03-29)

Features

  • hemb: port HeMB bearer bonding protocol to Android (f83a402c)

v2.5.0 (2026-03-29)

Features

  • reticulum: TLS+mTLS for TCP interface, BouncyCastle for Android 16 (4bd91ac6)

v2.4.1 (2026-03-29)

Fixes

  • hub: ping button uses HubReporter client, not MqttTransport (f38fb17d)

v2.4.0 (2026-03-29)

Fixes

  • mqtt: mTLS trust store must include system CAs alongside custom CA (ad7068af)

v2.3.1 (2026-03-29)

Features

  • hub: ECDSA-P256 signed birth messages for Hub verification (1dfa61b6)

v2.3.0 (2026-03-29)

Features

  • hub: health LED, ping button, QR auto-populate fix (78a61af2)

v2.2.2 (2026-03-28)

Fixes

  • provision: support both inline and nonce QR formats (1419425d)

v2.2.1 (2026-03-28)

Features

  • provision: two-step QR provisioning (nonce URL + HTTPS claim) (b397165d)

v2.2.0 (2026-03-28)

Features

  • provision: QR code Hub provisioning with mTLS auto-config (c2c049aa)

v2.1.0 (2026-03-28)

Features

  • reticulum: wire MQTT Reticulum interface for Hub interop (42e6fba0)

v2.0.1 (2026-03-28)

Features

  • timesync: add Cellular NITZ as stratum 0 time source (475b3d92)

Fixes

  • protocol: paid interface filter + bridge-compatible wire formats (192824e7)

v2.0.0 (2026-03-28)

Features

  • protocol: DTN + FEC + Time Sync + RLNC protocol enhancements (6961c7ca)

v1.9.1 (2026-03-28)

Fixes

  • map: use online OSM tiles: MBTiles offline never rendered (8d75d804)

v1.9.0 (2026-03-28)

Fixes

  • map: use osmdroid auto-detect for MBTiles + MapScreen outside NavHost (24ec8ded)

v1.8.5 (2026-03-28)

Fixes

  • map: move MapScreen outside NavHost to prevent view detachment (62f7468b)

v1.8.4 (2026-03-27)

Fixes

  • map: restart tile provider threads after view re-attach (86fbc747)

v1.8.3 (2026-03-27)

Fixes

  • map: singleton MapView to survive Compose NavHost tab switches (56932e21)

v1.8.2 (2026-03-27)

Fixes

  • map: proper osmdroid lifecycle management for tile persistence (f7334de1)

v1.8.1 (2026-03-27)

Fixes

  • map: tile provider persistence and dark mode color inversion (11a5f174)

v1.8.0 (2026-03-27)

Features

  • map: replace Leaflet/WebView with osmdroid native map rendering (ac4f5e02)

v1.7.1 (2026-03-27)

Features

  • map: vector tile rendering, offline-first, bundled world map (d5a8dd4d)

v1.7.0 (2026-03-27)

Features

  • map: vector tile rendering with dark/light themes and offline-first default (c8cc0d15)

v1.6.0 (2026-03-27)

Features

  • map: offline MBTiles map tile support (2237f093)

v1.5.5 (2026-03-27)

Fixes

  • crypto: nuclear reset for corrupted EncryptedSharedPreferences (6e083d76)

v1.5.4 (2026-03-27)

Fixes

  • map: load tiles via WebViewAssetLoader instead of file:// origin (5705155b)

v1.5.3 (2026-03-27)

Fixes

  • crypto: handle corrupted EncryptedSharedPreferences on startup (ca71986d)

v1.5.2 (2026-03-27)

Fixes

  • service: foreground service crash on Android 14+ when BT permission denied (b30a5ea0)

v1.5.1 (2026-03-27)

Features

  • ui: dashboard widget reorder dialog with persistent order (a7e0e131)

v1.5.0 (2026-03-27)

Features

  • engine: Iridium credit tracking and gauge visualization (6b29b551)
  • ui: Reticulum widget and dashboard enhancements (1352ccba)
  • ui: credential management screen with PEM import (913581ec)
  • service: wire pass scheduler, mTLS, registry, and TCP peers (d8dd26d0)
  • settings: announce interval and routing config UI (32bb6677)
  • config: YAML config export/import matching Bridge format (16a735ba)
  • reticulum: TCP multi-peer management with Room DB (ad000fec)
  • service: multi-instance transport registry (ace56e41)
  • hub: mTLS client certificate support for Hub MQTT/NATS (4beeec04)
  • satellite: pass-aware scheduling: 4-mode transport polling (69f89cae)
  • api: add service restart API and UI button (3ea511d2)
  • hub: implement send_mt, flush_burst, config_update, reboot commands (732dead6)
  • ble: preserve OTA-learned node identity on config download merge (ed0f1aac)
  • credentials: credential import via Hub sync + QR bundles (e6cc52ad)

v1.4.0 (2026-03-23)

Features

  • reticulum: add TCP_HDLC encapsulation enum for stock RNS wire compat (757aac7b)
  • hub: HubReporter: bridge-to-hub uplink protocol for Android (5368bfb3)
  • astrocast: add RnsAstrocastInterface + GatewayService integration (a3cf8abe)
  • reticulum: add TCP, BLE peripheral, Tor, and WireGuard interfaces (e33ad781)
  • service: wire RnsTransportNode into GatewayService lifecycle (dc529803)
  • reticulum: add RnsIridium9704Interface for Reticulum over IMT (13e6b72b)
  • reticulum: add Transport Node with forwarding table and packet relay (c92dbcdf)
  • service: integrate Iridium 9704 transport into GatewayService (e7bd29f3)
  • bt: add RockBLOCK 9704 IMT transport via Bluetooth SPP (5dd7fbc7)
  • ui: add Meshtastic radio config tab with all settings (8bc2f4e7)
  • ble: adopt official Meshtastic protobuf bindings (d724e4ef)

v1.3.4 (2026-03-20)

Fixes

  • start service after permissions + bundle Leaflet locally (a75e5653)

v1.3.3 (2026-03-20)

Fixes

  • crash on start + map always visible (aaa30ab1)

v1.3.2 (2026-03-20)

Fixes

  • crash after 1min + no cell tower location (b284a7ac)

v1.3.1 (2026-03-20)

Fixes

  • ui: maps not loading: WebView needs non-null base URL for external resources (7336a0ae)

v1.3.0 (2026-03-20)

Features

  • astrocast: add message fragmentation support: parity with Bridge (6ecfeda3)
  • aprs: wire directed messaging with ACK/REJ into GatewayService (3ba23ac1)
  • aprs: directed messaging with ACK/REJ tracking (3d636466)
  • aprs: add smart position beaconing with corner pegging (20c90736)
  • aprs: add smart position beaconing with corner pegging (d55919ac)
  • aprs: APRS-IS direct connect: standalone APRS station without APRSDroid (b3abe9c5)
  • astrocast: Astronode S serial protocol driver + SPP transport (b2afce6d)
  • security: hardware-backed Android Keystore for all crypto keys (dfadad3e)
  • tak: CoT v2.0 generation + ATAK integration + inbound CoT parsing (ca141565)
  • crypto: QR code key sync with Hub, AES-GCM wire format tests (df1dcffa)
  • compress: per-channel compression toggle: disable MSVQ-SC for Iridium (89f8b47f)
  • sms: bidirectional SMS relay between Android and Hub via MQTT (8b6529f8)
  • reticulum: path discovery with cost-aware routing, reliable resource transfer (dd9e4061)
  • reticulum: 5 transport interfaces: BLE, SMS, Iridium, APRS, MQTT (92616794)
  • reticulum: Meshtastic BLE interface adapter for Reticulum packets (e67bd36b)
  • reticulum: ECDH link handshake with HKDF key derivation (d80cfa06)
  • reticulum: wire-compatible announce with 64-byte public_key field (5f92f05f)
  • reticulum: wire-compatible packet format, destination hash, announce data (b19f3f83)
  • compat: protocol version byte, SBD fragmentation, cert pinning, APRS UI (64fb7e55)
  • aprs: Android APRS adapter: KISS codec, AX.25, APRS encode/decode (2f75599b)
  • mqtt: Android MQTT client for Hub connectivity (c6b19978)

Fixes

  • astrocast: align CRC byte order with Go bridge + cross-impl test vectors (436bd137)

v1.2.1 (2026-03-16)

Fixes

  • lazy SMS permission request with banner in Messages screen (96ba9a07)

v1.2.0 (2026-03-16)

Features

  • Peers screen, message tabs, map layers, status bar, topology stats, interface tabs (7168493e)
  • dashboard overhaul + pass elevation chart (75779b13)

v1.1.1 (2026-03-16)

Fixes

  • maps tiles, SMS permissions, navigation redesign (ff9a7de5)

v1.1.0 (2026-03-16)

Features

  • ui: Phase J satellite pass predictor (ab942598)
  • ui: add radio config + device admin screen (64ec5534)
  • ui: Phase I interface management screen (76462997)
  • ui: Phase H bridge rules management UI (53296e93)

Fixes

  • audit log screen (Android), battery/lifecycle, dynamic interfaces, reboot confirm (8410f45f)

v1.0.2 (2026-03-16)

Fixes

  • maps grey square, invasive SMS perms, add dark/light theme toggle (ae8e42d6)

v1.0.1 (2026-03-16)

Fixes

  • crash on service creation: defensive startForeground + try/catch init (237fe72c)

v1.0.0 (2026-03-16)

Features

  • close MESHSAT-57 parity gaps: dedup wiring, telemetry, UI fixes, 59 unit tests (dfa02167)
  • ui: Phase G UI parity: settings, topology, deliveries, geofence (edd2e247)
  • api: Phase F config, signing, and local REST API (50279374)
  • routing: Phase E routing layer: identity, announce, link manager (f4ba2fbc)
  • engine: Phase D field intelligence: deadman, geofence, health, codecs, burst (a7f3e57a)
  • transport: Phase C transport hardening: state machine, store-forward, QoS (3f6f8b85)
  • routing: port Go gateway routing to Kotlin: Phase B (9686718d)
  • android: add core infrastructure: channel registry, dedup, rate limiter, transform pipeline (c3616257)
  • android: add MSVQ-SC compression settings UI (ed0c47fb)
  • android: MSVQ-SC lossy semantic compression for SMS (92439b5c)

Fixes

  • android: audit fixes: ProGuard rules, tensor leak, thread safety, NaN guard (5f82f507)
  • ci: use bash to run gradlew (chmod fails on read-only checkout) (e9f184fb)

v0.3.0 (2026-03-11)

Features

  • android: chat replies, per-conv encryption, GPS map, device info, notifications (16ed3456)

Fixes

  • android: SMS detection, per-conversation keys, signal graphs (8428e112)

v0.2.0 (2026-03-11)

Features

  • android: conversations, map, SOS, signal graphs, bug fixes (a8478141)
  • sms: register as default SMS app candidate for GrapheneOS (9017d0eb)

Fixes

  • android: keep Rules tab, move Crypto to Settings, remove duplicate screens (6160ac9b)
  • android: BLE scan, SMS decrypt logging, message UX improvements (3f6a5a3b)

v0.1.1 (2026-03-11)

Same sources as v0.1.0.

v0.1.0 (2026-03-11)

Features

  • persist rules to Room, message search, signal polling, About screen, key sharing (d7caac63)
  • rules UI, Iridium message flow, mesh send, app icon, ProGuard (647f5ca7)
  • add BLE, SPP, rules engine, and wire transports into gateway service (5095378e)
  • initial Android app with SMS decrypt and MeshSat-dark UI (f9631fb4)

Fixes

  • increase Gradle heap for 8GB LXC, build passes (adcc5519)
  • build config: Gradle wrapper, AndroidX, BuildConfig, memory tuning (92fdac5e)