← All projects
Mukto Mesh
JH26-VAGZStacia · Dhaka · Islamic University of Technology · 2 members · Crisis Tech
Mukto Mesh keeps communities connected and coordinated when the internet goes down - no servers, no signal required.
The problem
During the July 2024 student protests in Bangladesh, the government imposed a nationwide internet shutdown to quell dissent. Citizens were cut off from communication, news, and emergency services. Families couldn't locate missing members. No one knew which areas were safe, where medical aid was available, or whether friends had been arrested. Rumours spread while verified information was impossible to distribute.
Mukto Mesh solves this. It's an offline-first mesh communication platform that works when the internet is down. Users connect to a local server running on a laptop or Raspberry Pi — no cloud dependency, no central authority. Once connected, they can chat across four channels (general, emergency, coordination, medical), check in periodically so others know they're safe, report missing persons, share verified news, and pin danger zones or shelters on an offline map. Everything syncs across nodes when connectivity is restored.
The people affected are civilians during internet blackouts, political unrest, natural disasters, or military crackdowns — anyone cut off from infrastructure. It matters the moment the kill switch is flipped and the only way to stay connected is through a mesh that governments cannot silence, because there is no central server to seize. The network is the people.
The solution
Mukto Mesh is an offline-first crisis communication platform designed to function during complete internet blackouts. It is not a website that requires cloud servers - it is a portable local network that anyone can run from a laptop, Raspberry Pi, or any machine on a LAN.
Architecture: The system has two parts - a Hono.js server (TypeScript, SQLite, WebSocket) and a React 19 client (Vite, PWA, Tailwind). Both run on the same machine on the same port. Users connect by pointing their phones or laptops to the server's IP address over Wi-Fi. No internet, no DNS, no certificates required.
Communication: The server maintains persistent WebSocket connections with four chat channels (general, emergency, coordination, medical). Messages are persisted to SQLite and the last 50 per channel are loaded when a user joins. The server tracks all connected clients by display name and channel, broadcasting real-time updates as people come and go. Each instance supports an unlimited number of simultaneous connections.
Safety features: A check-in system lets users register their name, phone, and an interval (2–12 hours). The server monitors every registration as a dead man's switch - if a user misses their check-in window, the server flags them as unresponsive and can trigger an SMS alert via Twilio. A missing persons board allows photo uploads and status tracking (missing / found / unverified). Crisis pins mark shelters, danger zones, and medical points on an offline vector map of Bangladesh powered by Protomaps PMTiles - no tile server required.
Information: A news fetcher pulls RSS feeds from Prothom Alo, Daily Star, and BDNews24 every 30 minutes. A knowledge base ships as local markdown covering first aid, legal rights during arrest, emergency contacts, and a July 2024 incident checklist - all available offline.
Multi-node sync: When internet is restored, multiple Mukto Mesh instances can sync missing persons reports and map pins with each other over a configured remote URL, forming a resilient mesh where no single node is authoritative.
Deployment: The entire project is containerised via Docker. For remote access without a mesh, a Cloudflare Worker proxies traffic to a Suga-hosted backend. But the core design remains: zero cloud dependency, zero ongoing cost, one machine, infinite resilience.
Tech stack
Languages: TypeScript, CSS, HTML
Frameworks & Libraries: React 19, Vite 5, Hono.js, Tailwind CSS 3, Zustand, TanStack React Query, React Router v6, MapLibre GL JS
Runtime & Database: Node.js, better-sqlite3 (SQLite), Docker
Communication: WebSocket (via ws library), JSON Web Token (via jsonwebtoken)
APIs & Services: Twilio (SMS alerts), Cloudflare Workers (deployment proxy), RSS Parser (news aggregation), Protomaps (offline vector map tiles)
UI & Assets: Lucide React (icons), uisfx (sound effects), Leaflet (map fallback)
Developer Tooling: Vite PWA plugin, Workbox (service worker caching), ESLint, Prettier
AI tools used (section 5 disclosure)
Big Pickle (via Opencode) for code generation, Claude Web (Anthropic) for ideation and architectural guidance.