Releases: permissionlesstech/bitchat-android
Release list
Bitchat Android 2.0.1
Bitchat Android 2.0.1
Highlights
- Bitchat for Wear OS: join the nearby mesh from your watch, use public chat and encrypted direct messages, browse People, manage favorites and verification, receive notifications, record voice notes, and receive images and files.
- New chat styles: choose the classic Matrix layout or peer-colored message bubbles, including bubble-aware media, timestamps, and delivery indicators.
- Live push-to-talk: stream voice in public channels and encrypted direct messages on Android and Wear OS, with improved recording feedback, waveforms, haptics, and slide-to-cancel controls.
- Cashu support: recognize and preview Cashu eCash tokens, use
/pay, and redeem with a compatible external wallet or web flow. Cashu tokens are bearer instruments; anyone who obtains a token may be able to redeem it. - Persistent private conversations: keep conversation history, unread state, aliases, favorites, and previews across restarts, with clearer controls for deleting conversations.
- Offline geohash globe: explore geohash channels with a native animated 3D globe, country borders, cities, polar coverage, and adjustable render quality.
- Language picker: change the app language from within Bitchat, with expanded translations.
- Local-first APK sharing and updates: share an installed APK nearby and resume signature-verified update downloads with clearer progress and rate-limit handling.
- Reliability and privacy: stronger queued-message delivery and ordering, Noise session recovery and identity binding, more reliable receipts and peer lifecycle handling, safer Wi-Fi Direct cleanup, bounded payload processing, quieter sensitive logging, and a more complete panic wipe of in-memory networking state.
First reproducible full-app release
This is Bitchat Android's first reproducible full-app release. The unsigned phone and Wear OS APKs and Android App Bundles were built twice in independent GitHub Actions jobs using the pinned container environment, and every canonical byte matched before the release artifacts were promoted for local signing.
The release includes the signed phone and Wear OS APKs, the signed Play upload bundles, BITCHAT_BUILDINFO.json, the attested BITCHAT_SHA256SUMS.unsigned manifest, and the final BITCHAT_SHA256SUMS. The canonical unsigned binaries are intentionally not attached; their exact hashes are committed by the attested unsigned manifest and they can be rebuilt from the signed source tag. The signed APK and AAB payloads were checked against those canonical unsigned builds before publication.
To rebuild and verify everything from source (requires Git, GitHub CLI, Docker with Linux/amd64 support, and 16 GiB of memory recommended for Docker):
git clone https://github.com/permissionlesstech/bitchat-android.git
cd bitchat-android
git checkout v2.0.1
gh release download v2.0.1 --pattern 'BITCHAT_BUILDINFO.json' --pattern 'BITCHAT_SHA256SUMS*' --dir .reproducible-build/release-metadata-v2.0.1
gh attestation verify .reproducible-build/release-metadata-v2.0.1/BITCHAT_BUILDINFO.json --repo permissionlesstech/bitchat-android
gh attestation verify .reproducible-build/release-metadata-v2.0.1/BITCHAT_SHA256SUMS.unsigned --repo permissionlesstech/bitchat-android
tools/reproducible-builds/build-in-container.sh .reproducible-build/verify-v2.0.1
cmp .reproducible-build/verify-v2.0.1/SHA256SUMS.unsigned .reproducible-build/release-metadata-v2.0.1/BITCHAT_SHA256SUMS.unsignedTo verify the checksums of the published signed files without rebuilding:
gh release download v2.0.1 --dir .reproducible-build/download-v2.0.1
(cd .reproducible-build/download-v2.0.1 && shasum -a 256 -c BITCHAT_SHA256SUMS)Most phones should use bitchat-android-universal.apk; bitchat-android-arm64.apk is a smaller download for modern ARM64 phones. Install bitchat-android-wear.apk directly on a Wear OS device. The Play upload bundles are signed separately for Google Play and are not intended for direct installation.
Full changelog: 1.7.4...v2.0.1
1.7.4
1.7.3
What's Changed
- Fix request sync duplicate public messages by @callebtc in #707
- fix(sync): resolve hash alignment and early break bugs on GCS filter trimming by @a1denvalu3 in #708
- Fix Android security parity from iOS audit by @callebtc in #709
- Wifi aware refactor mesh core by @callebtc in #711
- feat: disable WiβFi Aware by default by @callebtc in #712
Full Changelog: 1.7.2...1.7.3
1.7.2
What's Changed
- bump 1.7.1 by @callebtc in #661
- chore: update license from MIT to GPLv3 by @callebtc in #674
- Unit tests for BinaryProtocol by @rollforsats in #678
- fix: use CSPRNG for heartbeat intervals by @a1denvalu3 in #685
- Add 'Send private message' action to chat user sheet by @a1denvalu3 in #649
- fix: add input validation for protocol decoding and fragment reassembly by @0x0v1 in #666
- update version by @callebtc in #688
New Contributors
- @rollforsats made their first contribution in #678
- @0x0v1 made their first contribution in #666
Full Changelog: 1.7.1...1.7.2
APK release 1.7.1
What's Changed
- Fix location updates in notes and Nostr subscription leaks by @callebtc in #636
- fix(geohash): cleanup sampling subscriptions when closing location sheet by @a1denvalu3 in #659
- fix: pause geohash heartbeat (kind 20001) sampling when backgrounded by @a1denvalu3 in #660
Full Changelog: 1.7.0...1.7.1
APK release 1.7.0
- source routing: more efficient direct messages
- geohash presence: count online people in region-city
- update arti to 1.9.0 and add 32 bit builds
- geocoder for de-googled phone via openstreetmap
- fixes several issues identified by security audit firm cure53
- many ui improvements and fixes
What's Changed
- Implement Geohash Presence (Heartbeats) by @callebtc in #576
- Gossip mesh topology + source-based routing by @callebtc in #445
- Feat/graph force by @callebtc in #581
- visual logger refactor by @callebtc in #583
- Update arti to 1.9.0 and produce 32 bit builds by @callebtc in #585
- Move PrivateChatSheet hosting into ChatDialogs and unify sheet state by @yet300 in #586
- use bluetooth icon by @callebtc in #597
- Fix/nostr dm bottom sheet by @callebtc in #598
- Fix and Improve LocationManager logic by @callebtc in #599
- OSM fallback for geocoding by @callebtc in #611
- security: prevent storage exhaustion by saving incoming files to cache by @a1denvalu3 in #606
- feat: Stable BLE Peer Identity via Scan Response by @callebtc in #613
- Refactor: Implement Hybrid Location Provider (System/Fused) by @callebtc in #612
- fix(security): Clear in-memory keys during panic mode by @callebtc in #596
- Improve QR Verification UI by @callebtc in #615
- Implement iOS-compatible Direct Peer Detection (TTL Logic) by @callebtc in #574
- fix: centralize and strictly enforce connection limits by @callebtc in #618
- Fix: Correctly parse recipient/sender IDs in broadcaster to enable unicast by @callebtc in #619
- security: ensure media files are deleted during panic mode by @a1denvalu3 in #607
- fix: Ensure empty neighbor lists in newer announcements clear mesh edges by @callebtc in #620
- fix(ui): Show acquiring location state instead of unavailable by @a1denvalu3 in #621
- Fix/590-Private-key-stored-as-Plain-text by @anupamjhabbl in #603
- Refactored BottomSheetTopBar to BitchatSheetTopBar by @yet300 in #601
- spacing for geohash sheet text by @callebtc in #623
- feat: Introduce Gradle property to control APK splits by @moehamade in #560
- bump to 1.7.0 by @callebtc in #624
New Contributors
- @anupamjhabbl made their first contribution in #603
Full Changelog: 1.6.0...1.7.0
APK release 1.6.0
new
- background persistence:Β bitchat can now run in the background to support the mesh even if you leave the app
- improved tor: self-compiled arti library reduces APK size from 150 MB to 15 MB
- QR code contact verification
- fixes and improvements
What's Changed
- bump targetSdk to 35 by @callebtc in #526
- Prevent quit notification from reappearing by @callebtc in #530
- fix: wifi aware socket binding by @aidenvalue in #533
- Revert "fix: wifi aware socket binding" by @callebtc in #535
- Fix notification user try 2 by @callebtc in #541
- Fix: Add @ConscryptMode annotation to resolve test failures by @rebroad in #543
- Fix small-screen header clipping (#519) by @Kargatharaakash in #532
- QR and Verification feature by @yet300 in #529
- Enforce mandatory packet signature verification by @callebtc in #546
- Revert "Fix small-screen header clipping (#519)" by @callebtc in #548
- fix: location channel manager by @callebtc in #516
- fix: sync notification peer count with sidebar by @callebtc in #547
- bump versioncode to 28 by @callebtc in #551
- FIX: verify signature only for ANNOUNCE, MESSAGE, and FILE_TRANSFER like ios by @callebtc in #552
- versioncode bump to 29 by @callebtc in #553
- Fix/foreground permissions scanning by @callebtc in #556
- drop duplicate announces based on TTL by @callebtc in #558
- scan duration fix by @callebtc in #557
- feat: Build and release per-architecture APKs by @moehamade in #550
- bump vc to 30 by @callebtc in #559
New Contributors
- @aidenvalue made their first contribution in #533
- @rebroad made their first contribution in #543
- @Kargatharaakash made their first contribution in #532
Full Changelog: 1.6.0-rc1...1.6.0-rc3
APK release 1.6.0-rc2
new
- background persistence:Β bitchat can now run in the background to support the mesh even if you leave the app
- improved tor: self-compiled arti library reduces APK size from 150 MB to 10 MB
- QR code contact verification
- bug fixes and improvements
What's Changed
- feat: Tablet orientation fix for landscape mode by @developerchunk in #490
- mesh optimization: suppress relay of reassembled packets by setting TTL=0 by @callebtc in #492
- refactor app constants: service UUID for BLE by @callebtc in #494
- Fix direct peer detection by binding on per-connection first ANNOUNCE and never dropping ANNOUNCE as duplicates by @callebtc in #502
- fix connection attempt counter tracker by @callebtc in #503
- Fix: do not reject empty packets that arent message type by @callebtc in #510
- refactor app constants: service UUID for BLE by @callebtc in #500
- Add Network permission requirement to README by @Mafiadoener36 in #522
- feat: add product flavors and TorProvider abstraction by @moehamade in #508
- Migrate from LiveData to Kotlin Flow by @yet300 in #518
- Background persistence by @callebtc in #505
- bump version 1.6.0 by @callebtc in #524
- bump targetSdk to 35 by @callebtc in #526
- Prevent quit notification from reappearing by @callebtc in #530
- fix: wifi aware socket binding by @aidenvalue in #533
- Revert "fix: wifi aware socket binding" by @callebtc in #535
- Fix notification user try 2 by @callebtc in #541
- Fix: Add @ConscryptMode annotation to resolve test failures by @rebroad in #543
- Fix small-screen header clipping (#519) by @Kargatharaakash in #532
- QR and Verification feature by @yet300 in #529
- Enforce mandatory packet signature verification by @callebtc in #546
- Revert "Fix small-screen header clipping (#519)" by @callebtc in #548
- fix: location channel manager by @callebtc in #516
- fix: sync notification peer count with sidebar by @callebtc in #547
- bump versioncode to 28 by @callebtc in #551
- FIX: verify signature only for ANNOUNCE, MESSAGE, and FILE_TRANSFER like ios by @callebtc in #552
- versioncode bump to 29 by @callebtc in #553
New Contributors
- @Mafiadoener36 made their first contribution in #522
- @aidenvalue made their first contribution in #533
- @rebroad made their first contribution in #543
- @Kargatharaakash made their first contribution in #532
Full Changelog: 1.5.1...1.6.0
APK release 1.6.0-rc1
new
- background persistence:Β bitchat can now run in the background to support the mesh even if you leave the app
- improved tor: self-compiled arti library reduces APK size from 150 MB to 10 MB
- bug fixes and improvements
What's Changed
- feat: Tablet orientation fix for landscape mode by @developerchunk in #490
- mesh optimization: suppress relay of reassembled packets by setting TTL=0 by @callebtc in #492
- refactor app constants: service UUID for BLE by @callebtc in #494
- Fix direct peer detection by binding on per-connection first ANNOUNCE and never dropping ANNOUNCE as duplicates by @callebtc in #502
- fix connection attempt counter tracker by @callebtc in #503
- Fix: do not reject empty packets that arent message type by @callebtc in #510
- refactor app constants: service UUID for BLE by @callebtc in #500
- Add Network permission requirement to README by @Mafiadoener36 in #522
- feat: add product flavors and TorProvider abstraction by @moehamade in #508
- Migrate from LiveData to Kotlin Flow by @yet300 in #518
- Background persistence by @callebtc in #505
- bump version 1.6.0 by @callebtc in #524
New Contributors
- @Mafiadoener36 made their first contribution in #522
Full Changelog: 1.5.1...1.6.0-rc1
APK release 1.5.1
- location notes
- take in-app photos
- audio note optimization
What's Changed
Full Changelog: 1.5.0...1.5.1