Zemzeme User Guide

Everything you need to install, configure, and use Zemzeme effectively.

Note: Zemzeme is in active development. This documentation reflects the current Android release. Desktop and iOS clients are coming soon. Report issues on GitHub.

Getting Started

Zemzeme is a decentralized messenger that requires no account, no phone number, and no central server. It works across four transport layers - Bluetooth mesh offline, peer-to-peer over the internet, peer-to-peer over the internet, and the online relay network - automatically selecting the best available path.

This guide covers installation, initial setup, and day-to-day use. For a technical deep-dive into the cryptography and architecture, see the Security Model section.

Installation

Option A - GitHub APK (Recommended)

Download the latest APK directly from the GitHub releases page. This is the fastest way to get the most recent version.

1

Visit the Releases page

Go to github.com/whisperbit-labs/zemzeme-android/releases and download the latest .apk file.

2

Allow unknown sources

On Android, go to Settings → Security → Install unknown apps and allow your browser or file manager to install APKs.

3

Install and launch

Tap the downloaded APK to install. No Google account required. Launch Zemzeme - no sign-up screen will appear.

Option B - F-Droid

F-Droid is a free, open-source app repository for Android. Zemzeme will be listed once the F-Droid submission is reviewed.

Option C - Google Play Store

Search for "Zemzeme" in the Play Store. Note that Google Play builds may include slightly older versions due to review cycles.

System Requirements

  • Android 8.0 (API level 26) or higher
  • Bluetooth 4.0 for nearby messaging
  • Internet connection optional (internet connections transport only)
  • ~55 MB storage

First Use

When you launch Zemzeme for the first time, it generates a Curve25519 keypair locally on your device. This keypair is your identity - there is no registration step.

You will be prompted to grant Bluetooth and (optionally) location permissions. Please confirm all permissions to ensure smooth operation of the app. Bluetooth permission is required for the Bluetooth transport. Location permission is required by Android to scan for Bluetooth devices (this is an Android system requirement, not a Zemzeme requirement - no location data is ever transmitted).

Make sure your Bluetooth is always on - the app works instantly as soon as you connect.

Your Username

Next you need to enter your username. This is the name you can share freely with others so they can find and message you.

Your Identity

Your identity is displayed as a Nostr public key (npub1...) and a QR code. Share your QR code with contacts to let them add you. Your private key never leaves your device.

Sending Messages

In the "Nearby" section (users in my area), there are two ways to send messages:

Nearby Messaging

Bluetooth messaging (works even with no internet) - Enter the Bluetooth section and send a message to all users in range. Or, in the upper right-hand corner, see the list of users in Bluetooth range and select a user to open a private chat with them. That user will then appear in your contacts list.

Location-Based Messaging

Enter your location (for example "Tehran") and send a message to all users in your area. Or, in the upper right-hand corner, see the list of users in your location and select a user to open a private chat with them. That user will then appear in your contacts list.

In the lower right-hand corner, you can tap the "+" icon to either choose a different location, join an existing group, or create a new group.

Choosing a City

Select "Choose City" and move the map in any direction and/or zoom in or out. The green rectangle shows the selected area. Press "Select" to confirm your choice.

All messages are end-to-end encrypted regardless of the transport layer used. A relay operator cannot read the content of your messages.

Groups

Groups let you communicate with multiple people at once. Use the "+" menu in the lower right corner to create or join groups.

Create a Group

Select "Create Group" and enter the desired group name. Enter the group - the Group ID appears under the group name. Share this Group ID with friends you want to add to the group. (Private groups coming soon!)

Join a Group

Select "Join Group" and enter the Group ID you received from a friend.

To leave a group: long-press on the group name and press "Delete Chat".

Safety & Privacy

Disguise the App

You can change Zemzeme's icon and name on your phone to avoid detection. Go to Settings → Refresh App Icon & Name → Apply.

Destroy Your Account

You can easily destroy your account at any time by tapping the trash bin icon at the top of the screen. This permanently deletes your account and all data.

Transport Layers

Zemzeme uses four transport layers in priority order:

1. Bluetooth (Offline)

Bluetooth Low Energy creates a mesh network between nearby devices. Range per hop is approximately 30 meters. Messages are relayed automatically through the mesh. Works with no internet, no cell service, no infrastructure of any kind.

2. WiFi Direct (Offline) Coming Soon

WiFi Direct creates a high-speed device-to-device WiFi connection without a router or internet. Range up to 200 meters with higher bandwidth than Bluetooth - ideal for larger areas or groups. Works completely offline.

3. Direct Connection

When internet is available and a direct connection to the recipient is possible, Zemzeme uses peer-to-peer technology for device discovery. This is a direct device-to-device connection - no relay server is involved.

4. Online Relay

As a fallback, messages are published to the online relay network. You can configure your preferred relays in Settings → Online Relays. The default relay list includes several well-known public relays.

Security Model

Key Exchange - Noise Protocol XX Pattern

Zemzeme uses the Noise Protocol Framework XX handshake pattern. This provides:

  • Mutual authentication - both parties verify each other's identity
  • Forward secrecy - ephemeral keys ensure past sessions can't be decrypted
  • Identity hiding - identities are protected from passive observers

Cryptographic Primitives

  • Key exchange: Curve25519 (X25519 ECDH)
  • Symmetric encryption: ChaCha20-Poly1305 (256-bit key)
  • Hash function: BLAKE2b
  • Local storage: AES-256-GCM via Android Keystore

Threat Model

Zemzeme protects against:

  • Network eavesdroppers reading message content
  • Relay operators accessing plaintext messages
  • Retroactive decryption (perfect forward secrecy)
  • Physical device seizure (encrypted local storage + emergency wipe)
  • IP-based identity linking (Tor integration)
  • Man-in-the-middle attacks when QR verification is used

Zemzeme does not protect against:

  • Compromised device (malware, physical access without wipe)
  • Traffic analysis of message timing/volume (metadata)
  • Social engineering of your contacts

Emergency Data Wipe

The emergency wipe feature permanently deletes all Zemzeme data from your device. To trigger it: triple-tap the panic button in Settings → Security.

The following data is securely deleted:

  • All messages and conversation history
  • Your Curve25519 private key
  • All contacts and public keys
  • Application settings and preferences
  • Cached relay data
Warning: This action is irreversible. There is no backup or recovery option by design. After a wipe, Zemzeme generates a new keypair on next launch - your old identity and contacts are gone.

Tor Integration

Tor routing hides your IP address from relay operators, DHT peers, and network observers. To enable Tor: Settings → Privacy → Route via Tor.

Tor support requires Orbot (the official Tor app for Android) to be installed and active, or uses Zemzeme's built-in Tor client if enabled in settings. Note that Tor routing adds latency - Bluetooth is unaffected.

FAQ

Does Zemzeme collect any data?

No. Zemzeme has no analytics, no telemetry, and no servers. There is no data to collect. The app operates entirely on your device and communicates only with your chosen peers and relays.

Can I use Zemzeme without Bluetooth?

Yes. Bluetooth is one of four transport layers. If Bluetooth is disabled, Zemzeme falls back to Direct Connection or online relay automatically.

What happens if a online relay goes down?

Zemzeme automatically tries the next relay in your list. You can configure multiple relays in Settings → Online Relays. If all relays fail, Zemzeme falls back to internet or Bluetooth.

Is Zemzeme compatible with other Nostr clients?

Zemzeme uses the relay protocol for transport, but applies additional encryption on top of standard Nostr events. Messages are not readable by generic Nostr clients - Zemzeme peers only.

Can I verify that the app hasn't been tampered with?

Yes. All GitHub releases include SHA-256 checksums. F-Droid builds are independently compiled from source. The repository is fully open source - anyone can build from source and compare.

What's the difference between Zemzeme and Bitchat?

Zemzeme is a fork of Bitchat Android v1.7.0. It adds the libp2p internet transport layer, extended language support, Tor integration, and UI improvements. Full attribution to the Bitchat project is maintained.

Contributing

Zemzeme is open source and welcomes contributions. The repository is on GitHub.

How to contribute

1

Fork the repository

Fork whisperbit-labs/zemzeme-android and clone it locally.

2

Build the project

Open in Android Studio (Hedgehog or later). Sync Gradle and build. Requires JDK 17.

3

Make your changes

Follow the existing Kotlin code style. Write tests for new functionality.

4

Submit a pull request

Open a PR against the main branch. Describe what you changed and why.

Areas where help is wanted

  • iOS port (Swift / SwiftUI)
  • Desktop client (Kotlin Multiplatform or Electron)
  • Additional language translations
  • Security audit of the Noise Protocol implementation
  • libp2p transport improvements and testing
  • Accessibility improvements

Changelog

v2.0.0 - March 2026

  • Major update with new features and improvements
  • Bug fixes and stability enhancements

v1.1.9 - March 2026

  • Major update with new features and improvements
  • Bug fixes and stability enhancements

v1.0.2 - February 2026

  • Initial public release
  • Bluetooth transport (from Bitchat v1.7.0)
  • direct internet transport via peer-to-peer (new)
  • online relay transport with E2E encryption
  • Noise Protocol XX key exchange
  • Emergency triple-tap wipe
  • Tor routing via Orbot
  • QR code identity verification
  • AES-256-GCM local storage
  • 35+ language localizations
  • Jetpack Compose UI, Material 3 dark theme

راهنمای فارسی (Farsi Guide)

راهنمای کامل فارسی Zemzeme — برای مشاهده کلیک کنید

زمزمه

پیام‌ رسان رمزنگاری‌ شده که حتی بدون اینترنت کار می‌کند

زمزمه امن است

زمزمه کاملاً ناشناس است
بدون صفحه ثبت‌ نام
بدون ایمیل
بدون شماره تلفن

چگونه به زمزمه متصل شویم؟

اولین راه‌اندازی

وقتی اپلیکیشن را باز می‌کنید
لطفاً تمام مجوزها رو تأیید کن تا اپلیکیشن بدون مشکل کار کنه

اپلیکیشن بلافاصله پس از اتصال کار می‌کند

مطمئن شوید بلوتوث همیشه روشن باشد

حالا باید نام کاربری (username) خودت رو وارد کنی.
این نام رو می‌تونی آزادانه با دیگران به اشتراک بگذاری.

چگونه پیام بفرستیم؟

در بخش «نزدیک من» (کاربران اطراف من)
دو راه برای ارسال پیام وجود دارد:

۱. بلوتوث (حتی وقتی اینترنت در دسترس نیست)

بلوتوث را روشن کنید و پیام را به همه کاربرانی که در محدوده هستند بفرستید.
یا در گوشه بالا سمت راست، لیست کاربرانی که با بلوتوث در دسترس هستند را ببینید و روی یکی کلیک کنید تا چت خصوصی با او باز شود (آن کاربر به لیست مخاطبان شما اضافه می‌شود).

۲. مکان (از طریق اینترنت محلی)

در بخش «نزدیک من» (کاربران اطراف من)
مکان خود را وارد کنید (مثلاً «تهران»)
پیام بنویسید و به همه کاربرانی که در همان منطقه هستند بفرستید
یا
در گوشه بالا سمت راست، لیست کاربرانی که در همان مکان هستند را ببینید
روی یکی کلیک کنید تا چت خصوصی باز شود
آن کاربر به لیست مخاطبان شما اضافه می‌شود

علاوه بر این:
پایین سمت راست صفحه
روی علامت «+» کلیک کنید
بعد می‌تونی یکی از این کارها رو بکنی:
یا جای دیگه انتخاب کن یابه یه گروه که هست بپیوند یا یه گروه جدید بساز

برای انتخاب شهر:

روی «انتخاب شهر» کلیک کنید
نقشه رو به هر طرف بکش (حرکت بده)
یا زوم کن (بزرگ‌نمایی یا کوچک‌نمایی)
مستطیل سبز نشون می‌ده کدوم منطقه انتخاب شده
وقتی آماده بودی، روی «انتخاب» کلیک کنید تا تأیید بشه

گروه‌ها

برای ساخت گروه:

روی «ساخت گروه» کلیک کنید و اسم گروهی که می‌خوای رو وارد کن.

وارد گروه شوید (شناسه گروه یا Group ID زیر نام گروه نمایش داده می‌شود).
شناسه گروه را با دوستانی که می‌خواهید به گروه اضافه کنید و به اشتراک بگذارید.
(گروه‌های خصوصی به ‌زودی اضافه می‌شوند!)

برای پیوستن به گروه موجود:

روی «پیوستن به گروه» کلیک کنید و شناسه گروه (Group ID) که از دوستت گرفتی رو وارد کن.

برای ترک گروه:
روی اسم گروه طولانی فشار بده و بعد «حذف چت» رو کلیک کنید.

برای ایمنی و ناشناس بودن شما

تغییر آیکون و نام اپلیکیشن

می‌توانید آیکون و نام زمزمه را روی گوشی خود تغییر دهید
تنظیمات → تازه‌ سازی آیکون و نام اپلیکیشن → تأیید کن

حذف حساب کاربری

می‌تونی خیلی راحت حسابت رو حذف کنی: همیشه بالای صفحه، روی آیکون «سطل آشغال» کلیک کنید