● v0.18 — STABLE RELEASE

[ BESPOKE ]
Secure. Decentralized. Yours.

A peer-to-peer encrypted Android messenger with no central authority. End-to-end encrypted with ECDH + AES-256-GCM. Runs a WebSocket signaling server directly on your device. Communicates over your LAN or the open internet — your choice.

⇓  DOWNLOAD APK  v0.18 INSTALL GUIDE
bespoke@android ~ /signal
$ adb install BeSpoke-v0.18.apk
# Performing Streamed Install... Success

$ bespoke --connect auto
# [mDNS] Discovered server at 192.168.1.x:8081
# [ECDH] Key exchange complete
# [AES-256-GCM] Session established
Connected. Messages are end-to-end encrypted.

$
FEATURES
🔒

END-TO-END ENCRYPTED

ECDH key exchange over secp256r1. AES-256-GCM with random IV per message. Keys never leave your device.

🌐

DECENTRALIZED

Any device can host the signaling server. No cloud lock-in. Run your own node on LAN or WAN.

📶

AUTO-DISCOVERY

mDNS/NSD scans your local network for BeSpoke servers automatically. Falls back to WAN addresses.

🕵

IDENTITY SYSTEM

PBKDF2-hashed handles on the server. EC key pair generated on device. Blockchain-style user registry.

INSTALLATION

ENABLE UNKNOWN SOURCES

On Android: Settings → Apps → Special App Access → Install Unknown Apps → enable for your browser or file manager.

DOWNLOAD THE APK

Tap the DOWNLOAD APK button above or transfer BeSpoke-v0.18.apk to your device via USB/ADB.

INSTALL & LAUNCH

Open the APK from your Downloads folder, tap Install, then open BeSpoke.

CREATE YOUR HANDLE

Choose a unique handle and password. Your ECDH key pair is generated locally — your private key never leaves the device.

CONNECT TO A SERVER

Set server mode to AUTO for mDNS discovery, LAN for a known local address, or WAN for the public relay. The server auto-registers your handle on first login.

PATCH NOTES
v0.18 LATEST 2026-03-06

BUG FIXES

  • Fix sent messages stored as encrypted Base64 — own messages now display as plaintext in chat and conversation preview
  • Fix isEncrypted flag inverted on received messages — lock icon and E2E status now correct
  • Fix ICE candidate deserialization crash — replaced unserializable Map<String,Any> with typed data class
  • Fix file chunk reassembly using arrival order — chunks now indexed by position, handles out-of-order WebRTC delivery correctly
  • Fix voice notes >1MB silently dropped — large voice notes now routed through server file transfer
  • Fix clearAll() not clearing stored password on logout
  • Add send buffer backpressure to WebRTC file transfer — prevents data channel overflow on large files
  • Fix conversation preview showing [Encrypted message] for all messages — now shows plaintext / [Voice note] / [File attachment] by type
  • Server: get-public-key now returns stored key for offline users, enabling E2E setup without recipient being online
v0.15 RELEASE 2026-02-02

ENHANCEMENTS

  • FileProvider integration for secure sharing with external apps
  • FileUtils: MIME type detection and human-readable file size formatting
  • File attachment UI: tap to open, long-press for options (Open With / Save to Downloads / Share)
  • File category icons — image, video, audio, PDF, document, archive, code
  • Improved attachment handling in MessageBubble with file existence checks
v0.13 RELEASE 2026-02-02

FILE TRANSFER

  • Server-side file storage with 3GB rolling buffer
  • Files held server-side until recipient downloads, then auto-deleted
  • Oldest files purged automatically when storage limit is reached
  • New FileTransfer.kt — HTTP upload/download for file attachments
  • ChatScreen uploads attachments directly to signaling server
  • MainScreen downloads files on receipt of FILE: notification
  • Parallel fallback server discovery for faster connection
v0.12 RELEASE 2026-02-02

INITIAL RELEASE

  • End-to-end encrypted messaging — ECDH key exchange + AES-256-GCM
  • Firebase Cloud Messaging push notifications for offline delivery
  • mDNS auto-discovery for LAN server detection (_bespoke._tcp)
  • WebRTC data channel file transfer (chunked, 16KB chunks)
  • Voice note recording and playback — AAC/M4A, up to 5 minutes
  • Hacker-themed terminal UI — monospace, dark/green palette

SERVER

  • Node.js WebSocket signaling server
  • User registration with PBKDF2 password hashing + salt
  • mDNS service advertisement via bonjour-service
  • Offline message buffering (7-day retention)
  • FCM push notification relay
  • Blockchain-style user identity registry

CLIENT

  • Android app — Jetpack Compose, minSdk 26
  • AUTO / LAN / WAN server mode selector
  • Contact management and user lookup by handle
  • Conversation view with persistent message history
  • Auto-login with encrypted credential storage