nospeak is a terminal-based Nostr chat client built with Go. Nospeak provides a secure, decentralized messaging experience through the Nostr protocol with both TUI and CLI interfaces.
- Terminal User Interface (TUI) - Interactive chat interface with contact list and message history
- Command Line Interface (CLI) - Scriptable commands for sending/receiving messages
- End-to-end encryption - Private messaging using NIP-44 v2 encryption protocol
- Sealed direct messages - NIP-59 gift wraps provide metadata protection and sender verification
- Outbox Model - Uses NIP-65 Inbox/Outbox relays for contacts
- Message caching - SQLite caching for message persistence
- Real-time relay monitoring - Live connection status and health monitoring for all configured relays
make installgo install github.com/psic4t/nospeak@latest-
Initialize configuration and create a new keypair:
nospeak # Edit ~/.config/nospeak/config.toml to add existing keys -
Set username and mailbox relays from config if needed
nospeak set-name <your desired username>
nospeak messaging-relays [relay_url:r,relay_url:w,...]
-
Start the TUI interface:
nospeak
-
Add some npubs in Settings (F1)
Launch the interactive terminal interface:
nospeakTUI Keyboard Shortcuts:
Ctrl+c/Ctrl+q- Quit applicationCtrl+r- Refresh all profiles and relays (bypasses cache TTL)Tab- Switch between contact list and inputEnter- Send message (when in input field)PgUp/PgDn- Scroll message pane up/downCtrl+k/Ctrl+j- Switch between contacts (k=up, j=down)Ctrl+p- Show profile information for current contactF1- Show settingsF2- Show relay connections (view connection status, health metrics, and relay statistics)F3- Toggle contacts pane↑/↓- Navigate contact list
Automatic Profile Refresh:
- Profiles and relay lists are automatically refreshed 10 seconds after application startup to ensure fresh data
- Manual refresh is still available via
Ctrl+rat any time
Send a message:
nospeak send <npub> "Your message here"Listen for messages:
nospeak receiveSet your profile name:
nospeak set-name "Your Name"Manage messaging relays:
# View current messaging relays
nospeak messaging-relays
# Set messaging relays (optional :r for read-only, :w for write-only)
nospeak messaging-relays wss://relay1.com,wss://relay2.com:r,wss://relay3.com:wGenerate new Nostr identity:
nospeak new-identity# Development build
make dev
# Production build with SQLite support
make release
# Static build without SQLite
make release-static
# Install to system
make install- Message Creation: Content is encrypted using NIP-44 v2 with a conversation key derived from sender and recipient keys
- Gift Wrapping: The encrypted message (kind 14) is sealed in a NIP-59 gift wrap (kind 1059/62)
- Transport: Gift wrapped messages are published to configured relays
- Reception: Clients subscribe to gift wrap events, unwrap them to reveal the inner rumor, then decrypt the content
Questions? Ideas? File bugs and TODOs through the issue tracker!