A native Rust implementation of a Signal Desktop client built with egui and presage.
- π End-to-end encrypted messaging using the Signal Protocol
- π¬ Full messaging support: text, emojis, reactions, replies, quotes
- π Rich attachments: images, videos, audio, documents
- ποΈ Voice notes with recording and playback
- π₯ Group chats with full management capabilities
- π Device linking via QR code
- π Desktop notifications for new messages
- π¨ Native UI with light and dark themes
- πΌοΈ Avatar support with sync across devices
- π Clipboard integration for easy sharing
- π SQLCipher database encryption for at-rest data security
- π macOS Dock integration with proper app bundle support
Signal-Tauri is organized into several key modules:
app.rs: Main application logic and state managementsignal/: Signal Protocol implementationmanager.rs: Connection management and message dispatchmessages.rs: Message sending and receivingcontacts.rs: Contact management and syncinggroups.rs: Group chat functionalityprofiles.rs: User profile managementattachments.rs: Attachment upload/downloadprovisioning.rs: Device linking and registration
storage/: Data persistence layerdatabase.rs: SQLCipher database managementmessages.rs: Message storage and queriesconversations.rs: Conversation managementcontacts.rs: Contact storagesettings.rs: User preferencesencryption.rs: Database encryption setup
ui/: User interface componentsviews/: Main application views (chat, settings, etc.)components/: Reusable UI componentswidgets/: Custom widgets (emoji picker, voice recorder)theme.rs: Theme configurationavatar_cache.rs: Avatar image cachingemoji_rasterizer.rs: Color emoji rendering
services/: Background servicessync.rs: Contact and profile synchronizationnotifications.rs: Desktop notification handlingupdates.rs: Message update processing
- Rust 1.70 or later
- SQLCipher (for database encryption)
- Platform-specific dependencies:
- macOS: Xcode Command Line Tools
- Linux:
- Development headers for:
gtk3,atk,cairo,pango,gdk-pixbuf,glib - OpenSSL development headers
- SQLCipher development headers
- Development headers for:
- Windows: Visual Studio 2019 or later with C++ build tools
# Clone the repository
git clone https://github.com/yourusername/signal-tauri.git
cd signal-tauri
# Build the project
cargo build --release
# Run the application
cargo run --releaseFor faster compilation during development:
cargo run- Launch the application
- Link as a secondary device:
- Open Signal on your primary device (phone)
- Go to Settings β Linked Devices β Link New Device
- Scan the QR code displayed in Signal-Tauri
- Wait for the linking process to complete
- Set up database encryption when prompted (first launch only)
- Send messages: Click on a conversation and type in the message box
- Send attachments: Click the attachment button to select files
- Record voice notes: Hold the microphone button to record
- React to messages: Right-click on a message to react
- Quote/reply: Select a message and click the reply button
- Search: Use the search bar to find conversations or contacts
- Settings: Access via the gear icon to customize themes and preferences
Configuration is stored in platform-specific directories:
- macOS:
~/Library/Application Support/signal-tauri/ - Linux:
~/.local/share/signal-tauri/ - Windows:
%APPDATA%\signal-tauri\
The encrypted SQLite database is stored at:
<config_dir>/signal-tauri.db
Logs are written to stdout. You can control log levels via the RUST_LOG environment variable:
RUST_LOG=signal_tauri=debug,presage=debug cargo runsignal-tauri/
βββ src/
β βββ app.rs # Main app state and logic
β βββ main.rs # Entry point
β βββ signal/ # Signal protocol layer
β βββ storage/ # Database and persistence
β βββ ui/ # User interface
β βββ services/ # Background services
βββ Cargo.toml # Rust dependencies
βββ LICENSE # MIT license
βββ README.md # This file
- eframe: Cross-platform GUI framework
- presage: Signal protocol implementation
- rusqlite: SQLite database with SQLCipher support
- tokio: Async runtime
- serde: Serialization/deserialization
The release profile is optimized for size and performance:
cargo build --releaseRelease builds include:
- Link-time optimization (LTO)
- Dead code stripping
- Size optimization (
opt-level = "z") - Panic abort strategy
Contributions are welcome! Please feel free to submit issues or pull requests.
- Follow Rust's standard formatting (
cargo fmt) - Ensure code passes linting (
cargo clippy) - Write tests for new functionality
- Update documentation as needed
This project is licensed under the MIT License - see the LICENSE file for details.
Note: The Cargo.toml file mentions AGPL-3.0, but the LICENSE file contains MIT license text. Please clarify the intended license.
This is an unofficial Signal client implementation. It is not affiliated with or endorsed by Signal Messenger LLC. Use at your own risk.
- This client uses the Signal protocol but is not officially supported
- Some features may not be fully compatible with official Signal clients
- Data encryption and security are implemented but have not been formally audited
- Signal for the excellent messaging protocol
- Whisperfish for the presage library
- egui for the immediate mode GUI framework
- All the amazing open source contributors
If you encounter issues:
- Check the Issues page
- Enable debug logging:
RUST_LOG=debug cargo run - Review the logs for error messages
- Create a new issue with:
- Your OS and version
- Steps to reproduce
- Relevant log output (redact sensitive information)
- Message search functionality
- Sticker support
- Video/audio calls (if feasible)
- Message export functionality
- Multi-account support
- Custom notification sounds
- Message deletion and editing
- Backup and restore
Built with β€οΈ using Rust and egui