The server knows nothing. The terminal is everything.
[View Demo (Coming Soon)] | [Report Bug (Coming Soon)] | [Request Feature (Coming Soon)]
Note on the Rename: ZeroDrop is now ZeroDrop. This change ensures absolute identity clarity and avoids naming collisions with parallel communication tech, keeping this standalone TUI chat fully distinct.
ZeroDrop is a secure, ephemeral TUI chat client for those who prefer keyboards over mouse clicks. Built with Rust and Ratatui, it combines the aesthetic of a cyberpunk system monitor with the privacy of a dead-drop.
| Feature | Description |
|---|---|
| π» Ephemeral Relay | The relay server is a "dumb broadcast." It routes traffic without storing or processing it. |
| π‘οΈ End-to-End Encryption | Direct messages are encrypted automatically with X25519 + ChaCha20-Poly1305 and per-message ratchets. |
| π Verification & Ephemera | Safety-number verification, self-destructing messages, replay protection, and key rotation are implemented. |
| π₯οΈ High-Fidelity TUI | Built on Ratatui. Supports mouse capture, resizing, and custom themes. |
| π Blazing Fast | Written in Async Rust (Tokio). Minimal footprint, maximum throughput. |
| π¨ Cyberpunk Aesthetics | Detailed telemetry, network activity charts, and real-time statistics. |
brew tap jcyrus/tap
brew install zerodropcurl -sL https://zerodrop.jcyrus.com/install | bashscoop bucket add jcyrus https://github.com/jcyrus/scoop-bucket
scoop install zerodropirm https://zerodrop.jcyrus.com/install.ps1 | iexNote: After installation, you may need to restart your terminal for the PATH changes to take effect. If
zerodropis not recognized, run:$env:Path = [System.Environment]::GetEnvironmentVariable('Path','User')
curl -sL https://zerodrop.jcyrus.com/install | bash- Rust Toolchain: 1.70+ (2021 Edition)
- Terminal: Support for TrueColor (NerdFonts recommended for icons)
Clone the repository and build the binary:
git clone https://github.com/jcyrus/zerodrop.git
cd zerodrop
# Build the client only (The part you use)
cargo build --release -p zerodrop
| Method | Update Command |
|---|---|
| Homebrew (macOS) | brew upgrade zerodrop |
| Scoop (Windows) | scoop update zerodrop |
| Quick Install Script | Re-run the installation command |
| Manual (from source) | git pull && cargo build --release -p zerodrop |
Check your current version:
zerodrop --versionAfter installation, connect to the public relay:
# Connect with your username (connects to wss://zerodrop.jcyrus.com/ws by default)
zerodrop your_username
# Or connect to a custom server
zerodrop your_username wss://your-server.com/ws
# For local development (requires local server running)
zerodrop your_username ws://localhost:8080/wsMessage Mode:
iorEnter: Enter message modeEsc: Exit message modeEnter: Send message
Security Commands:
/verify <username>: Show a peer's safety number for out-of-band comparison/confirm <username>: Mark a peer as trusted after verifying the safety number/expire <seconds> <message>: Send a self-destructing message with TTL/groupkey <group> <user1,user2,...>: Manually distribute a sender key for a group channel
Navigation:
Escorq: Quit (in normal mode)h/lorβ/β: Navigate channelsTab: Activate selected channel#: Jump to global channeld: Create DM with selected userJ/K: Select user (for DM creation)
Scrolling:
j/korβ/β: Scroll down/up (one line)PageDown/PageUp: Scroll down/up (page)G: Jump to bottom (latest messages)g: Jump to top (oldest messages)
Want to create a private network for your friends? Spin up the "Dumb Relay" in seconds.
No config required. Perfect for free tier hosting.
cd server
cargo shuttle deploy
# Copy the URL provided (e.g., wss://zerodrop.shuttleapp.rs)# For local development
cd server
cargo run --bin zerodrop-local
# Listens on 0.0.0.0:8080 by default- User Guide - Comprehensive guide to using ZeroDrop
- Security Model - Cryptographic design and threat analysis
For developer documentation, see the docs/dev/ directory:
- Client Architecture - Async/sync split, module breakdown
- Server Architecture - Relay pattern, deployment
- Feature Details - Implementation specifics
- Local Development - Development setup
π Click to expand Technical Internals
- Client:
Ratatui(UI),Tokio(Async),Tungstenite(WebSockets) - Server:
Axum(Http),Shuttle(Infra)
To ensure the UI never freezes at 60fps, we use a strict Actor-model separation:
- Main Thread: Synchronous. Handles drawing the UI and capturing keystrokes.
- Network Task: Asynchronous. Runs on
Tokio. Handles the WebSocket stream. - Bridge:
mpsc::unbounded_channelpasses messages between the two worlds.
{
"type": "MSG",
"payload": "EncryptedBase64String...",
"channel": "dm:alice:bob",
"meta": {
"sender": "User_Hash_ID",
"timestamp": 171542100
},
"recipient": "bob",
"ttl": 60
}We welcome all hackers, cypherpunks, and Rustaceans.
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/MatrixRain) - Commit your Changes (
git commit -m 'Add Matrix rain effect') - Push to the Branch (
git push origin feature/MatrixRain) - Open a Pull Request
Distributed under the MIT License. See LICENSE for more information.

