Offline-first P2P messaging for Android β no servers, no internet, no compromises.
Decentralized β’ Offline-Ready β’ Lightweight β’ Open Source
Meshify is a decentralized peer-to-peer messaging application that enables real-time communication between Android devices on the same local network β without requiring internet connectivity or central servers.
Built with Clean Architecture, Jetpack Compose, and Material 3 Expressive, Meshify delivers a modern, performant, and privacy-respecting messaging experience.
- Zero Infrastructure: No servers, no cloud, no accounts. Just direct device-to-device communication.
- Offline-First: Works entirely on local networks (WiFi). Internet is optional.
- Plaintext by Design: No encryption overhead. Messages travel as plaintext over LAN for maximum simplicity and speed.
- Privacy-Respecting: No telemetry, no analytics, no data collection. Your conversations stay on your device.
- 1-on-1 messaging with threaded replies
- File attachments β images, videos, documents
- Message reactions, delete, and forward
- Offline storage with Room database and pagination
- mDNS/NSD automatic peer discovery on local networks
- Real-time presence β instant online/offline status indicators
- TCP-based transport with connection pooling and keep-alive monitoring
- UUID-based peer identification (no phone numbers, no accounts)
- Material 3 Expressive design system with dynamic colors
- Light / Dark / System theme support
- Full Arabic & English localization with RTL layout support
- Tactile interactions β spring-based animations, premium haptic feedback, morphing shapes
- Strict module boundaries β domain, data, network, UI, and feature modules
- Dependency Injection with Hilt
- Reactive state management with Kotlin Flow and ViewModel
- Testable & maintainable codebase with clear separation of concerns
:app
βββ :core:common # Utilities (Logger, FileUtils, ImageCompressor)
βββ :core:data # Room DB, DataStore, Repository implementations
βββ :core:domain # Pure Kotlin: Interfaces, Models, Use Cases
βββ :core:network # mDNS, TCP Transport, Connection Pooling
βββ :core:ui # Material 3 Components, Theme, Haptics
βββ :feature:home # Recent chats screen
βββ :feature:chat # Chat conversation screen
βββ :feature:discovery # Device discovery
βββ :feature:settings # Settings & customization
:app β :feature:* β :core:*
:feature:* β :core:* (NEVER other feature modules)
:core:* β :core:domain (domain has ZERO dependencies)
| Module | Responsibility |
|---|---|
:core:domain |
Pure Kotlin β repository interfaces, domain models, use cases |
:core:data |
Room database (v7), DataStore preferences, repository implementations |
:core:network |
mDNS/NSD discovery, LAN TCP sockets, connection pooling, health monitoring |
:core:ui |
Material 3 components, theming, haptics, shared composables |
:feature:* |
Screen-level UI, ViewModels, navigation |
| Category | Technology | Version |
|---|---|---|
| Language | Kotlin | 2.3.10 |
| UI | Jetpack Compose | 2026.02.00 (BOM) |
| Design | Material 3 Expressive | 1.4.0-alpha10 |
| Database | Room | 2.8.4 |
| Preferences | DataStore | 1.1.1 |
| Pagination | Paging 3 | 3.3.5 |
| Navigation | Jetpack Navigation | 2.9.7 |
| DI | Hilt | 2.59 |
| Media | Media3 | 1.8.0 |
| Images | Coil 3 | 3.4.0 |
| Testing | JUnit 4, MockK, Turbine, Robolectric, Espresso | β |
| Setting | Value |
|---|---|
| AGP | 9.1.0 |
| Min SDK | 26 (Android 8.0) |
| Target SDK | 35 (Android 15) |
| JDK | 21 |
| Gradle JVM Args | -Xmx4096m |
- JDK 21 (recommended via SDKMAN)
- Android SDK (API 26+)
- Git
# Clone the repository
git clone https://github.com/Yussefgafer/Meshify.git
cd Meshify
# Clean build
./gradlew clean
# Build debug APK
./gradlew assembleDebug
# Build release APK (requires signing config)
./gradlew assembleReleaseOutput APKs:
- Debug:
app/build/outputs/apk/debug/app-debug.apk - Release:
app/build/outputs/apk/release/app-release.apk
adb install -r app/build/outputs/apk/debug/app-debug.apk- Connect two or more Android devices to the same WiFi network
- Launch Meshify on each device
- Peers appear automatically via mDNS discovery
- Tap a peer to start messaging
Note: Meshify operates on local networks only. No internet connection required.
# Run all unit tests
./gradlew testDebugUnitTest
# Run instrumented tests
./gradlew connectedAndroidTest
# Lint check
./gradlew lintScreenshots coming soon...
- BLE Transport: Bluetooth Low Energy for proximity-based messaging
- Group Messaging: Multi-peer conversations
- Voice Messages: Audio recording and playback
- Custom Themes: User-selectable color palettes beyond Material You
- Message Search: Full-text search across conversations
- Export/Import Backup: Local chat backup and restore
Distributed under the MIT License. See LICENSE for details.
Meshify is a personal project built for learning and experimentation. While pull requests are welcome, please note that this repository is primarily maintained by a single developer.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes with clear messages
- Push to your branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow Clean Architecture principles
- Maintain module dependency boundaries
- Write KDoc comments for public APIs
- Ensure all tests pass before submitting a PR
Yussef Gafer β Project Maintainer
- GitHub: @Yussefgafer
- Project Link: https://github.com/Yussefgafer/Meshify
This codebase was designed and implemented using LLM (Qwen) under the strategic direction of Yussef Gafer. AI tools were used for code generation, architecture planning, and testing β with human oversight for every decision.
Built with β₯ for offline-first, decentralized communication.