What is bitchat?

bitchat is a decentralized P2P instant messaging app with its coolest feature being: zero internet dependency. Through Bluetooth Low Energy (BLE) Mesh networking, nearby devices can automatically form a network and relay messages across multiple hops — enabling truly offline communication.

The project has already surpassed 28,000 stars on GitHub, making it one of the hottest open-source communication projects recently. It's released under the Unlicense (public domain) license, completely free to use.

Core Features at a Glance

Feature Description
🔌 Dual Transport Architecture Bluetooth Mesh (local offline) + Nostr protocol (internet-based global communication)
🔒 End-to-End Encryption Noise Protocol for Bluetooth, NIP-17 for Nostr
📡 Auto Networking Automatic device discovery, multi-hop message relay (up to 7 hops)
🕵️ Fully Anonymous No account, no phone number, no persistent identifiers
🌍 Geographic Channels Location-based chat rooms using geohash
🚨 Emergency Wipe Triple-tap the screen to instantly erase all data
📱 Cross-Platform Native iOS + macOS support

How does it differ from traditional chat apps?

WeChat/Telegram/Signal:
  User → Internet → Central Server → Internet → User

bitchat (Bluetooth mode):
  Device A → Device B → Device C → Device D (multi-hop Mesh, no internet needed)

bitchat (Nostr mode):
  User → Nostr Relay Network (decentralized) → User

The key difference: when cell towers go down, the network crashes, or you're deep in the mountains — bitchat still works.

Deep Dive into the Technical Architecture

The brilliance of bitchat lies in its dual-transport hybrid architecture — Bluetooth handles local communication, Nostr handles global connectivity, and the two switch seamlessly.

Bluetooth Mesh Network Layer

Bluetooth Mesh is bitchat's core innovation. It uses Bluetooth Low Energy (BLE) for direct device-to-device communication:

  • Automatic Discovery: Devices automatically identify nearby nodes when they come within range
  • Multi-hop Relay: Messages can hop between devices, up to 7 hops, significantly extending communication range
  • Noise Protocol Encryption: End-to-end encryption with forward secrecy — even if keys are compromised, past messages remain unreadable
  • Binary Protocol: Compact packet format optimized for BLE bandwidth constraints
  • Adaptive Power Management: Smart duty-cycle adjustment to extend battery life

Nostr Protocol Layer

When Bluetooth is unavailable, bitchat automatically switches to the Nostr protocol for internet-based communication:

  • 290+ Global Relay Nodes: A distributed network ensuring reliability
  • Geographic Channels: Local community chat based on geohash coordinates
  • NIP-17 Encryption: Gift-wrapped private messages protecting internet privacy
  • Ephemeral Keys: Each geohash area uses a fresh cryptographic identity

Smart Message Routing

bitchat's message routing strategy is clever:

Priority 1: Bluetooth Direct (fastest, most private)
    ↓ Unavailable
Priority 2: Nostr Relay (global coverage)
    ↓ Unavailable
Priority 3: Message Queue (auto-deliver when connection is restored)

Installation & Getting Started

iOS / macOS Installation

bitchat is a native Apple ecosystem app, available directly from the App Store:

Search "Bitchat Mesh" on the App Store to install

Building from Source (For Developers)

If you want to compile it yourself or contribute:

# Clone the repository
git clone https://github.com/permissionlesstech/bitchat.git
cd bitchat

# One-command run for macOS users
brew install just
just run

# Or open with Xcode
open bitchat.xcodeproj

There are a few configuration steps to keep in mind when building from source:

# 1. Copy the local config template
cp Configs/Local.xcconfig.example Configs/Local.xcconfig

# 2. Add your Developer Team ID to Local.xcconfig
# 3. Manually update Entitlements:
#    Replace group.chat.bitchat with group.<YourTeamID>

First-Time Use

When you open bitchat, you'll see an IRC-style terminal interface — which is its signature look:

╔══════════════════════════════════╗
║         bitchat v2.0             ║
║   bluetooth mesh chat            ║
╠══════════════════════════════════╣
║ [mesh] Welcome to the mesh!      ║
║ [mesh] 3 nearby devices found    ║
║                                  ║
║ <alice> Hey, anyone here?        ║
║ <bob>   Yep! Signal's great      ║
║ <you>   Test message, works offline too ║
║                                  ║
║ > /help to see all commands      ║
╚══════════════════════════════════╝

Quick Reference: IRC-Style Commands

bitchat uses classic IRC-style commands — old-school internet folks will feel right at home:

# Basic commands
/msg <username> <message>    # Send a private message
/who                         # See who's online
/slap <username>             # Classic IRC interaction (slap someone)
/help                        # See all available commands

# Channels & Location
/join <channel>              # Join a channel
/geo                         # View your current geographic channel
/location <precision>        # Set geographic channel precision
                             #   block      = block level
                             #   neighborhood = neighborhood level
                             #   city       = city level
                             #   province   = province/state level
                             #   region     = country/large region

# Security
/wipe                        # Emergency wipe all data (also triggered by triple-tap)

Advanced Usage

Configuring Geographic Channels

Geographic channels are one of bitchat's killer features — you can automatically chat with other bitchat users in the same area without adding each other as contacts:

# Set to city level (everyone within a few kilometers can see you)
/location city

# Set to block level (only people very close by)
/location block

# View your current geographic channel
/geo

Geographic channels are based on geohash encoding, with precision from coarse to fine:

Precision Geohash Length Coverage Use Case
region 2 chars Country-level Nationwide discussions
province 4 chars Province/state-level In-state communication
city 5 chars City-level City community
neighborhood 6 chars Neighborhood-level Neighborhood chat
block 7 chars Block-level Face-to-face events

Private Chat Encryption

bitchat's private chat encryption automatically selects the best protocol based on the transport method:

Bluetooth Mode (Noise Protocol):

1. Both parties establish a BLE connection
2. Perform Noise Protocol handshake
3. Generate session keys (forward secrecy)
4. All messages transmitted end-to-end encrypted

Nostr Mode (NIP-17 Gift Wrap):

1. Obtain the other party's Nostr public key
2. Encrypt the message with their public key
3. Wrap with an ephemeral key (gift wrap)
4. Deliver through Nostr relays — relays cannot decrypt the content

Emergency Security Mechanisms

In sensitive scenarios (such as protests or disaster sites), bitchat provides a quick-wipe feature:

  • Triple-Tap Wipe: Tap the screen three times consecutively to instantly erase all chat data, keys, and identity information
  • No Persistent Identity: Each connection uses a temporary identity, leaving no trace
  • Local-Only Storage: All data stays on the device — nothing is uploaded to any server

Real-World Use Cases

Scenario 1: Outdoor Activities / Hiking

When there's no cell signal in the mountains, bitchat keeps your team connected:

# Everyone on the team opens bitchat
# Devices automatically discover each other, forming a Mesh network
# Messages relay across hops so the team stays connected even when spread out

# Set to city-level channel to reach nearby hikers
/location city

Scenario 2: Large Events / Music Festivals

Cell towers often get overloaded at concerts and festivals — bitchat is completely unaffected:

# Set to block-level channel
/location block

# Chat with people nearby and share locations
/msg friend I'm on the left side of the stage, found me?

Scenario 3: Disaster Emergency Communication

When earthquakes, floods, or other disasters knock out cell towers, bitchat can be a lifesaver:

# Works completely offline — no infrastructure needed
# Multi-hop Mesh extends message reach
# End-to-end encryption keeps distress information private

Scenario 4: Privacy-Sensitive Scenarios

When you need communication that can't be monitored:

# Fully anonymous — no phone number registration needed
# Bluetooth mode bypasses all servers
# Triple-tap wipe for quick evidence removal

Comparison with Other Decentralized Communication Tools

Feature bitchat Briar Bridgefy Meshtastic
Bluetooth Mesh ✅ (LoRa)
Internet Fallback ✅ Nostr ✅ Tor
End-to-End Encryption
Anonymous, No Registration
iOS Support
Geographic Channels
Open Source License Unlicense GPL Partially Open GPL
GitHub Stars 28K+ 5K+ 3K+ 4K+

bitchat's unique advantage is its Bluetooth + Nostr dual-mode architecture and geographic channel feature — something no other tool in this space offers.

Summary

bitchat is an elegantly designed decentralized communication tool that proves one thing: even when infrastructure fails, we can still stay connected.

Who is it for? - 🏕️ Outdoor enthusiasts (hiking, camping, exploring) - 🎪 Event-goers (music festivals, conventions, sports events) - 🔐 Privacy geeks (seeking fully anonymous communication) - 🆘 Emergency communication needs (disaster relief, emergency preparedness) - 👨‍💻 Developers (interested in Mesh networking and decentralized protocols)

Project Page: github.com/permissionlesstech/bitchat

Download: Search "Bitchat Mesh" on the App Store for iOS/macOS

In an era where all communication depends on centralized servers, bitchat reminds us: true communication freedom means never needing anyone's permission.