Resilient offline communication for the moments that cannot wait.
Komunikasi darurat antarperangkat ketika internet, BTS, dan layanan pusat tidak dapat diandalkan.
"When The Grid Falls, We Rise."
Mengapa CARAKA · Kemampuan · Arsitektur · Mulai Cepat · Landing Page · Dokumentasi
CARAKA adalah aplikasi komunikasi mesh untuk Android yang membantu warga, relawan, dan tim tanggap darurat tetap bertukar informasi tanpa bergantung pada server pusat mana pun. Perangkat di sekitar menjadi node yang dapat menemukan, menerima, dan meneruskan pesan melalui koneksi lokal.
CARAKA tidak dimaksudkan untuk menggantikan internet. Ia hadir sebagai jalur komunikasi cadangan ketika jaringan utama terganggu, terputus, atau tidak dapat dipercaya.
| Tanpa Cloud Tidak membutuhkan akun atau backend terpusat |
Multi-Transport Memilih jalur lokal yang tersedia |
Security by Design Enkripsi, tanda tangan, dan database terlindungi |
Emergency First SOS prioritas tinggi untuk kondisi lapangan |
- Laporan Kinerja Komdigi 2024 mencatat PDNS melayani 385 instansi pusat dan daerah; laporan yang sama menyebut ransomware 2024 mengganggu sejumlah layanan publik.
- InaRISK BNPB menyediakan kajian risiko bencana melalui layanan data GIS, tetapi akses terhadap layanan digital tetap bergantung pada infrastruktur jaringan.
- CARAKA mengambil peran yang spesifik: menjaga komunikasi lokal tetap tersedia ketika kanal utama tidak dapat digunakan.
Dibangun untuk WRECK-IT 7.0 · Cyber Warfare: Silent War on The Fifth Domain
| Persona | Kebutuhan di lapangan | Peran CARAKA |
|---|---|---|
| BPBD, Polri, PMI | Koordinasi saat infrastruktur terganggu | Chat langsung, identitas peran, alert, dan topologi node |
| Relawan | Menemukan tim dan menyampaikan kondisi | Discovery lokal, QR identity, chat, dan relay multi-hop |
| Warga | Meminta bantuan tanpa koneksi internet | SOS lokal, lokasi opsional, dan komunikasi dengan kontak sekitar |
| Komunitas rawan bencana | Menyiapkan kanal komunikasi cadangan | Mesh berbasis ponsel Android yang sudah dimiliki |
- Chat langsung terenkripsi dengan kunci publik penerima yang telah dikenal.
- Relay multi-hop berbasis TTL untuk memperluas jangkauan melalui node perantara.
- Empat jalur lokal: LAN, Wi-Fi Direct, Wi-Fi Aware, dan Nearby Connections.
- Outbox persisten untuk menahan pesan ketika penerima belum terjangkau.
- Retry terbatas dan ACK end-to-end untuk status pengiriman yang lebih jujur.
- Foreground service untuk mempertahankan mesh di latar belakang selama diizinkan Android.
- SOS broadcast untuk Medis, Kebakaran, Keamanan, dan Bencana.
- Hold-to-confirm dua detik untuk mengurangi aktivasi tidak sengaja.
- Prioritas EMERGENCY dan hop budget lebih tinggi daripada chat biasa.
- Lokasi opsional ketika izin dan data lokasi tersedia.
- Alert center dengan penyaringan berdasarkan kategori.
- QR identity untuk menyimpan identitas dan kunci publik saat bertemu langsung.
- Ed25519 signature pada chat dan SOS untuk memverifikasi pengirim yang telah dikenal.
- Role context untuk BPBD, Polri, PMI, dan Civilian.
- Community flagging untuk menandai pesan yang dicurigai.
- Dedup berbasis message ID untuk mengurangi pemrosesan dan relay berulang.
- Home, Messages, Chat, Network, SOS, Alerts, Settings, Help, dan QR Identity.
- Bahasa Indonesia dan English dengan 280 string UI per bahasa.
- Teks besar +25%, palet kontras tinggi, haptic feedback, dan onboarding tour.
- Status ONLINE, HYBRID, atau MESH_ONLY sesuai kondisi perangkat.
- Visualisasi node, koneksi, hop, dan statistik relay pada layar Network.
GitHub README tidak menjalankan JavaScript interaktif. Diagram berikut menggunakan Mermaid, yang dirender langsung oleh GitHub dan tetap terbaca sebagai source Markdown.
flowchart TB
USER["👤 Warga / Relawan / Responder"]
subgraph EXPERIENCE["CARAKA EXPERIENCE"]
HOME["Home & Status"]
CHAT["Encrypted Chat"]
SOS["Emergency SOS"]
MAP["Mesh Network Map"]
TRUST["QR Identity"]
end
subgraph CORE["APPLICATION CORE"]
VM["State & ViewModel"]
REPO["Message Repository"]
POLICY["Retry · TTL · Outbox Policy"]
FGS["Background Mesh Service"]
end
subgraph SECURITY["TRUST & STORAGE"]
CRYPTO["X25519 · Ed25519<br/>XSalsa20-Poly1305"]
DB["Room + SQLCipher"]
KEY["Android Keystore<br/>when available"]
end
subgraph MESH["LOCAL MESH FABRIC"]
ROUTER["Mesh Router<br/>multi-hop + dedup"]
LAN["LAN / UDP"]
DIRECT["Wi-Fi Direct"]
AWARE["Wi-Fi Aware"]
NEARBY["Nearby Connections"]
end
USER --> EXPERIENCE
HOME & CHAT & SOS & MAP & TRUST --> VM
VM --> REPO
VM --> FGS
REPO --> POLICY
REPO <--> CRYPTO
REPO <--> DB
KEY --> DB
FGS --> ROUTER
REPO <--> ROUTER
ROUTER --> LAN & DIRECT & AWARE & NEARBY
classDef user fill:#F59E0B,stroke:#FCD34D,color:#08111F,stroke-width:2px;
classDef ux fill:#13243A,stroke:#38BDF8,color:#F8FAFC;
classDef core fill:#142D2A,stroke:#34D399,color:#F8FAFC;
classDef security fill:#2A1D3D,stroke:#A78BFA,color:#F8FAFC;
classDef transport fill:#301D24,stroke:#FB7185,color:#F8FAFC;
class USER user;
class HOME,CHAT,SOS,MAP,TRUST ux;
class VM,REPO,POLICY,FGS core;
class CRYPTO,DB,KEY security;
class ROUTER,LAN,DIRECT,AWARE,NEARBY transport;
sequenceDiagram
autonumber
participant A as Node A · Pengirim
participant R as CARAKA Mesh
participant B as Node B · Relay
participant C as Node C · Penerima
A->>A: Encrypt + sign
A->>R: Queue and send
R->>B: Select available local transport
B->>B: Dedup + decrement TTL
B->>C: Forward toward recipient
C->>C: Verify signature + decrypt
C-->>A: End-to-end ACK
A->>A: Mark DELIVERED
| Lapisan | Implementasi | Manfaat |
|---|---|---|
| Isi chat | X25519 + XSalsa20-Poly1305 melalui NaCl crypto_box |
Pesan langsung hanya dapat dibuka dengan kunci penerima |
| Autentikasi pesan | Ed25519 detached signature | Pesan dari kunci yang dikenal dapat diverifikasi |
| Identitas kontak | QR berisi fingerprint dan public keys | Pengguna dapat membangun trust saat bertemu langsung |
| Penyimpanan lokal | Room + SQLCipher | Data aplikasi tidak disimpan sebagai SQLite biasa |
| Kunci database | Passphrase acak, dibungkus Android Keystore bila tersedia | Mengurangi paparan material pembuka database |
| Ketahanan relay | TTL, message-ID dedup, outbox quota, bounded retry | Mengurangi loop, duplikasi, dan retry tanpa batas |
Catatan SOS: payload SOS tidak dienkripsi end-to-end agar dapat dibaca oleh node mesh penerima. SOS tetap ditandatangani dengan Ed25519 ketika identitas pengirim tersedia.
CARAKA menggunakan pertahanan berlapis, bukan klaim keamanan absolut. Kunci identitas saat ini disimpan melalui Android DataStore, dan penyimpanan passphrase database memiliki fallback pada perangkat yang tidak dapat menggunakan Android Keystore.
🔧 Rincian algoritma, kebijakan DTN, model data, dan caveat keamanan ada di PRD teknis.
| Area | Teknologi |
|---|---|
| UI | Jetpack Compose, Material 3, Navigation Compose |
| State | ViewModel, Kotlin Coroutines, StateFlow |
| Data | Room 2.6.1, SQLCipher 4.5.4, DataStore |
| Crypto | Lazysodium 5.1.0, X25519, Ed25519, XSalsa20-Poly1305 |
| Transport | LAN UDP, length-prefixed TCP, Wi-Fi Direct, Wi-Fi Aware, Nearby Connections |
| Identity | ZXing QR generation/scanning, Kotlin Serialization |
| Dependency wiring | Manual dependency injection melalui CarakaApp |
Daftar versi lengkap dan rasionalnya ada di PRD §14 — Tech Stack & Versi.
| Situasi | Kanal utama | CARAKA |
|---|---|---|
| Gempa merusak BTS | Aplikasi internet kehilangan jalur | Perangkat sekitar membentuk komunikasi lokal |
| Banjir memisahkan tim | Informasi berhenti pada satu kelompok | Node perantara meneruskan pesan dengan TTL |
| Layanan pusat terkena serangan | Koordinasi bergantung pada sistem terdampak | Chat dan SOS berjalan tanpa backend terpusat |
| Evakuasi lintas organisasi | Identitas digital sulit dicocokkan | QR membantu menyimpan identitas dan kunci publik |
- Android Studio dan Android SDK.
- JDK yang menyediakan
javadanjavac. - Minimal dua ponsel Android fisik.
- Android 8.0 atau lebih baru (
minSdk 26).
git clone https://github.com/Fatihmaull/cakra-mesh.git
cd cakra-mesh/app
.\gradlew.bat assembleDebugNama produk adalah CARAKA.
cakra-meshtetap muncul pada perintah di atas karena merupakan slug repositori GitHub saat ini.
APK debug:
app/app/build/outputs/apk/debug/app-debug.apk
Build assembleDebug terakhir diverifikasi berhasil pada 13 Juni 2026 menggunakan JDK 21 dari Android Studio.
- Instal APK pada dua ponsel fisik.
- Buat identitas lokal pada masing-masing perangkat.
- Berikan izin nearby devices, lokasi, Bluetooth, dan notifikasi sesuai versi Android.
- Buka layar Network dan tunggu node muncul.
- Verifikasi kontak melalui QR, lalu kirim chat atau SOS.
README ini adalah landing page produk — fokus pada nilai, kemampuan, dan cara mulai. Detail rekayasa dipisah agar pembaca produk tidak harus melewati log migrasi atau matriks pengujian.
📐 Mencari detail teknis? Lihat
PRD.md— spesifikasi lengkap arsitektur, transport, routing/DTN, kriptografi, model data, lifecycle, permissions, dan tech stack. README menjawab "kenapa & untuk siapa"; PRD menjawab "bagaimana".
| Dokumen | Cakupan |
|---|---|
PRD.md |
Spesifikasi teknis utama — arsitektur, transport, DTN, crypto, data model, roadmap |
docs/architecture/ |
Baseline, gap analysis, dan review arsitektur internal (referensi keputusan D1–D16) |
docs/implementation/ |
Program implementasi dan rencana uji perangkat internal |
docs/TECHNICAL_WRITEUP.md |
Ringkasan teknis |
docs/TEST_CHECKLIST.md |
Checklist pengujian mesh |
docs/HCI_EVALUATION.md |
Evaluasi usability dan aksesibilitas |
Kontribusi dapat diajukan melalui issue atau pull request pada repositori CARAKA. Perubahan pada jaringan, kriptografi, database, atau lifecycle background sebaiknya disertai alasan desain dan langkah verifikasi pada perangkat fisik.
Repositori ini belum menyertakan file LICENSE. Hubungi pemilik repositori sebelum menyalin, mendistribusikan, atau menggunakan CARAKA di luar evaluasi proyek.

CARAKA
Resilient communication. Local trust. No central dependency.
"When The Grid Falls, We Rise."