A modern, cross-platform email client built with Kotlin Multiplatform and JMAP.
Slynite/mail is an email application designed for the future. It leverages the JMAP protocol for efficient, real-time email synchronization and is built using Kotlin Multiplatform to run seamlessly across Android, iOS, macOS, Windows, Linux, and Web.
- JMAP Protocol: Fast, efficient email synchronization with modern push capabilities
- Cross-Platform: Single codebase for mobile, desktop, and web targets
- Modular Architecture: Feature-based modules for Mail, Contacts, and Calendar
- Modern UI: Clean interface blending serif typography with contemporary design principles
- Offline-First: Local caching for seamless access without network connectivity
- Privacy-Focused: Your data stays on your server
| Component | Technology |
|---|---|
| Framework | Kotlin Multiplatform + Compose Multiplatform |
| JMAP Client | jmap-rs (Rust) with Kotlin Native bindings |
| State Management | Decompose (Navigation) + MVI (Business Logic) |
| Dependency Injection | Koin |
| Local Storage | SQLDelight (SQLite) |
| Image Loading | Coil |
| Target Platforms | Android, iOS, macOS, Windows, Linux, Web |
Slynite/mail is in early development.
The repository is set up, and the core architecture is being established. Refer to the Concept Document for the full vision and design philosophy.
| Feature | Priority | Description |
|---|---|---|
| Project scaffolding | Critical | Repository structure, CI/CD pipelines, build configuration |
| JMAP client integration | Critical | Rust jmap-rs bindings for Kotlin Native |
| Account authentication | Critical | OAuth2 and JMAP authentication flows |
| Email list view | High | Display inbox messages with thread grouping |
| Email detail view | High | Read emails with HTML and plain text rendering |
| Compose and send emails | High | Create and send new emails with attachments |
| Local caching | High | Offline storage using SQLDelight |
| Core navigation | High | Decompose-based navigation between screens |
| Feature | Priority | Description |
|---|---|---|
| Search functionality | High | Full-text search across emails |
| Email flags and folders | High | Starred, archive, custom folders, and filters |
| Contacts integration | High | JMAP Contacts support with address book |
| Calendar integration | Medium | JMAP Calendars with event viewing |
| Push notifications | Medium | Real-time notifications via JMAP push |
| Multiple accounts | Medium | Support for multiple email accounts simultaneously |
| Desktop application | Medium | macOS, Windows, and Linux desktop builds |
| Web application | Low | Browser-based email client |
| End-to-end encryption | Low | PGP/OpenPGP integration for sensitive communications |
- Kotlin 1.9.x or higher
- JDK 17 or higher
- Android SDK (for Android builds)
- Xcode 15+ (for iOS/macOS builds)
- CMake (for native dependencies)
# Clone the repository
git clone https://github.com/Slynite/mail.git
cd mail
# Build for Android
./gradlew assembleDebug
# Run Android app
./gradlew :android:run
# Build for Desktop (native)
./gradlew :desktop:run
# Run iOS simulator (macOS only)
./gradlew :ios:launchSimulatormail/
├── shared/ # Shared Kotlin code (Compose UI, ViewModels, business logic)
│ ├── composeApp/ # Multiplatform Compose UI
│ └── data/ # Data layer (repositories, JMAP client, local storage)
├── android/ # Android-specific configuration
├── ios/ # iOS-specific configuration
├── desktop/ # Desktop (macOS/Windows/Linux) configuration
├── web/ # Web (Kotlin/JS + Compose) configuration
└── build.gradle.kts # Root build configuration
Contributions are welcome. Please review the Concept Document to understand the project vision before submitting changes.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Slynite/mail is released under the MIT License.
- JMAP Protocol Specification
- jmap-rs Repository
- Compose Multiplatform Documentation
- Decompose Library
Placeholder project name. Final branding coming soon.