End-to-end encrypted SMS synchronization between Android and desktop devices
Daakiya (Hindi for "Postman") is a cross-network SMS synchronization system that delivers SMS messages from your Android device to your desktop in real-time, with end-to-end encryption ensuring your privacy.
- ✅ Real-time SMS Sync - Messages appear on desktop within seconds
- ✅ End-to-End Encryption - Server cannot read your messages (AES-256-GCM)
- ✅ Cross-Network Support - Works on any network (WiFi, mobile data, different ISPs)
- ✅ OTP Auto-Detection - One-tap copy for verification codes
- ✅ Auto-Delete - Messages automatically deleted after configurable retention period
- ✅ Multi-Device Support - Sync to multiple desktops
- ✅ Browser Notifications - Get notified of new SMS on desktop
- ✅ Zero-Knowledge Server - Server only sees encrypted payloads
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ Android │ Encrypted SMS → │ Cloud Relay │ Encrypted SMS → │ Desktop │
│ Device │────────────────────→│ Server │────────────────────→│ Client │
└─────────────┘ └──────────────┘ └─────────────┘
Technology Stack:
- Server: Node.js + Express + Socket.io + PostgreSQL
- Android: Kotlin + WorkManager + Room + OkHttp
- Web Client: React + TypeScript + Vite + Material-UI
- Database: PostgreSQL with Prisma ORM
- Node.js 20+
- Android Studio (for Android development)
- Docker & Docker Compose (for local development)
-
Clone the repository:
git clone https://github.com/yourusername/daakiya.git cd daakiya -
Install dependencies:
npm run install:all
-
Start development environment:
# Start databases (PostgreSQL + Redis) docker-compose up -d # Run database migrations cd packages/server npx prisma migrate dev npx prisma generate # Start server and web client cd ../.. npm run dev
-
Access the application:
- Web Client: http://localhost:5173
- Server API: http://localhost:8443
- API Docs: http://localhost:8443/api/docs
Note: This project uses non-standard ports for security:
- PostgreSQL:
15432(external) →5432(internal) - Redis:
16379(external) →6379(internal) - Server:
8443(external) →3000(internal)
cd packages/android
./gradlew assembleDebug
adb install app/build/outputs/apk/debug/app-debug.apkdaakiya/
├── packages/
│ ├── server/ # Cloud relay server (Node.js)
│ ├── android/ # Android application (Kotlin)
│ ├── web-client/ # React web client
│ └── shared/ # Shared types and utilities
├── docs/ # Documentation
└── .github/ # CI/CD workflows
# Install all dependencies
npm run install:all
# Run all tests
npm run test
# Run linting
npm run lint
# Type checking
npm run typecheck
# Start development servers
npm run dev
# Build all packages
npm run build
# Clean all node_modules and build artifacts
npm run clean- Algorithm: AES-256-GCM (authenticated encryption)
- Key Storage: Android KeyStore (hardware-backed when available)
- Key Exchange: QR code pairing with secure random codes
- Server Access: None (zero-knowledge architecture)
- Default: 7 days (configurable)
- Storage: Encrypted at rest
- Auto-Delete: Automated cleanup job
- User Control: Configure retention period in settings
- Docker Compose - Deploy to your own VPS
- Railway - Easiest option, auto-scaling
- AWS - Enterprise-grade scalability
- DigitalOcean - Balanced control & ease
# Copy environment template
cp .env.production.template .env.production
# Edit with your production settings
nano .env.production
# Deploy (automated script)
./scripts/deploy.sh
# Or manually with Docker Compose
docker-compose -f docker-compose.prod.yml up -dSee Deployment Guide for detailed instructions.
Production (use non-standard ports for security):
DATABASE_URL=postgresql://user:password@host:15432/daakiya
JWT_SECRET=<use-32+-random-characters>
REDIS_URL=redis://host:16379
MESSAGE_RETENTION_DAYS=7
ALLOWED_ORIGINS=https://your-domain.com
PORT=8443See Port Configuration for security details.
# View logs
docker-compose -f docker-compose.prod.yml logs -f
# Check service health
curl https://your-domain.com/health
# Database backup
docker-compose -f docker-compose.prod.yml exec postgres pg_dump -U daakiya_prod daakiya_prod > backup.sql
# Restart services
docker-compose -f docker-compose.prod.yml restart# Run all unit tests
npm run test
# Run with coverage
npm run test:ci# Start test environment
docker-compose -f docker-compose.integration.yml up -d
# Run integration tests
npm run test:integration
# Stop test environment
docker-compose -f docker-compose.integration.yml down -vSee CI/CD Documentation for testing details.
cd packages/android
./gradlew connectedAndroidTest- SMS capture on Android
- End-to-end encryption
- WebSocket real-time sync
- Web client
- Device pairing via QR code
- SMS sending from desktop
- iOS support
- Native desktop apps (Electron)
- MMS support
- Message search
- Contact sync
- Dark mode
- Multiple language support
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
- Architecture - System design and architecture
- Deployment Guide - Production deployment instructions
- Port Configuration - Non-standard ports and security
- CI/CD Pipeline - Testing and automation
- API Documentation - REST API and WebSocket endpoints
- Development Guide - Local development setup
- ✅ Unit Tests: 64 tests passing (98.5% coverage)
- ✅ Integration Tests: 58 tests (infrastructure + SMS simulator + E2E)
- ✅ Android Tests: Unit and instrumented tests
- ✅ CI/CD: Automated testing on all PRs
Trigger integration tests: Add integration-tests label to PR
Trigger Android emulator tests: Add android-emulator label to PR
- API Documentation - REST and WebSocket API reference
- Development Guide - Setup and development workflow
- Security - Security considerations and best practices
- Troubleshooting - Common issues and solutions
MIT License - see LICENSE file for details
- Inspired by KDE Connect
- Built with Socket.io
- Encryption powered by AES-256-GCM
Made with ❤️ for privacy-conscious users