Chime logo Chime
TECHNICAL
PUBLIC BETA · 3.7.8

How Chime actually works.

This page is for the reader who opens DevTools and wants the crypto named. It is dense, precise, and honest about the limits. Everything here describes the current public beta as shipped, not the roadmap.

技術頁目前僅提供英文版,中文版準備中。

01

How it actually works

Chime is a peer-to-peer messenger with no central server holding your data. When you send a message, delivery is attempted along a priority of transports, most direct first, and the first one already connected wins:

  1. Local network (WiFi/LAN): devices announce themselves over mDNS (_chime._tcp) and open a direct TCP connection that never leaves the subnet.
  2. Direct over the internet (WebRTC): a NAT-traversed data channel straight to the recipient's device, using STUN only. There is deliberately no TURN server; pairs that can't hole-punch fall through to the next path.
  3. DHT stream (Hyperswarm): a hole-punched, Noise-encrypted stream established through a public distributed hash table. No Chime server involved at all.
  4. Everything at once: if no live direct path exists, Chime fires the remaining transports in parallel: the relay, the Bluetooth mesh (BLE), and Tor if you've turned Tor Mode on. Whichever lands first wins; the receiving device drops duplicates.

Peers find each other through DHT rendezvous topics derived from cryptographic material: a private per-pair topic only the two contacts can compute, a per-recipient inbox topic for offline delivery, and a Chime-ID topic with signed introductions so adding a contact by ID works with no server at all. On a local network, discovery is plain mDNS. The relay offers a lookup too; it is one path among several, not the spine.

When a recipient is offline, delivery is store-and-forward over the DHT: your guardians act as custodians, holding a sealed blob at the recipient's inbox topic (up to 32 KB per blob, 200 blobs, 7-day expiry) until they reappear. The Bluetooth mesh does live multi-hop forwarding between nearby devices when there is no internet; WiFi Direct and hotspot transports are there as opt-in extras for fully infrastructure-free links.

HONESTY NOTE

We never claim "no servers at all". A small relay service runs at wss://chime.tw. It only ever handles sealed envelopes it cannot open, queues at most a thousand of them in memory for offline peers, and writes nothing to disk. It is self-hostable (a single Node script) and you can point the app at your own in You > Network. Its role shrinks as the DHT and direct paths take over. Nothing readable ever sits on a computer we run.

02

The cryptography, named

End-to-end encryption is built on the NaCl family. Your identity is an Ed25519 keypair generated on first launch and kept in the device's hardware-backed secure store, encrypted at rest under a PIN-derived key. It never leaves the phone.

X25519
Key exchange (ECDH)
XSalsa20-Poly1305
Authenticated encryption
Ed25519
Signatures

Post-quantum layer

SHIPPED · ON BY DEFAULT

A hybrid X-Wing construction (X25519 + ML-KEM-768) runs on top of the classical layer. Contacts upgrade automatically: the app performs a PQ handshake the next time both sides are reachable, and each contact's security level moves from classicalupgradinghybrid, visible in the app. Sealed offline-delivery blobs get the same X-Wing outer wrap.

"Harvest now, decrypt later": an adversary can record encrypted traffic today and try to break it with a future quantum computer. The hybrid layer means a recording made now stays unreadable even then. And because it wraps the classical construction rather than replacing it, security is never weaker than plain X25519.

One key to rule them: the X-Wing keypair and the Tor onion address are deterministically derived from the identity secret, so a guardian recovery or device transfer restores all of them at once.

03

The security model

On-device controls for the paranoid, and rightly so:

PIN & Vault
A 6-digit PIN gates the app; a separate Vault Word and Vault Code gate deeper access, with the identity encrypted under both.
Kill Code
A separate duress code. Entered at the unlock screen, it wipes all Chime data on the spot; the rest of the phone is untouched.
Travel Mode
One tap before crossing a border: biometric unlock off, PIN always required, guardian backup nudged.
Scramble & screenshot blocking
Obscure content under observation and in the app switcher; screen capture is blocked at the OS level.
Secure Keyboard
An in-app keyboard for sensitive entry, so third-party keyboard apps never see what you type.
Quiet by default
Photos are stripped of EXIF metadata on send; tracking parameters are stripped from shared links.
Per-contact controls
Safety-number verification, disappearing messages (5 min / 1 hr / 24 hr) that self-destruct on both sides, and per-chat overrides for read receipts, typing, and online status. Transports are user-switchable too: DHT, Tor Mode, WiFi Direct, and Bluetooth behaviour each have their own toggle.
04

That quiet notification, explained

While Chime is connected in the background, Android shows one small notification in the shade, filed under Muted: "Messages arrive instantly; nearby contacts can reach you." It never buzzes, never makes a sound, carries no badge, and never contains a message, a name, or anything private; it is the same fixed line for everyone, and tapping it just opens Chime. It is not a bug and it is not surveillance. It is the price of doing push notifications without Google, and we want you to know exactly why it is there.

Almost every other messenger delivers background messages through Google's push service (FCM): the message wakes your phone by travelling through Google's servers. The content can be encrypted, but the delivery itself tells Google which device received a message and when, and patterns of delivery are patterns of communication. Chime refuses that trade.

The only other way Android lets an app stay alive to receive messages is a foreground service, and Android's contract for a foreground service is blunt: the app must show a persistent notification so you always know it is running. That visibility is arguably a privacy feature; nothing runs behind your back. The service itself is light. It does not wake the screen or poll the network; it simply stops Android from killing the connection Chime already holds.

IF YOU'D RATHER NOT SEE IT

Turn off Stay connected in background in You > Network. The notification disappears, and waiting messages simply arrive the next time you open Chime. It is on by default because instant delivery is what most people expect from a messenger.

One honest limit: in Android's deepest battery-saving state (Doze), even a foreground service gets paused, so delivery can wait until you next wake the phone. That is the cost of refusing Google's push pipeline, and we accept it.

05

Recovery, in detail

Recovery uses Shamir secret sharing. Your identity and contacts are encrypted under your Vault Word and Vault Code, then the backup is split into opaque shares, one per guardian you choose. The threshold scales with your guardian count: with one or two guardians, all shares are needed; with three or more, a strict majority reconstructs it (three of five, four of six). No guardian alone can do anything.

GUARDIANS CAN
  • Hold one encrypted share each
  • Combine, at the threshold, to help you recover on a new device
  • Approve a PIN reset if you forget yours
GUARDIANS CANNOT
  • Read their share or your messages
  • Recover anything alone, below the threshold
  • Act without your recovery being initiated

There is deliberately no seed phrase to photograph and no cloud backup for anyone to demand. If you're just moving to a new phone, an in-person device transfer over Bluetooth carries everything across directly.

06

What Chime does not protect against

No tool protects everything. Being straight about the limits is how we earn the rest of your trust.

A compromised phone
If malware or an attacker controls your device, they can read what you can read. Encryption ends where your unlocked screen begins.
Someone photographing your screen
Shoulder-surfing and cameras are outside any messenger's reach. Scramble raises the effort; it cannot make it impossible.
Traffic visibility on hostile networks
Contents stay encrypted, but a network observer may still learn that Chime traffic exists, and the relay sees the IP addresses that connect to it. Tor Mode routes around both, at the cost of speed. We do not currently pad messages or send cover traffic, so we do not claim resistance to traffic analysis.
07

Verify your download

Every release APK is signed with the same key and its checksum is published here. Confirm the file you downloaded matches before installing.

# SHA-256 checksum for the current release (3.7.8-beta)
sha256sum chime-3.7.8-beta.apk
d2e8a9f7be2782f9bbd645f7ea7b3f53a70a7844c726d4feeb73daf88539df49

# signing certificate SHA-256: identical for every release
apksigner verify --print-certs chime-3.7.8-beta.apk
429df6a4f0e80faee44094c6ec80ccb72def3d0b09d14b0d6b2cf63c82b895a4
NO COMPUTER? VERIFY ON THE PHONE

AppVerifier is a small open-source Android app that does the certificate check for you. Install it from F-Droid or Obtainium, share the downloaded Chime APK to it (or open Chime's entry once installed), and check it shows exactly this:

com.chime.messenger
42:9D:F6:A4:F0:E8:0F:AE:E4:40:94:C6:EC:80:CC:B7:2D:EF:3D:0B:09:D1:4B:0D:6B:2C:F6:3C:82:B8:95:A4

Same value as the apksigner output above; AppVerifier just writes it with colons. If you install Chime through Obtainium, the two work together: Obtainium can hand the APK straight to AppVerifier before anything is installed.

The checksum above is for the current beta and changes with each release; this page is updated alongside the download. If a value does not match, do not install, and tell us at support@chime.tw.

08

Source & design docs

Chime is licensed under the GPL-3.0: React Native with a small amount of native Kotlin for the transports. The full source is public.

Browse the source on Codebergcodeberg.org/Chime/chime-app →

Codeberg was a deliberate choice, not a default. It is run by a non-profit association, funded by its community, and built entirely on open-source software, with no ads, no trackers, and no corporate owner mining what happens there. A messenger whose whole point is nobody in the middle should not keep its source with a data-hungry giant; it is the same reasoning that keeps Google's push service out of the app.

Two honest notes. Release downloads on Codeberg link back to this site, because the APK is larger than Codeberg's release limit, and the canonical, checksummed download lives here anyway. And the design docs in the repository's docs/ folder are still being tidied for publication; they are a work in progress and will appear here soon.

09

The site itself

This site makes no third-party requests: no fonts, scripts, images, analytics, or embeds from any other domain. Static HTML, readable without JavaScript. The same server quietly doubles as the relay: sealed envelopes over WebSocket, nothing stored.

Don't take our word for it. Open your browser's Network tab and reload; you should see requests to this domain only.