Warning
This is an experimental software based on bitchat-android Expect bugs and instability.
A secure, decentralized, peer-to-peer messaging app that works over Bluetooth mesh networks. No internet required for mesh chats, no servers, no phone numbers - just pure encrypted communication. SignalOut also supports geohash channels, which use an internet connection to connect you with others in your geographic area.
This project is a fork of the original project bitchat with a WhatsApp-style UI redesign and new features. It maintains protocol compatibility where applicable.
You can download the alpha version of SignalOut for Android from the GitHub Releases page
Instructions:
- Download the APK: On your Android device, navigate to the link above and download the latest
.apkfile. Open it. - Allow Unknown Sources: On some devices, before you can install the APK, you may need to enable "Install from unknown sources" in your device's settings. This is typically found under Settings > Security or Settings > Apps & notifications > Special app access.
- Install: Open the downloaded
.apkfile to begin the installation.
This project is released into the public domain. See the LICENSE file for details.
- ✅ WhatsApp UI Redesign: Modern WhatsApp-like interface including dark/light themes, typography, custom message bubbles, doodle patterns, and redesigned chat headers/inputs.
- ✅ Voice & Video Calling over WIFI Direct: Real-time voice and video calling powered by WebRTC.
- ✅ File & Media Attachments: Support for sending documents, images, and audio directly in chats.
- ✅ Cross-Platform Compatible: Full protocol compatibility with iOS SignalOut
- ✅ Decentralized Mesh Network: Automatic peer discovery and multi-hop message relay over Bluetooth LE
- ✅ End-to-End Encryption: X25519 key exchange + AES-256-GCM for private messages
- ✅ Channel-Based Chats: Topic-based group messaging with optional password protection
- ✅ Store & Forward: Messages cached for offline peers and delivered when they reconnect
- ✅ Privacy First: No accounts, no phone numbers, no persistent identifiers
- ✅ IRC-Style Commands: Familiar
/join,/msg,/whostyle interface - ✅ Message Retention: Optional channel-wide message saving controlled by channel owners
- ✅ Emergency Wipe: Triple-tap logo to instantly clear all data
- ✅ Modern Android UI: Jetpack Compose with Material Design 3
- ✅ Dark/Light Themes: Terminal-inspired aesthetic matching iOS version
- ✅ Battery Optimization: Adaptive scanning and power management
- Android Studio: Arctic Fox (2020.3.1) or newer
- Android SDK: API level 26 (Android 8.0) or higher
- Kotlin: 1.8.0 or newer
- Gradle: 7.0 or newer
-
Clone the repository:
git clone https://github.com/techflyers/signalout.git cd signalout -
Open in Android Studio:
# Open Android Studio and select "Open an Existing Project" # Navigate to the signalout directory
-
Build the project:
./gradlew build
-
Install on device:
./gradlew installDebug
For development builds with debugging enabled:
./gradlew assembleDebug
adb install -r app/build/outputs/apk/debug/app-debug.apkFor production releases:
./gradlew assembleReleaseThe app requires the following permissions (automatically requested):
- Bluetooth: Core BLE functionality
- Location: Required for BLE scanning on Android
- Network: Expand your mesh through public internet relays
- Notifications: Message alerts and background updates
- Bluetooth LE (BLE): Required for mesh networking
- Android 8.0+: API level 26 minimum
- RAM: 2GB recommended for optimal performance
/j #channel- Join or create a channel/m @name message- Send a private message/w- List online users/channels- Show all discovered channels/block @name- Block a peer from messaging you/block- List all blocked peers/unblock @name- Unblock a peer/clear- Clear chat messages/pass [password]- Set/change channel password (owner only)/transfer @name- Transfer channel ownership/save- Toggle message retention for channel (owner only)
- Install the app on your Android device (requires Android 8.0+)
- Grant permissions for Bluetooth and location when prompted
- Launch signalout - it will auto-start mesh networking
- Set your nickname or use the auto-generated one
- Connect automatically to nearby iOS and Android signalout users
- Join a channel with
/j #generalor start chatting in public - Messages relay through the mesh network to reach distant peers
- Jetpack Compose UI: Modern Material Design 3 interface
- Dark/Light Themes: Terminal-inspired aesthetic matching iOS
- Haptic Feedback: Vibrations for interactions and notifications
- Adaptive Layout: Optimized for various Android screen sizes
- Message Status: Real-time delivery and read receipts
- RSSI Indicators: Signal strength colors for each peer
- Password Protection: Channel owners can set passwords with
/pass - Message Retention: Owners can enable mandatory message saving with
/save - @ Mentions: Use
@nicknameto mention users (with autocomplete) - Ownership Transfer: Pass control to trusted users with
/transfer
- Private Messages: X25519 key exchange + AES-256-GCM encryption
- Channel Messages: Argon2id password derivation + AES-256-GCM
- Digital Signatures: Ed25519 for message authenticity
- Forward Secrecy: New key pairs generated each session
- No Registration: No accounts, emails, or phone numbers required
- Ephemeral by Default: Messages exist only in device memory
- Cover Traffic: Random delays and dummy messages prevent traffic analysis
- Emergency Wipe: Triple-tap logo to instantly clear all data
- Bundled Tor Support: Built-in Tor network integration for enhanced privacy when internet connectivity is available
- LZ4 Compression: Automatic compression for messages >100 bytes
- 30-70% bandwidth savings on typical text messages
- Smart compression: Skips already-compressed data
- Adaptive Power Modes: Automatically adjusts based on battery level
- Performance mode: Full features when charging or >60% battery
- Balanced mode: Default operation (30-60% battery)
- Power saver: Reduced scanning when <30% battery
- Ultra-low power: Emergency mode when <10% battery
- Background efficiency: Automatic power saving when app backgrounded
- Configurable scanning: Duty cycle adapts to battery state
- Optimized Bloom filters: Faster duplicate detection with less memory
- Message aggregation: Batches small messages to reduce transmissions
- Adaptive connection limits: Adjusts peer connections based on power mode
signalout uses an efficient binary protocol optimized for Bluetooth LE:
- Compact packet format with 1-byte type field
- TTL-based message routing (max 7 hops)
- Automatic fragmentation for large messages
- Message deduplication via unique IDs
- Each device acts as both client and peripheral
- Automatic peer discovery and connection management
- Store-and-forward for offline message delivery
- Adaptive duty cycling for battery optimization
- Coroutine Architecture: Asynchronous operations for mesh networking
- Kotlin Coroutines: Thread-safe concurrent mesh operations
- EncryptedSharedPreferences: Secure storage for user settings
- Lifecycle-Aware: Proper handling of Android app lifecycle
- Battery Optimization: Foreground service and adaptive scanning
- SignaloutApplication.kt: Application-level initialization and dependency injection
- MainActivity.kt: Main activity handling permissions and UI hosting
- ChatViewModel.kt: MVVM pattern managing app state and business logic
- BluetoothMeshService.kt: Core BLE mesh networking (central + peripheral roles)
- EncryptionService.kt: Cryptographic operations using BouncyCastle
- BinaryProtocol.kt: Binary packet encoding/decoding matching iOS format
- ChatScreen.kt: Jetpack Compose UI with Material Design 3
- Jetpack Compose: Modern declarative UI
- BouncyCastle: Cryptographic operations (X25519, Ed25519, AES-GCM)
- Nordic BLE Library: Reliable Bluetooth LE operations
- Kotlin Coroutines: Asynchronous programming
- LZ4: Message compression (when enabled)
- EncryptedSharedPreferences: Secure local storage
- WebRTC: Voice and video calling
-
Update version information:
// In app/build.gradle.kts defaultConfig { versionCode = 2 // Increment for each release versionName = "1.1.0" // User-visible version }
-
Create a signed release build:
./gradlew assembleRelease
-
Generate app bundle (recommended for Play Store):
./gradlew bundleRelease
- LoRA: Planned support for long-range transmission of emergency messages using LoRA technology.
- AI Routing: Using AI to route messages based on priority, urgency of message, availability of peers and network conditions through the mesh network.
Created using Antigravity.