OChat v1.0.1
First working release of OChat — bitchat's mesh networking with a conventional chat interface.
Verified on hardware against an unmodified bitchat client: both devices discovered each other and validated each other's signed announces.
Downloads
| File | For |
|---|---|
| ochat-arm64.apk | ARM64 — essentially every modern phone. Pick this one. |
| ochat-x86_64.apk | x86_64 — Chromebooks, some tablets, emulators |
| ochat-universal.apk | All architectures — larger, use if unsure |
Requires Android 8.0 (API 26) or newer.
Android will warn when installing from outside the Play Store; allow installation from unknown sources to proceed.
Certificate SHA-256 fingerprint:
87:E2:6E:CC:64:F3:19:DB:6C:FB:03:48:30:02:4F:00:04:6C:63:BB:E1:53:84:52:88:4F:96:3F:80:55:C8:8F
What this is
OChat is a fork of bitchat-android with a rebuilt interface. Messages travel peer-to-peer over Bluetooth LE mesh — no servers, no accounts, no phone numbers.
The networking, protocol and cryptography are unchanged from upstream, so OChat talks to unmodified bitchat clients on Android and iOS. It installs alongside bitchat rather than replacing it, so you can run both and message between them.
What changed is the presentation: a conversation list with Chats / Channels / People tabs, full-screen chats with message bubbles and delivery ticks, an amber dark theme with a matching light theme, sans-serif typography, and no emoji anywhere in the interface.
Fixed in this release
BLE scanning could stop permanently, preventing all peer discovery.
Leaving a duty-cycled power mode cancelled the duty-cycle timer without re-enabling scanning. If the cycle happened to be in its OFF phase, the radio was left deaf with nothing remaining to wake it. In power-saver mode the cycle is off for 28 of every 30 seconds, so simply bringing the app to the foreground had roughly a 93% chance of killing discovery until the process restarted.
A second fault made the "restart scanning on power mode change" check compare a value against itself, so it could never fire.
Both faults are inherited from upstream bitchat and affect it identically. The fix touches radio scheduling only, not the wire protocol, so compatibility is unaffected.
Known hardware limitation
Peer discovery needs at least one device in range that can advertise over BLE (peripheral mode). Some phones report BLE support but provide no advertiser — they can only scan, and can never be discovered themselves. Two such devices will never find each other no matter how long you wait.
Confirmed on a Samsung Galaxy M10s (Android 11):
W/BluetoothAdapter: getBluetoothLeAdvertiser() ble not available
E/BluetoothGattServerManager: BLE advertiser not available
This is a hardware/firmware limitation and cannot be fixed in software. Such a device still works fine as long as the peer it is talking to can advertise.
Not yet tested
Please treat this as early software:
- Only the public mesh timeline has been exercised against a real bitchat client. Private chats and media (images, voice notes, files) have not.
- Only ~30 English strings were rebranded; other locales still say "bitchat" and still contain emoji.
- This build has not had any external security review. Do not rely on it for sensitive communication.
Licence
GPL-3.0, inherited from upstream bitchat-android. Source is in this repository.