Columba 0.9.19
Installation
Download the APK matching your device's CPU architecture.
Architecture-specific APKs (recommended — smaller download):
| APK | Architecture | Devices |
|---|---|---|
columba-0.9.19-armeabi-v7a.apk
| armeabi-v7a | Older 32-bit ARM phones & tablets |
columba-0.9.19-arm64-v8a.apk
| arm64-v8a | Most modern Android phones & tablets |
columba-0.9.19-x86_64.apk
| x86_64 | Chromebooks, emulators, some tablets |
columba-0.9.19-universal.apk
| All | Universal fallback (larger download) |
Telemetry variants:
Each architecture also has a -no-sentry variant without crash reporting for maximum privacy.
Not sure which to pick? Most Android phones use arm64-v8a. If unsure, use the universal APK.
Verification
See SECURITY.md for verification instructions.
Signing Certificate Fingerprints:
SHA-256: 02:2B:12:20:48:63:A3:1F:BF:07:5B:C9:F9:34:1E:33:52:78:80:2E:80:C9:27:A4:75:46:E4:7E:2F:4A:0C:5F
SHA-1: 0A:6B:AE:58:4E:D7:B5:D0:35:8B:3C:7B:65:11:D6:3A:81:21:0D:CE
SHA256 Checksums:
18adbe9d03f2e9e89c6f1e59b8bc88f79441119a7b277a1e57de4040c848cdd7 columba-0.9.19-arm64-v8a-no-sentry.apk
30bec96047e871a9cc8a01a16234f56170a006cd67a182ef51fe35310823b60c columba-0.9.19-arm64-v8a.apk
73b658ac3a342934e8681e58425463cd1aa0f07e5f405415972daea9361aa8bc columba-0.9.19-armeabi-v7a-no-sentry.apk
3a23521019e90f8a2723013d93247e3a0d84136908e56cb5d5e92e73d377a80d columba-0.9.19-armeabi-v7a.apk
e7681343660b348651416ddec8be956961bd7d993cb44895548037196e41450b columba-0.9.19-universal-no-sentry.apk
73e7c4162c7b4a081b4c4c22271e60e61c71ee749b3805641bb025d079548056 columba-0.9.19-universal.apk
da8be60e8bd39803b7fc241dfbf3c957bf67837c0040f6c162c90ce220ce3c99 columba-0.9.19-x86_64-no-sentry.apk
386bc51dbe83f8dfee8d710fbcb0693e2e2f19ee37f17c7ee5793131da903603 columba-0.9.19-x86_64.apk
What's Changed
v0.9.x adds these features:
- Add APK sharing feature with local HTTP server and QR code
- Add QR code dialog UX improvements - share and scan ID QR codes from the Chats view
- Add experimental Tor/Orbot SOCKS5 proxy support for .onion addresses
- security: Encrypt migration export files with AES-256-GCM by @MatthieuTexier
- Improve message input UX with adaptive attachment buttons by @MatthieuTexier
- Add filtering by interface options for announce notifications
- Replace share intent with SAF file save dialog for exports
- Add draft message auto-save feature for conversations
- Add option to unset group host in location sharing settings
- Add MBTiles file import functionality to offline maps
- Add viewport persistence and default offline map region support
- fix: support raster MBTiles import (as exported from MeshChatX) and derive center from bounds
- feat: add image sharing from external apps by @MatthieuTexier
- feat: double-back-to-exit on root tab screens by @MatthieuTexier
- security: Encrypted Reticulum identity key storage
- perf: reduce battery drain
- feat: add message deletion by @MatthieuTexier in #557
Lots of bug fixes went into this release, here are some of the notable ones:
- fix: path persistence + proactive path resolution by @torlando-tech in #664
- fix: show notifications when app backgrounded on active conversation by @torlando-tech in #648
- fix: BLE shutdown cleanup + battery-tunable power settings by @torlando-tech in #609
- fix: notification tap not opening app or conversation by @torlando-tech in #631
- fix: stop changing phone's Bluetooth device name during BLE advertising by @torlando-tech in #630
See the release notes below for details.
What's Changed
- docs: add Strangler Fig migration skill for Python extraction by @torlando-tech in #466
- fix: move URL regex off main thread in MessagingScreen by @torlando-tech in #468
- Encrypt migration export files with AES-256-GCM by @MatthieuTexier in #467
- Improve message input UX with adaptive attachment buttons by @torlando-tech in #429
- Add filtering options for announce notifications by @torlando-tech in #426
- Replace share intent with SAF file save dialog for exports by @torlando-tech in #425
- Add draft message auto-save feature for conversations by @torlando-tech in #433
- fix: disable RNodeCompanionService on pre-API 31 devices by @torlando-tech in #471
- Add LocationCompat utility for graceful GMS fallback on devices without Play Services by @torlando-tech in #469
- fix: Oboe SIGSEGV on OpenSL ES + speaker toggle for native stream by @torlando-tech in #470
- Add option to unset group host in location sharing settings by @torlando-tech in #473
- Add MBTiles file import functionality to offline maps by @torlando-tech in #428
- Add viewport persistence and default offline map region support by @torlando-tech in #427
- fix: support raster MBTiles import and derive center from bounds by @torlando-tech in #474
- Add APK sharing feature with local HTTP server and QR code by @torlando-tech in #430
- Add Password keyboard type to password input fields by @torlando-tech in #475
- feat: add image sharing from external apps by @MatthieuTexier in #435
- feat: double-back-to-exit on root tab screens by @MatthieuTexier in #457
- Add Tor/Orbot SOCKS5 proxy support for .onion addresses by @torlando-tech in #424
- feat: full-screen incoming call screen with ringtone & vibration by @MatthieuTexier in #452
- feat: Encrypted Reticulum identity key storage by @torlando-tech in #276
- fix: make announce filter dialog scrollable on short displays by @torlando-tech in #483
- fix: keep geohash field and Next button visible when keyboard opens by @torlando-tech in #492
- fix: don't request Bluetooth permission for USB-connected RNodes by @torlando-tech in #494
- fix: add post-flash firmware verification by @torlando-tech in #497
- fix: nRF52 DFU flashing and frequency band detection by @torlando-tech in #506
- fix: use build-time config for copyright year by @torlando-tech in #510
- fix: remove OLED references and fix flaky CI submodule checkout by @torlando-tech in #509
- ReviewConfigStep.kt - remove the word OLED by @serialrf433 in #499
- fix: QR scanning fails on LineageOS due to camera row stride mismatch by @torlando-tech in #500
- fix: resolve DeadObjectException, OOM, and ANR from Sentry by @torlando-tech in #502
- fix: send pending file notification eagerly on propagation fallback by @torlando-tech in #514
- fix: use Dispatchers.IO for EventHandler coroutines by @torlando-tech in #516
- Add QR code dialog UX improvements by @torlando-tech in #518
- feat: message font zoom via text size dialog in conversation view by @MatthieuTexier in #505
- perf: reduce battery drain by 88% fewer timer wake-ups by @torlando-tech in #504
- fix: announce interface identification when transport disabled by @torlando-tech in #519
- fix: shutdown now stops foreground service (#455) by @torlando-tech in #521
- fix: move AIDL binder calls off main thread to prevent ANR (COLUMBA-3X) by @torlando-tech in #524
- fix: RNode announces via BLE shown with Bluetooth icon by @torlando-tech in #525
- fix: restore foreground notification after user swipe on Android 13+ by @torlando-tech in #527
- fix: eliminate BLE keepalive coroutine accumulation (COLUMBA-40) by @torlando-tech in #530
- fix: strip URI scheme prefixes from hostname input by @torlando-tech in #532
- fix: prevent delivered message status from regressing by @torlando-tech in #535
- fix: strip port from pasted URLs, sanitize RNode/UDP hosts by @torlando-tech in #537
- fix: use colon count instead of IPv6 regex for port-stripping guard by @torlando-tech in #539
- Enhance README with voice app details and new features by @torlando-tech in #541
- fix: move app initialization off main thread to prevent ANR (COLUMBA-26) by @torlando-tech in #544
- fix: debounce reachable count to prevent binder saturation by @torlando-tech in #548
- fix: prevent LazyColumn duplicate key crash (#542) by @torlando-tech in #550
- fix: detect all nRF52 bootloader PIDs during DFU flash by @torlando-tech in #553
- fix: wipe nRF52 EEPROM before provisioning to initialize LittleFS by @torlando-tech in #555
- fix: remove hardcoded VID filter from nRF52 EEPROM wipe reconnect by @torlando-tech in #556
- fix: add @jvmoverloads to KotlinUSBBridge.connect() for USB RNode by @torlando-tech in #561
- fix: use ContextCompat.startForegroundService to support API 24+ by @torlando-tech in #563
- feat: add message deletion by @MatthieuTexier in #557
- fix: move BackHandler inside root tab composables for correct priority by @MatthieuTexier in #559
- fix: include host device location in hosted group telemetry stream by @MatthieuTexier in #562
- feature: check for updates via GitHub Releases API by @torlando-tech in #568
- fix: use arm64-v8a filename so Obtainium selects 64-bit APK by @torlando-tech in #576
- fix: prevent ANR and file picker crash (COLUMBA-4E/4F/4H/4J) by @torlando-tech in #578
- fix: update AGP 8.13, Lifecycle 2.10, Chaquopy 16.1 to fix NullSafeMutableLiveData lint crash by @torlando-tech in #580
- Fix Contacts crash caused by duplicate LazyColumn keys by @MatthieuTexier in #583
- fix: hot-add AutoInterface on network change by @torlando-tech in #587
- ci: bump actions/upload-artifact from 6 to 7 by @dependabot[bot] in #588
- fix: resolve 4 Sentry issues — ANRs, OOM, duplicate keys by @torlando-tech in #584
- Fix duplicate contact key crash and normalize hex hashes by @torlando-tech in #585
- Fix crash on invalid lat/lon input in offline map download by @torlando-tech in #590
- Fix setup wizard showing on upgrade from pre-0.9.0 by @torlando-tech in #591
- fix: Group Tracker: host allowlist, self-echo, host picker stability, background location by @MatthieuTexier in #593
- fix: truncate collector address in debug log by @torlando-tech in #595
- deps(deps): Bump org.maplibre.gl:android-sdk from 11.13.5 to 12.3.1 by @dependabot[bot] in #207
- deps(deps): bump com.composables:icons-lucide-android from 1.1.0 to 2.2.1 by @dependabot[bot] in #167
- deps(deps): bump the kotlin group across 1 directory with 4 updates by @dependabot[bot] in #312
- deps(deps): bump the compose group with 2 updates by @dependabot[bot] in #364
- fix: resolve map 0,0 fallback race condition on cold start by @torlando-tech in #611
- fix: rethrow CancellationException in AnnounceStreamViewModel by @torlando-tech in #613
- fix: wire up 'Check for Updates' to fetch tile version by @torlando-tech in #602
- fix: BLE shutdown cleanup + battery-tunable power settings by @torlando-tech in #609
- fix: improve BLE BATTERY_SAVER discovery reliability by @torlando-tech in #622
- Defer bulk peer identity restore after prioritizing contacts by @MatthieuTexier in #604
- fix: prevent map viewport race on tab switch with no location by @torlando-tech in #627
- fix: post-call navigation after cold start by @MatthieuTexier in #629
- fix: stop changing phone's Bluetooth device name during BLE advertising by @torlando-tech in #630
- fix: notification tap not opening app or conversation by @torlando-tech in #631
- Remove dead name-based dedup code after PR #630 by @torlando-tech in #633
- fix: disable Python tracemalloc in release builds by @torlando-tech in #639
- deps(deps): bump the kotlin group with 2 updates by @dependabot[bot] in #634
- deps(deps): bump the testing group with 2 updates by @dependabot[bot] in #635
- fix: CI flaky tests and dependency resolution retry (backport) by @torlando-tech in #651
- fix: show notifications when app backgrounded on active conversation by @torlando-tech in #648
- fix: prevent binder buffer exhaustion causing crash loop by @torlando-tech in #654
- fix: sort messages by received time (backport to v0.9.x) by @torlando-tech in #656
- fix: prevent duplicate notifications on restart (backport to v0.9.x) by @torlando-tech in #658
- ci: trigger CI on release/* branches by @torlando-tech in #661
- fix: remove broken cherry-pick artifacts that prevent compilation by @torlando-tech in #659
- fix: catch SecurityException when location permission revoked while backgrounded by @torlando-tech in #663
- fix: path persistence + proactive path resolution by @torlando-tech in #664
Full Changelog: v0.8.19...v0.9.19