# Synpad
A full-featured [Matrix](https://matrix.org) chat client built with Rust and [Dioxus](https://dioxuslabs.com/).
Synpad aims for near-complete feature parity with Element Web, delivering a fast, secure, and cross-platform Matrix experience.
## Features
**Messaging**
- Rich Markdown formatting, inline code, and code blocks
- Message editing, deletion, replies, and threads
- Reactions, read receipts, and typing indicators
- Polls, voice messages, and location sharing
- Message forwarding and edit history
- Message effects (confetti, fireworks)
**Encryption & Security**
- End-to-end encryption enabled by default for private rooms
- Cross-device verification (QR code and emoji)
- Key backup, recovery, export, and import
- Secure session persistence
**Rooms & Spaces**
- Room creation with encryption, permissions, and alias configuration
- Space hierarchy navigation and space-based filtering
- 23 configurable room permissions
- Room upgrades and chat history export (HTML, plain text, JSON)
**Calls & Media**
- Voice and video calls via Element Call integration
- Screen sharing and video rooms
- Media uploads with progress tracking
- Image viewer and file downloads
**Search & Navigation**
- Spotlight search (Ctrl+K) for rooms and users
- Server-side and local persistent search index
- Breadcrumb navigation for recent rooms
**Customization**
- Light and dark themes with custom theme support
- Bubble layout option
- Configurable notification rules
- Keyboard shortcuts
## Tech Stack
| Language | Rust |
| UI Framework | Dioxus 0.7 |
| Matrix SDK | [matrix-rust-sdk](https://github.com/matrix-org/matrix-rust-sdk) |
| Async Runtime | Tokio |
| State Store | SQLite (bundled) |
| Markdown | comrak + ammonia |
## Getting Started
### Prerequisites
- [Rust](https://rustup.rs/) (stable)
- [Dioxus CLI](https://dioxuslabs.com/learn/0.7/getting_started) (`cargo install dioxus-cli`)
### Desktop (default)
```bash
# Development
cargo run --bin synpad
# Or with Dioxus hot-reload
dx serve
# Release build
cargo run --bin synpad --release
```
### Packaging
```bash
# Desktop package
dx bundle --release --desktop
# Android package
dx bundle --release --android --features mobile --no-default-features
# iOS package
dx bundle --release --ios --features mobile --no-default-features
```
Mobile packaging requires the platform SDKs:
- Android: Android SDK + NDK available to the Dioxus CLI toolchain
- iOS: Xcode and Apple signing tools on macOS
### Web
```bash
dx serve --features web
dx build --release --features web
```
### Mobile
```bash
dx serve --android --features mobile --no-default-features
dx serve --ios --features mobile --no-default-features
```
## Project Structure
```
src/
app.rs # App routing and global state initialization
main.rs # Entry point (desktop/web/mobile)
auth/ # Login, registration, SSO, OIDC, password reset
client/ # Matrix SDK client setup, session management, sync
state/ # Global application state and signals
room/ # Room view, timeline, composer, calls, media, widgets
room_list/ # Room list, spaces, filtering, room creation
right_panel/ # Room info, members, threads, files panels
components/ # Reusable UI components
settings/ # User settings pages
encryption/ # E2E encryption, verification, key management
notifications/ # Desktop notifications and push rules
cache/ # Media and avatar caching
persistence/ # Session and state persistence
theme/ # Theming and design tokens
i18n/ # Internationalization
utils/ # Markdown, HTML rendering, search, formatting
layouts/ # Main and auth layout containers
pages/ # Top-level page components
assets/
css/main.css # Application styles
fonts/ # Font files
icons/ # Icon assets
```
## License
[AGPL-3.0-only](https://www.gnu.org/licenses/agpl-3.0.html)