The Retro-Futuristic, Serverless P2P Chat Application.
Encryption. Anonymity. Aesthetics.
ShellChat is a terminal-based (and mobile-ready) decentralized chat application designed for the modern hacker. It operates completely serverless, using Kademlia DHT for global peer discovery and libp2p for encrypted, direct communication.
Whether you're on a Linux VPS, a Windows gaming rig, or an Android phone, ShellChat connects you directly to your peers with zero metadata retention.
- End-to-End Encryption: All traffic is encrypted using TLS 1.3 / Noise.
- At-Rest Encryption: Your local database is secured with Application-Level Encryption using XChaCha20-Poly1305.
- Pure Go: We use
modernc.org/sqlite(CGO-free) for maximum cross-platform compatibility without external dependencies. - Key Derivation: We use Argon2id (the winner of the Password Hashing Competition) to turn your password into a cryptographic key.
- Global DHT: We use the IPFS public DHT infrastructure to find peers worldwide without central servers.
- NAT Traversal: Built-in AutoNAT and UPnP to punch through home routers and firewalls.
- Multi-Platform: Runs natively on Windows, Linux, macOS, Android, and iOS.
- TUI (Desktop): A Split-Pane Terminal UI tailored for keyboard power users.
- GUI (Mobile): A touch-friendly interface that retains the retro-terminal feel.
How does ShellChat connect you without a server?
graph TD
A["User A (You)"] <-->|"Encrypted Stream (Noise)"| B["User B (Peer)"]
A -.->|"DHT Lookup"| D(("Global DHT"))
B -.->|"DHT Announce"| D
subgraph "Your Device"
UI[Retro UI]
DB[("Encrypted DB (SQLCipher)")]
Keys[Argon2 Keys]
end
- Bootstrap: Your node connects to the global P2P network.
- Announce: You cryptographically sign your presence and announce it to the DHT.
- Discover: You search for a peer's ID (e.g.,
QmHash...). - Connect: ShellChat establishes a direct TCP/QUIC connection.
- Chat: Messages flow directly between devices. No middleman.
Grab the latest release for your OS from the Releases Page.
| Platform | File |
|---|---|
| Windows | shellchat-windows-amd64.exe |
| Linux | shellchat-linux-amd64.tar.xz |
| Android | shellchat-android.apk |
| macOS | shellchat-macos-universal |
Prerequisites: Go 1.25+, GCC.
# Clone the repository
git clone https://github.com/nishal21/shellchat.git
cd shellchat
# Build TUI (Desktop)
go build -o shellchat .
# Build GUI (Mobile/Desktop)
go install fyne.io/fyne/v2/cmd/fyne@latest
fyne package -os windows -icon assets/icon.png --appID com.shellchat.app- Launch: Run
./shellchat chat. - Login: Set a master password (don't lose this!).
- Connect:
- Wait ~30s for Global DHT bootstrap.
- Type
/myidto see your address. - Type
/connect <peer-multiaddr>to connect to a friend.
| Command | Description |
|---|---|
/help |
Show all available commands |
/myid |
Display your full P2P MultiAddress |
/copyid |
Copy your address to clipboard |
/connect <addr> |
Connect to a remote peer |
/exit |
Leave current chat context |
/clear |
Clear screen buffer |
/quit |
Exit application |
- Global P2P Discovery
- Android & iOS Support
- Encrypted Local Storage
- File Sharing: P2P encrypted file transfer.
- Group Chats: Decentralized mesh groups.
- Voice/Video: WebRTC integration.
We love contributions! Please read our CONTRIBUTING.md to get started.
Found a vulnerability? Please contact nishalamv@gmail.com or read our SECURITY.md policy.
Distributed under the MIT License. See LICENSE for more information.
Built with โค๏ธ by Nishal.