Features
Hoot combines familiar email functionality with the security and decentralization of the Nostr protocol. Here are the key features that make Hoot a powerful communication tool.Core features
End-to-end encryption
All private messages use NIP-59 gift wrapping for end-to-end encryption. Each recipient receives a unique encrypted event, ensuring perfect forward secrecy.
Multi-relay support
Connect to multiple Nostr relays simultaneously with automatic reconnection (5s intervals) and keepalive pings (30s) to maintain healthy connections.
Encrypted local storage
Messages stored locally in SQLite with bundled SQLCipher encryption. Your data is encrypted at rest and only accessible with your credentials.
Secure key management
Platform-specific secure storage for Nostr keypairs: macOS Keychain, Windows Credential Manager, or Linux Secret Service API.
Email-like interface
Familiar inbox, compose, and folder structure with to/cc/bcc support, subjects, and threaded conversations.
Contact management
Manage contacts with profile metadata, display names, and avatar images fetched asynchronously from Nostr events.
Message threading
Track conversation threads with parent event references. Thread reconstruction uses recursive queries to build complete conversation trees.
Native performance
Built with Rust and egui for a fast, lightweight desktop application. Immediate-mode GUI ensures responsive performance.
Message encryption
Hoot uses NIP-59 gift wrap for all private messages:Gift wrapping creates a separate encrypted event for each recipient. This means:
- Recipients cannot see who else received the message
- Each encrypted event uses unique keys
- Compromise of one key doesn’t affect other recipients
Relay management
The relay pool manages WebSocket connections with robust error handling:Disconnected relays automatically reconnect every 5 seconds. Connected relays receive keepalive pings every 30 seconds to prevent timeout.
Database architecture
Hoot stores all data locally in an encrypted SQLite database:- Events table: Stores raw Nostr events as JSON with generated virtual columns for efficient querying
- Profile metadata: Caches Nostr metadata (kind 0) events for contact information
- Gift wrap handling: Automatically unwraps incoming encrypted events and stores the inner rumor
- Thread reconstruction: Uses recursive CTEs to build complete conversation threads
Secure key storage
TheAccountManager coordinates secure storage using platform-specific APIs:
- macOS: Keychain API via
security-frameworkcrate - Windows: Credential Manager for secure credential storage
- Linux: Secret Service API with file-based fallback for compatibility
Private keys never leave your device. All encryption and signing operations happen locally.
Profile metadata
Contact profiles are lazy-loaded and cached:- Check local cache first
- If not cached, return
ProfileOption::Waitingand query relays - Cache metadata when received from relays
- Persist to database for future use
- Fetch contact images asynchronously in background threads
Message composition
Hoot supports full email-style composition:Threading support
Messages can reference parent events to create conversation threads:Thread reconstruction walks both parent and child references recursively to build complete conversation trees, even with complex reply patterns.
User interface
Built with egui for immediate-mode GUI:- Page-based navigation: Inbox, Drafts, Settings, Contacts, Trash, Junk, Requests
- Multiple compose windows: Open multiple drafts simultaneously, tracked by unique IDs
- Custom theming: Custom color scheme with Inter font embedded
- Responsive layout: Sidebar navigation with main content area
Advanced features
NIP-05 verification
Hoot includes NIP-05 verification and resolution:Draft management
Save message drafts locally:Contact organization
Manage contacts with the dedicated contacts manager:Development features
Profiling support
Enable profiling for performance analysis:- Starts puffin server on
127.0.0.1:8585 - Automatically launches
puffin_viewer - Track performance metrics in real-time
Profiling is available through the optional
profiling feature flag, which includes the puffin profiler and puffin_http server.Logging
Built-in structured logging with tracing:Platform support
Hoot runs natively on:- Linux: Full support with Secret Service API key storage
- macOS: Native Keychain integration
- Windows: Credential Manager integration
All platforms use the same core codebase with platform-specific adapters for secure key storage.