Repository navigation
·
1 commit
to 15440dc7fada031daa2b07c5e8689326c824fa63
since this release
TransportChat v2.0 Release Notes
Security & Encryption
- Signal Protocol E2EE — Messages are now encrypted with the Signal Protocol (libsignal-client) instead of ephemeral ECDH/AES-GCM. Keys survive app restarts; sessions are ratcheted per message.
- SQLCipher encrypted database — All chat history, contacts, and session state are stored in an AES-256 encrypted database on-device. Nothing is kept in unencrypted memory-only structures.
- App Lock — PIN protection with optional biometric unlock. The app locks automatically on background.
- QR code identity verification — Scan a peer's QR code to cryptographically verify their public identity and mark them as trusted. Verified contacts show a lock badge.
- Identity mismatch warnings — If a peer's public key changes unexpectedly (possible MITM), the app shows a warning before allowing communication to resume.
Messaging
- Persistent chat history — Messages survive app restarts. Previously all chats were cleared when the app was removed from recents.
- Group chat — Create named groups with multiple LAN peers. Each member gets a pairwise-encrypted copy of every message (no shared group key).
- Disappearing messages — Set a per-chat timer; messages auto-delete after the configured duration with a countdown visible in the chat bubble.
- Chat bubbles — Outgoing and incoming messages now use distinct bubble styling instead of a flat list.
- Delivery & read receipts — Outgoing messages show sent → delivered → read status.
- Clear conversation — Clear a chat thread with a confirmation dialog.
- Unread tracking — Home list shows unread counts; badge clears when the thread is opened.
File Transfers
- Offer/accept/decline flow — Sending a file sends an offer first; the recipient must accept before the transfer begins.
- Multi-file auto-zip — Sending multiple files at once automatically bundles them into a single ZIP archive.
- File save picker — Recipients choose where to save received files via the system file picker.
Voice & Video Calls
- 1:1 WebRTC calls — Audio and video calls between any two peers on the LAN. No server relay; all media is peer-to-peer.
- Call overlay — In-call controls (mute, camera toggle, end call) rendered as a full-screen overlay over the chat UI.
Peer Discovery & Contact Management
- Background foreground service — The transport layer now runs as a persistent foreground service so peers remain reachable when the app is in the background.
- Boot receiver — The transport service auto-restarts after a device reboot.
- Manual peer add with profile fallback — Add a peer by IP:port directly; if NSD hasn't cached them yet the app fetches their profile via a direct TCP connection.
- Contact nicknames preserved — Renamed contacts keep their custom title even if the peer changes their display name.
- Group member deduplication — Endpoint contacts are deduplicated in member/group pickers.
UI & Navigation
- Single-activity Compose rewrite — Replaced four separate Activities (Main, PeerChat, Settings, About) with a single Jetpack Compose navigation graph.
- Home tabs — Separate tabs for Chats and Contacts on the home screen with tab icons.
- Settings screen — Consolidated settings with a QR code sharing action so you can share your identity without opening a chat.
- Verified lock badges — Contacts you've verified via QR show a lock icon on the home list and chat header.
- Permission rationale dialogs — Before requesting each sensitive permission for the first time, the app explains why it's needed.
Removed
- About screen — Removed as a standalone screen; attribution info moved into settings.
- In-memory-only chat storage — All prior message data was ephemeral and cleared on task removal. This is no longer the case.
- Home-grown ECDH session crypto — Replaced entirely by the Signal Protocol. Existing v1.x sessions are not forward-compatible.
Compatibility note: v2.0 is not backward-compatible with v1.5.x. All peers on the LAN must upgrade together — the Signal Protocol session handshake is incompatible with the old ECDH scheme.