SulkuMail is a modern, cross-platform email client built with Kotlin Multiplatform and Compose, providing a consistent experience across Android, iOS, Desktop, and Server platforms. Project is on very early stages and at first the focus is adding full gmail support to read and delete emails, and later adding other mail providers + sending mails.
🛠Technology Stack
- Kotlin Multiplatform - Share code between platforms
- Kotlin Compose - Modern UI toolkit for all platforms
- Ktor - HTTP client for network requests
- Koin - Dependency injection
- Google Credentials Manager & Identity service - Native Android & IOS login
- Multiplatform Settings - Secure credential storage
Roadmap
- Add proper support for multiple accounts
- Add proper mail viewing capabilities
- Implement secure credential storage
- Implement local caching for offline access
- Background synchronization
- Complete account authentication flows on ios

Account Management (Google)
- Native Android Login
- Desktop Login
- Native IOS Login
- Get account details, name,email & profile picture
Security & Storage
- Android (DataStoreSettings)
- Desktop (DataStoreSettings)
- IOS (KeyChain)
Mail Functionality
- Fetching mail logic
- Delete mail Logic
- Batch delete mails
- Mail paginator/infinity scrolling
- Background tasks for fetching mails
- Store mails
User Interface
- Siderbar containing users mail folders, Manage Accounts & Settings at the bottom
- Basic view to see snippets of fetched mails
- Complete mail content view with attachments
- Display Users mail folders & info on sidebar
- Settings UI
- ManageAccounts UI (View & manage added Mail accounts)
- Robust error handling
- Add multiple gmail accounts
To setup the project do the following steps:
-
Clone the repository
git clone https://github.com/Zoltus/SulkuMail
-
Open project in IntelliJ
-
Create local.properties in project root directory with:
sdk.dir=/path/to/your/android/sdk GOOGLE_API_SECRET=your_google_client_secret GOOGLE_CLIENT_ID=your_google_client_id GOOGLE_REDIRECT_URL=http://localhost:8079/callback // This is callback url for the jvm, jvm hosts own http server to receive google auth code, no need to change BACKEND_URL=your_backend_url