This is an unofficial, open-source Android client for Zulip — a powerful open-source team chat platform. The app aims to deliver a clean, responsive experience with full support for channels, direct messages, real-time events, and push notifications.
This project was created as a hobby, entirely non-commercially, as a way to explore Android development with modern technologies (Kotlin, Jetpack Compose, Clean Architecture) and as a passion project. It is not affiliated with any company or commercial product.
Zulip is a registered trademark of Kandra Labs, Inc. This project is not affiliated with or endorsed by Kandra Labs or the Zulip project.
| Login | DM List | Channel Chat |
|---|---|---|
| (screenshot) | (screenshot) | (screenshot) |
- Direct Messages (DM) — One-on-one and group private conversations
- Channels & Topics — Browse subscribed streams and threaded topics
- All Messages — Unified inbox with read/unread tracking
- Real-time events — Long-poll event queue via foreground service
- Push notifications — Deep-link navigation from notification to conversation
- Full-text search — Search messages across all channels
- Emoji reactions — React to messages with emoji
- File & image uploads — Attach files and photos to messages
- Secure session storage — EncryptedSharedPreferences (AES-256)
- API key or password login — Supports both authentication modes
The latest release APK is available on the Releases page.
Latest: v1.7.0
Note: You may need to enable Install from unknown sources in your Android settings.
Requirements:
- Android Studio Hedgehog or newer
- JDK 17
- Android SDK (API 35)
git clone https://github.com/vbamarcin/Zulip.git
cd Zulip
./gradlew assembleReleaseThe output APK will be at app/build/outputs/apk/release/.
| Component | Minimum |
|---|---|
| Android | 9.0 (API 28) |
| Target SDK | 35 |
| RAM | 2 GB recommended |
The app follows MVVM + Clean Architecture with a strict layered structure:
Presentation → Domain → Data → Core
| Layer | Contents |
|---|---|
| Presentation | Jetpack Compose screens, ViewModels |
| Domain | Use cases, repository interfaces |
| Data | Retrofit (remote), Room DB (local), DTOs |
| Core | Hilt DI, real-time event service, notifications, security |
| Technology | Usage |
|---|---|
| Kotlin 2.0 | Primary language |
| Jetpack Compose | UI framework |
| Hilt | Dependency injection |
| Retrofit + Moshi | REST API client |
| Room | Local database (SQLite) |
| OkHttp | HTTP client with logging |
| Kotlin Coroutines + Flow | Async / reactive data |
| EncryptedSharedPreferences | Secure session storage |
| ZulipEventService | Foreground service for real-time events |
app/src/main/java/com/mkras/zulip/
├── core/
│ ├── di/ # Hilt modules (Network, Repository, Storage)
│ ├── network/ # ZulipApiFactory (Basic Auth Retrofit)
│ ├── realtime/ # Long-poll event service & notifications
│ └── security/ # SecureSessionStorage
├── data/
│ ├── local/ # Room DB, DAOs, entities
│ ├── remote/ # Retrofit API service, DTOs
│ └── repository/ # Repository implementations
├── domain/
│ ├── model/ # Domain models
│ ├── repository/ # Repository interfaces
│ └── usecase/ # Business logic use cases
└── presentation/
├── login/ # Login screen + ViewModel
├── home/ # Main navigation
├── chat/ # Channel & DM chat screen
├── channels/ # Channels & topics list
├── dm/ # Direct messages list
├── search/ # Search screen
└── settings/ # App settings
The app connects to any self-hosted or cloud Zulip server. On the login screen, enter:
| Field | Example |
|---|---|
| Server URL | https://your-org.zulip.com |
user@example.com |
|
| Password or API key | your credentials |
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch:
git checkout -b feature/your-feature - Commit your changes:
git commit -m 'Add some feature' - Push to the branch:
git push origin feature/your-feature - Open a Pull Request
Use GitHub Issues to report bugs or request features.
This project is licensed under the MIT License — see the LICENSE file for details.
MIT License — Copyright (c) 2024 vbamarcin
This is an unofficial third-party client. It is not affiliated with, endorsed by, or in any way officially connected to Zulip or Kandra Labs, Inc.