protestchat is an off-grid, Bluetooth-based messaging app designed for internet shutdowns and jammed protests, enabling phones to communicate directly without servers, towers, or accounts.

Stars

220

7-day growth

+56

Forks

35

Open issues

34

License

MIT

Last updated

2026-07-26

AI repository intelligence
FR-AI / ANALYSIS

Why it is worth attention

It addresses a real-world gap exposed by police jamming protests, uses epidemic routing to prevent traffic analysis, and provides four distinct messaging modes with no privileged operations, all under an MIT license encouraging wide adoption.

Who it is for

  • Protesters and activists in regions with internet shutdowns
  • Security researchers evaluating off-grid communication
  • Developers building censorship-resistant messaging tools
  • Non-governmental organizations coordinating in restricted areas

Use cases

  • Sending crowd warnings like 'exit blocked at gate 4' via Everyone Nearby
  • Coordinating with affinity groups using channel passphrases
  • Private crew communication via encrypted groups (fan-out, no shared keys)
  • Disconnected store-and-forward messaging when walking out of jammed zones

Strengths

  • No reliance on cellular infrastructure, internet, or any server
  • Epidemic routing hides communication patterns – no routing tables to leak
  • Security-critical code is shared TypeScript (85%) with one auditable implementation
  • Thorough test suite (72 tests) for crypto, wire format, and mesh logic

Considerations

  • iOS build is blocked due to BLE GATT issues, and background BLE is unsolved on both platforms
  • Missing many features: images, double ratchet, passphrase strength enforcement, sybil/flood resistance
  • Mesh can only be tested with two physical phones; simulator emulation is impossible

README quick start

protestchat

connected to a nearby phone — no internet, no tower, no server required.

Off-grid messaging for internet shutdowns and jammed protests. Phones talk directly to each other over Bluetooth — no cell tower, no ISP, no server, no account.

Using the app? Start with the plain-language guide in website/ (Astro Starlight). Hosting the public URL is tracked in #61.

Built after Delhi Police deployed portable cellular jammers at Jantar Mantar on 20 July 2026 alongside an unpublished mobile internet restriction. Those jammers target 3G/4G/5G only. 2.4 GHz is untouched, so two phones standing next to each other were still perfectly capable of talking — there was just no user-friendly & acessible app to do it.

How it works

┌──────────────── shared TypeScript (~85%) ────────────────┐
│  UI · SQLite · sealing · dedup · relay · expiry          │
├──────────────────────────┬───────────────────────────────┤
│  Swift (iOS)             │  Kotlin (Android)             │
│  CoreBluetooth           │  BLE GATT                     │
└──────────────────────────┴───────────────────────────────┘
              BLE / Wi-Fi Direct — no tower, no ISP

The native layer is a dumb byte pipe: advertise, discover, connect, send bytes, receive bytes. It contains no chat logic, no storage, and no crypto, so there is exactly one implementation of the security-critical code to audit rather than three that drift apart.

Routing is epidemic, not addressed. There are no routing tables, because a routing table is a map of who talks to whom. Every phone carries every unexpired envelope it has seen and offers it to every peer it meets; the recipient is simply whoever can decrypt it. This costs battery and bandwidth and buys the property that a captured phone reveals nothing about who was talking to whom.

It also means a phone is a courier. Someone who walks out of a jammed zone carries queued messages with them and delivers them on the other side.

Four ways to send

Who reads itUse it for
Everyone nearbyAnyone in range, including police running this appCrowd warnings: "exit blocked at gate 4"
ChannelAnyone with the passphraseAn affinity group that needs to grow by word of mouth
GroupOnly the people you addedYour a

Description

Encrypted messaging with no internet, no cell tower, and no server. Phones relay for each other over Bluetooth mesh, so it keeps working during internet shutdowns and inside cellular jammers

Related repositories

Similar projects matched by category, topics, and programming language.

TanStack
Featured
TanStack GitHub avatar

router

TanStack Router is a type-safe, data-driven React router with built-in caching, prefetching, and nested layouts, while TanStack Start extends it into a full-stack SSR framework.

Web DevelopmentFrontend Frameworks
14,861
vercel-labs
Featured
vercel-labs GitHub avatar

scriptc

scriptc compiles ordinary TypeScript into small, fast native executables without needing Node.js, V8, or any JavaScript runtime in the binary.

Developer ToolsCode Quality & Build
1,985
Jakubantalik
Featured
Jakubantalik GitHub avatar

thinking-orbs

A React component library that renders six hand-tuned animated thought orb loading indicators on a plain 2D canvas, with two purpose-tuned sizes and automatic theme detection for AI and agent UIs.

AI & Machine LearningAI Agents
1,191