A lightweight terminal-based Nostr client written in Zig. Connect to geohash-based local channels and chat in real-time.
- 🚀 Fast & Minimal: Sub-2MB binary
- 🌍 Geohash Channels: Location-based chat rooms (e.g., "9q" for Central California)
- 💬 Real-time Messaging: WebSocket connections to Nostr relays
- 🔐 Cryptographically Secure: secp256k1 signatures for all messages
- 🚫 Advanced Blocking: Block users by pubkey, name, or wildcard patterns
- 🖥️ Cross-platform: macOS, Linux, Windows support
-
Download the latest release from GitHub releases
- Linux:
zigchat-Linux.tar.gz - macOS:
zigchat-macOS.tar.gz - Windows:
zigchat-Windows.zip
- Linux:
-
Extract and run:
# Extract (Linux/macOS)
tar -xzf zigchat-*.tar.gz
# Run
./zigchat chat 9q # Connect to geohash 9q
./zigchat chat 9q --debug # With debug mode- Zig 0.14.0 or later
- libsecp256k1 (with Schnorr support)
macOS:
brew install secp256k1Linux:
sudo apt-get install libsecp256k1-dev # Debian/Ubuntu
sudo yum install libsecp256k1-devel # RHEL/FedoraWindows: Use vcpkg or download from bitcoin-core/secp256k1
git clone https://github.com/tudorbotezan/zigchat.git
cd zigchat
zig build -Doptimize=ReleaseSafe
# Run locally with helper script
./connect.sh 9q# Using pre-built binary
./zigchat chat 9q # Connect to geohash 9q
./zigchat chat 9q --debug # With debug mode
# Using helper script (for development)
./connect.sh 9q8 # San Francisco Bay Area
./connect.sh 9q5 # Los Angeles Area
./connect.sh dr5 # New York CityOnce connected:
- Type any message and press Enter to send
/users- Show active users in the channel/quit- Exit the chat
/block <id>or/b <id>- Block by pubkey, #tag, or username#tag/blockname <pattern>- Block usernames with wildcard support (e.g.,spam*,*bot,test*123)/unblock <id>- Unblock a user by pubkey/unblockname <pattern>- Unblock a name pattern/blocks- List all blocked users/blockednames- List all blocked name patterns
Wildcard Examples:
spam*- Blocks any username starting with "spam"*bot- Blocks any username ending with "bot"test*user- Blocks usernames starting with "test" and ending with "user"annoying- Blocks exact username match
Zigchat uses geohash prefixes for location-based channels:
9q- Central California9q8- San Francisco Bay Area9q5- Los Angeles Areadr5- New York Cityu4p- Londonwt- Tokyo
Shorter prefixes cover larger areas. Find your geohash at geohash.org.
Contributions are welcome! Please feel free to submit a Pull Request.
MIT - See LICENSE file for details
- Built with Zig
- Uses secp256k1 for cryptography
- Implements Nostr protocol