v2.1.0-beta
Pre-releaseColumba 2.1.0-beta
New in 2.1.x:
- Nomadet truecolor support (now rngit pages won't be the incorrect bright green background that's impossible to read anything on!)
- Columba can now render markdown when receiving an LXMF message that specifies the markdown rendering mode in the special fields.
- Updated the BLE p2p handshake for compatibility with iOS.
- Updated RNS to 1.4.2 and LXMF to 1.1.0
- Add a Pyxis firmware updater - does not yet do a full flash, will only update an existing pyxis installation. This was mostly just a development tool for me while traveling but figured I would release it
- Lots of small LXST improvements, should have much improved latency on ULBW codec2 profile
- Improved notification and navigation handling throughout the app. Should be fewer of the "I have to spam the back button" issues.
- Allow newlines in nomadnet fields
- The "last seen" indicator should be much more accurate now
- Announce cards now show all interfaces a given destination has been heard on and should sort more stably (less flicker)
- Shared reticulum instance RPC key, along with the rest of its config, can now be copied
- Fixed the interface traffic stat and added a traffic over time graph
Installation
Pick a backend, then download the APK matching your device's CPU architecture.
- Python backend, RECOMMENDED — ships Mark Qvist's official python reference implementations of Reticulum and LXMF via Chaquopy.
- Kotlin backend — ships Torlando's EXPERIMENTAL, AI-GENERATED native reticulum-kt / lxmf-kt / lxst-kt stack.
The python version is highly recommended. The kotlin version is a work in progress, and is not yet verified to be completely safe.
The kotlin version may yield better battery life depending on your device, and comes in a smaller apk due to not requiring a python runtime.
Python backend (official-rns-py)
| APK | Architecture | Devices |
|---|---|---|
columba-2.1.0-beta-official-rns-py-armeabi-v7a.apk |
armeabi-v7a | Older 32-bit ARM phones & tablets |
columba-2.1.0-beta-official-rns-py-arm64-v8a.apk |
arm64-v8a | Most modern Android phones & tablets |
columba-2.1.0-beta-official-rns-py-x86_64.apk |
x86_64 | Chromebooks, emulators, some tablets |
columba-2.1.0-beta-official-rns-py-universal.apk |
All | Universal fallback (larger download) |
Kotlin backend (EXPERIMENTAL-reticulum-kt)
| APK | Architecture | Devices |
|---|---|---|
columba-2.1.0-beta-EXPERIMENTAL-reticulum-kt-armeabi-v7a.apk |
armeabi-v7a | Older 32-bit ARM phones & tablets |
columba-2.1.0-beta-EXPERIMENTAL-reticulum-kt-arm64-v8a.apk |
arm64-v8a | Most modern Android phones & tablets |
columba-2.1.0-beta-EXPERIMENTAL-reticulum-kt-x86_64.apk |
x86_64 | Chromebooks, emulators, some tablets |
columba-2.1.0-beta-EXPERIMENTAL-reticulum-kt-universal.apk |
All | Universal fallback (larger download) |
Telemetry variants:
Each APK above also has a -no-sentry variant without crash reporting for maximum privacy — append -no-sentry to any download link above (e.g. the most common builds: Python arm64-v8a no-sentry · Kotlin arm64-v8a no-sentry). Sentry collects stack traces when Columba encounters errors
and provides helpful information to the developer to improve Columba, but is hosted at sentry.io, and is thus not the maximum privacy option.
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:
d2bfa0421923752454ed664861f3b90ccbbe2a024514a83dd349b637a19f3866 columba-2.1.0-beta-EXPERIMENTAL-reticulum-kt-arm64-v8a-no-sentry.apk
3ba07d4581ce968962e43df03e913fda3324804c4358e0e359094da737ca9cf9 columba-2.1.0-beta-EXPERIMENTAL-reticulum-kt-arm64-v8a.apk
ad133eccb50ff72248ba27c75ef331c1e1139c63705a08c33f147646444e8997 columba-2.1.0-beta-EXPERIMENTAL-reticulum-kt-armeabi-v7a-no-sentry.apk
abecf84a57facb13008bea39e6df1ae9523ec361e8bbd659a811ad60558f1c22 columba-2.1.0-beta-EXPERIMENTAL-reticulum-kt-armeabi-v7a.apk
6d1fd8937b914e31edaf8c914f450067266c829fd94e86c992857dffe6082179 columba-2.1.0-beta-EXPERIMENTAL-reticulum-kt-universal-no-sentry.apk
1d88e4d180ca25e2c457ede5f3f61349a69fb410650e1074e3050594d0fa8441 columba-2.1.0-beta-EXPERIMENTAL-reticulum-kt-universal.apk
952372bbd840db8447239e8e359b7c8a934d6f78fbfe261119ff0a3efd12f578 columba-2.1.0-beta-EXPERIMENTAL-reticulum-kt-x86_64-no-sentry.apk
0c23a2a0664599ad29226f3504082d4b0f742119a2f94b4b91289207d6601363 columba-2.1.0-beta-EXPERIMENTAL-reticulum-kt-x86_64.apk
fa12dab5a5c621b8572ec2d7f5c25b3319a63e7f93366a71480b4ffee5858f4d columba-2.1.0-beta-official-rns-py-arm64-v8a-no-sentry.apk
69f0437b9953d222e760bd018912a1974d9220a3a7b5e1c50375936725981fa2 columba-2.1.0-beta-official-rns-py-arm64-v8a.apk
0f6fe6fc24a735d2e3401490811e422e42ded95c795864207c9dcc5c13d9db1b columba-2.1.0-beta-official-rns-py-armeabi-v7a-no-sentry.apk
f9b214c4a66ef18d8fadce2659cf54ace3a5b47399b395c9c560b4c3cfa0592e columba-2.1.0-beta-official-rns-py-armeabi-v7a.apk
f31925a047f70465fa6719c6ef91b9980989c609847319beaa32dd73ea481994 columba-2.1.0-beta-official-rns-py-universal-no-sentry.apk
2ac884af4102a60637ccd2bc817ba3fb6c8f98dfd986c9153ebfe4e3173c57de columba-2.1.0-beta-official-rns-py-universal.apk
5d4c771589e7f888f9d2909ac09af27a60531571239a7afd73f832249a49011a columba-2.1.0-beta-official-rns-py-x86_64-no-sentry.apk
84416a3c539d1b87b39ea64c90da5b8a684ded7bcb5abc28093d5eb57c1c00e3 columba-2.1.0-beta-official-rns-py-x86_64.apk
Reticulum / LXMF / LXST updates
This release picks up the following library updates:
reticulum-kt updated: v0.0.21 → v0.0.22
See torlando-tech/reticulum-kt@v0.0.21...v0.0.22
- fix(transport): requestPath Python parity + honest path-table reads (columba#1004) (
579d448) - fix(parity): close python-reference gaps surfaced by conformance Phase 1 (
7c31574) - feat(bridge): Phase 1 conformance arms — crypto/constants/framing/identity (
37e390b) - fix(parity): Packet/Destination python-reference gaps from conformance Phase 2a (
c54e2a0) - feat(bridge): Phase 2a conformance arms — destination/announce/packet (LIVE) (
d9ef16a) - fix(parity): discovery receive-path + storage gaps from conformance Phase 2b (
0214527) - feat(bridge): Phase 2b conformance arms — discovery family (LIVE/ADVERSARIAL) (
7f2ff0b) - fix(transport): genuine divergences surfaced by conformance Phase 3 behavioral harness (
f7dc260) - feat(bridge): Phase 3 behavioral transport hooks (~23 LIVE commands) (
a75a534) - feat(transport): port the blackhole-identity feature from RNS 1.3.1 (
5c6d9b1) - feat(bridge): Phase 4 — 11 behavioral_blackhole_* commands (LIVE) (
e6ae1a7) - fix(parity): GROUP decrypt returns null on auth failure, not an exception (
b45240b) - feat(bridge): Phase 5a wire crypto/identity/group arms (16 commands) (
545c082) - fix(parity): store own ratchet at announce so encrypt sets latest_ratchet_id (
e57d501) - feat(bridge): Phase 5b destination-level ratchet arms (8 commands) (
0bdd94c) - fix(parity): Link request timeout uses RESPONSE_MAX_GRACE_TIME*1.125, not +5s (
5b205aa) - feat(bridge): Phase 5c batch 1 — request handlers + link request (8 commands) (
287d134) - feat(bridge): Phase 5c batch 2 — link introspection (6 commands) (
3572bae) - fix(parity): purge ephemeral key material on link close (forward secrecy) (
a886a3f) - feat(bridge): Phase 5c batch 3 — link gates / key material / phy stats (4 cmds) (
3b8017f) - feat(rns-core): test seams for link-request adversarial commands (
45ce47f) - feat(bridge): Phase 5c batch 4a — link-request validation (4 commands) (
b1a82f0) - feat(bridge): Phase 5c batch 4b — link-traffic adversarial injectors (3 cmds) (
e251ac0) - feat(rns-core): Transport.outboundTapForTest capture seam (
6f90990) - feat(bridge): Phase 5c batch 4c — keepalive/teardown emission capture (3 cmds) (
697dac0) - fix(parity): mode-mismatched LRPROOF closes the link, not stays PENDING (
68f53d7) - feat(bridge): Phase 5c batch 4d — crafted LRPROOF + LINKIDENTIFY injectors (2 cmds) (
3755a9b) - feat(rns-core): test seams for LRPROOF-frame + link-proof injection (
b7ac348) - feat(bridge): Phase 5c batch 4e — LRPROOF frame capture + link-proof injection (
bf1760c) - feat(rns-core): Link.inboundTapForTest capture seam (
5032288) - feat(bridge): Phase 5c batch 4f — capture_response_packet (1 cmd) (
98b9f4d) - feat(bridge): add wire_start_pipe_peer + wire_start_pipe_tcp_relay (phase 5h) (
d6d04f7) - feat(5g): instance/config posture wire commands + typed config threading (
1eb3b9e) - fix(conformance): close kotlin divergence loop vs RNS 1.3.1 wire/behavioral suite (
009427f) - fix(destination): persist empty ratchet store on enable when none exists (
004b98c) - fix(conformance-bridge): accept identity_hash ratchet encrypt/decrypt contract (
dd18e5e)
LXMF-kt updated: v0.0.13 → v0.0.14
See torlando-tech/LXMF-kt@v0.0.13...v0.0.14
- feat(constants): add LXMF interaction field + dict-index constants (
1b04d39) - fix(router): DIRECT delivery requests a path before linking (columba#1004) (
3fe0d03)
LXST-kt updated: v0.0.4 → v0.0.7
See torlando-tech/LXST-kt@v0.0.4...v0.0.7
- fix: derive playback prebuffer from frame duration (
6084453) - fix: remove ULBW native prebuffer floor (
5139706) - fix: preserve non-ULBW playback floors (
c41010b) - fix: start Codec2 playback after one packet (
0e453cb) - fix: align hybrid Oboe Codec2 prebuffer (
bf17a16) - fix: refresh native playback on profile switch (
700383c) - fix: safely refresh native prebuffer threshold (
106c60c) - fix: recreate native playback on profile switch (
6dcf6bb) - fix: preserve profile-switch media state (
5d3ac64) - fix: serialize native playback lifecycle (
24fa8ab) - fix: reject stale packets across profile changes (
bdee2f0) - fix: capture packet generation at callback entry (
cca6fd7) - fix: end call when playback replacement fails (
ac84e49)
What's Changed
- chore(rns): bump Python fork to 1.3.8 by @torlando-tech in #1024
- fix(ble): stabilize Android-iOS peer links by @torlando-tech in #1025
- ci: bump actions/cache from 5 to 6 by @dependabot[bot] in #1017
- ci: bump codecov/codecov-action from 6 to 7 by @dependabot[bot] in #1001
- feat(android): add safe Pyxis USB firmware updater by @torlando-tech in #1028
- deps: bump reticulum-kt v0.0.22 + LXMF-kt v0.0.14 — land columba#1004 path-request fix by @torlando-tech in #1008
- ci: bump actions/checkout from 6 to 7 by @dependabot[bot] in #1009
- ci: bump actions/setup-python from 6 to 7 by @dependabot[bot] in #1034
- ci: bump reactivecircus/android-emulator-runner from 2.37.0 to 2.38.0 by @dependabot[bot] in #1035
- fix: default new AutoInterface to Wi-Fi only by @torlando-tech in #1036
- fix: classify active default-network transport by @torlando-tech in #1037
- fix(settings): handle unavailable external links (COLUMBA-AV) by @torlando-tech in #1038
- fix(android): integrate notification conversation UX by @torlando-tech in #1039
- Harden native stamp cancellation and runtime pins by @torlando-tech in #1044
- Allow newlines in NomadNet form fields by @torlando-tech in #1046
- Persist verified peer activity for last-seen status by @torlando-tech in #1047
- fix(android): enforce predictable navigation back stacks by @torlando-tech in #1048
- Fix jumpy contacts across interface path changes by @torlando-tech in #1049
- feat(android): export shared instance access config by @torlando-tech in #1050
- fix(android): persist LXMF peer names below IPC by @torlando-tech in #1052
- fix(android): restore interface traffic stats and chart by @torlando-tech in #1053
- chore(deps): bump LXST-kt to v0.0.5 by @torlando-tech in #1065
- Render inbound LXMF Markdown messages by @torlando-tech in #1064
- ci: bump gradle/actions from 6 to 6.2.0 by @dependabot[bot] in #1068
- deps: update LXST-kt to v0.0.7 by @torlando-tech in #1069
- fix(map): gate interface polling by resumed map owners by @sentry[bot] in #1067
- fix: render NomadNet six-digit true colors by @torlando-tech in #1071
- fix: harden restored identity recovery by @torlando-tech in #1070
Full Changelog: v2.0.9...v2.1.0-beta