Skip to content

Releases: permissionlesstech/bitchat-android

Bitchat Android v2.1.0

Choose a tag to compare

@callebtc callebtc released this 26 Oct 15:19
v2.1.0
b801654

Bitchat Android v2.1.0

Highlights

  • Spam filtering for public mesh and geohash chats, enabled by default. Phone users can disable it in settings.
  • More reliable geohash participant lists, nicknames and blocking, including removal of blocked users' messages.
  • Corrected Cashu ecash amount formatting for fiat-denominated tokens.
  • Clearer light-mode voice-note waveforms, improved onboarding layouts and consistent QR scan controls.
  • Basque language support and spam-filter translations.
  • Improved incoming-message autoscroll and verification-sheet layering.
  • QR scanner initialization fixes for minified releases, plus concurrency fixes for security-cache cleanup and relay snapshots.
  • Panic reset confirmation and accurate reporting of wipe outcomes.
  • Wear OS: swipe right from chat for the app menu, including a confirmed Quit action.
  • Privacy and security hardening: exclude app data from backup/device transfer, validate message fragments and encoded data, check verification QR timestamps, and limit APK downloads and decoded packet sizes.
  • Prevent recipient-less Nostr private-message envelopes from exposing a stable mesh identity.
  • Updated bundled Nostr relays.

Versions and downloads

Phone 2.1.0 (41) requires Android 8.0/API 26 or newer. Wear OS 0.1.6 (1000000007) requires API 33 or newer. Both use com.bitchat.droid and target API 37, from commit b8016545e00cc7317fd9dc938b8cb7796db190ff.

  • bitchat-android-arm64.apk: most modern Android phones.
  • bitchat-android-universal.apk: compatibility fallback.
  • bitchat-android-x86_64.apk: x86_64 devices and emulators.
  • bitchat-android-wear.apk: direct Wear OS installation.
  • bitchat-android-play-upload.aab: signed phone bundle for Play.
  • bitchat-android-wear-play-upload.aab: signed Wear OS bundle for its separate Play track.

Only signed binaries and reproducibility metadata are attached. No unsigned APKs or AABs are published.

Reproducible-build verification

Requirements: Git, Docker (at least 16 GiB memory), and GitHub CLI.

git clone https://github.com/permissionlesstech/bitchat-android.git
cd bitchat-android
git checkout v2.1.0
tools/reproducible-builds/build-in-container.sh .reproducible-build/verify-2.1.0
gh release download v2.1.0 --repo permissionlesstech/bitchat-android \
  --pattern BITCHAT_BUILDINFO.json --pattern BITCHAT_SHA256SUMS.unsigned \
  --dir .reproducible-build/metadata-2.1.0
gh attestation verify .reproducible-build/metadata-2.1.0/BITCHAT_BUILDINFO.json \
  --repo permissionlesstech/bitchat-android
gh attestation verify .reproducible-build/metadata-2.1.0/BITCHAT_SHA256SUMS.unsigned \
  --repo permissionlesstech/bitchat-android
cmp .reproducible-build/verify-2.1.0/SHA256SUMS.unsigned \
  .reproducible-build/metadata-2.1.0/BITCHAT_SHA256SUMS.unsigned

To check downloaded release-file integrity:

gh release download v2.1.0 --repo permissionlesstech/bitchat-android --dir release-files
(cd release-files && shasum -a 256 -c BITCHAT_SHA256SUMS)

Signing certificates (SHA-256)

  • GitHub APKs and Play upload: 3b03fa66a5451321100792f5b55a7b4966d5c8dc10c6daa40aa95ea489531bca
  • Google Play app signing: 5e651dd0c80d1f57f2617964955085e28949dd04addac7b53fe9d2f11e172aa2

Google Play signs delivered APKs separately; their bytes need not match the GitHub APKs.

Validation scope

Phone unit tests: 762 passed, 3 existing skips. Wear unit tests: 238 passed. Contract tests and two synthetic minified-scanner runtime tests passed. Two independent local canonical builds matched byte-for-byte.

Both independent builds in the tagged release workflow also matched byte-for-byte. All eight canonical binaries and both public build-metadata subjects passed GitHub provenance verification against the exact tag, source commit and release workflow. APK signing is deterministic; existing signing-certificate continuity and signed AAB payload comparisons passed.

Existing lint findings remain; the six targeted translation errors were fixed. Changed-line coverage is unavailable because its Gradle task is not wired. Physical-device, cross-client/endurance and Play-delivered upgrade tests were not completed for this release; these gates were explicitly waived. This is not a claim that those checks passed.

Full changelog

Changes since v2.0.3

Bitchat Android v2.0.3

Choose a tag to compare

@callebtc callebtc released this 22 Oct 22:30
v2.0.3
dfc67da

Bitchat Android 2.0.3

Signed phone and Wear OS builds from v2.0.3 (source commit dfc67dad41691128bc6e7425bd69f2f409cb5bbf). Canonical unsigned outputs were built independently twice and matched byte-for-byte before local signing.

Highlights

  • Smoother busy chats: reduce UI stalls during bursts of geohash presence and mesh activity, batch identity updates, and compose participant lists lazily.
  • Bounded resource use: cap packet-processing queues and pace sync responses to keep heavy traffic from creating an unlimited backlog.
  • More reliable connectivity: continue retrying Nostr relays after network and DNS failures, with refreshed relay data.
  • Messaging correctness and security: verify incoming geohash event signatures before duplicate detection; preserve original compressed packet bytes for cross-client signature verification and forwarding; improve duplicate detection and geohash channel routing.
  • Safer panic wipe: remove the private-conversation database files if normal conversation erasure fails.
  • Wear OS polish since 0.1.1: shape-aware layouts for small round displays and larger fonts, compact fading chat headers, steadier scroll controls and autoscroll, refreshed icons, and an ongoing activity for returning to the mesh session.

History retention

Public chat and channel timelines now retain the latest 1,000 messages each, with up to 20 recently active channel timelines in memory. Older public messages are not archived by this change. Private-conversation history keeps its existing persistent retention policy.

Versions

  • Phone: 2.0.3 (40), minimum API 26, target API 37.
  • Wear OS: 0.1.5 (1000000006), minimum API 33, target API 37.
  • Both use application ID com.bitchat.droid.

The Wear layout, icon, and ongoing-activity changes above are new relative to the previous GitHub release, but were already included in the separate Play Wear 0.1.4 release. Wear 0.1.5 additionally incorporates the shared mesh, sync, and identity fixes.

Verification and known limitations

Independent local and tagged CI builds matched. Exact-tag provenance, signatures, signing continuity against prior artifacts, bundle validation, payload comparisons, and release checksums passed. Unit and contract checks passed (860 tests passed, 3 skipped). A clean installation and an in-place upgrade from the signed 2.0.1 APK launched to onboarding on a disposable emulator.

Known issue: QR scanner initialization can crash in this release; the pending crash fixes are not included. Full physical-device/cross-client/endurance and Play-delivered install/upgrade testing have not been completed. Existing lint errors and unavailable changed-line coverage remain; these are not claimed as passes.

Downloads and signing

Only four signed APKs, the two signed Play-upload AABs, and three reproducibility metadata files are attached. No unsigned APK or AAB is published; BITCHAT_SHA256SUMS.unsigned contains their canonical hashes, not binaries.

  • bitchat-android-arm64.apk — modern Android phones.
  • bitchat-android-universal.apk — compatibility fallback.
  • bitchat-android-x86_64.apk — x86_64 devices and emulators.
  • bitchat-android-wear.apk — direct Wear OS installation.
  • bitchat-android-play-upload.aab — signed phone bundle for Google Play.
  • bitchat-android-wear-play-upload.aab — signed bundle for the dedicated Wear OS track.

Certificate SHA-256 fingerprints:

  • GitHub APK and existing Play upload certificate: 3b03fa66a5451321100792f5b55a7b4966d5c8dc10c6daa40aa95ea489531bca.
  • Google Play app-signing certificate: 5e651dd0c80d1f57f2617964955085e28949dd04addac7b53fe9d2f11e172aa2.

Google signs Play-delivered APKs with its separate app-signing key; those APKs are not expected to be byte-identical to GitHub APKs.

Reproducible-build verification

Use Git, Docker with sufficient memory, and the GitHub CLI:

git clone https://github.com/permissionlesstech/bitchat-android.git
cd bitchat-android
git checkout v2.0.3
tools/reproducible-builds/build-in-container.sh .reproducible-build/verify-v2.0.3
gh release download v2.0.3 --pattern 'BITCHAT_BUILDINFO.json' --pattern 'BITCHAT_SHA256SUMS*' --dir .reproducible-build/metadata-v2.0.3
gh attestation verify .reproducible-build/metadata-v2.0.3/BITCHAT_BUILDINFO.json --repo permissionlesstech/bitchat-android
gh attestation verify .reproducible-build/metadata-v2.0.3/BITCHAT_SHA256SUMS.unsigned --repo permissionlesstech/bitchat-android
cmp .reproducible-build/verify-v2.0.3/SHA256SUMS.unsigned .reproducible-build/metadata-v2.0.3/BITCHAT_SHA256SUMS.unsigned

To verify all downloaded release files without rebuilding:

gh release download v2.0.3 --repo permissionlesstech/bitchat-android --dir .reproducible-build/download-v2.0.3
(cd .reproducible-build/download-v2.0.3 && shasum -a 256 -c BITCHAT_SHA256SUMS)

Full changelog: v2.0.1...v2.0.3

Bitchat Android 2.0.1

Choose a tag to compare

@callebtc callebtc released this 11 Aug 21:57
v2.0.1
93e9594

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.unsigned

To 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

Choose a tag to compare

@callebtc callebtc released this 17 Jun 18:48
ffe62bf

What's Changed

Full Changelog: 1.7.3...1.7.4

1.7.3

Choose a tag to compare

@callebtc callebtc released this 16 Jun 18:10
ae66412

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

Choose a tag to compare

@callebtc callebtc released this 30 Mar 08:45
4dfec91

What's Changed

New Contributors

Full Changelog: 1.7.1...1.7.2

APK release 1.7.1

Choose a tag to compare

@callebtc callebtc released this 01 Feb 12:27
43029e8

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

Choose a tag to compare

@callebtc callebtc released this 15 Jan 18:17
e3056d7
  • 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

Full Changelog: 1.6.0...1.7.0

APK release 1.6.0

Choose a tag to compare

@callebtc callebtc released this 05 Jan 10:34
654d385

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

New Contributors

Full Changelog: 1.6.0-rc1...1.6.0-rc3

APK release 1.6.0-rc2

APK release 1.6.0-rc2 Pre-release
Pre-release

Choose a tag to compare

@callebtc callebtc released this 05 Jan 04:41
9733806

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

New Contributors

Full Changelog: 1.5.1...1.6.0