Tides is a powerful Nostr messenger that lives right in your browser as an extension. Its Compatible with Chromium-based browsers like Brave (recommended), Chrome, or Edge.
- Direct Messaging: Seamless peer-to-peer communication over the Nostr network
- Group Chats: Create and manage group conversations with multiple participants
- Zaps Integration: Send and receive Bitcoin tips via Lightning Network
- Media Support: Share images, GIFs, and embed content from popular platforms
- Rich Link Previews: Automatic previews for Nostr notes, profiles, YouTube, Twitter/X, and media links
- Multiple Relay Support: Connect to various Nostr relays for increased reliability
- Extension Login: Compatible with NIP-07 browser extensions like Alby and nos2x
- Message Caching: Temporary storage of recent messages for faster loading
- Custom Themes: Dark mode support with a sleek, modern interface
- Search: Search through contacts, groups, and messages
- Group Management: Create, edit, and leave groups with member management
- Download the latest release
.zip
file - Extract the ZIP file - the contents should contain
manifest.json
and other files - Open your browser and navigate to:
- Brave:
brave://extensions
- Chrome:
chrome://extensions
- Edge:
edge://extensions
- Brave:
- Enable "Developer mode" in the top right corner
- Click "Load unpacked" and select the folder containing the extracted files
- Make sure to enable "Add to taskbar" in the extension details to see the icon
- The extension icon should appear in your browser toolbar
- Clone the repository:
git clone https://github.com/arbadacarbaYK/tides.git
cd tides
- Install dependencies and build:
npm install
npm run build
- Load the extension in your browser:
- Navigate to the extensions page (see installation instructions above)
- Enable "Developer mode"
- Click "Load unpacked"
- Select the
dist
directory from your build - Enable "Add to taskbar" in extension details
src/
├── background.js # Service worker and background processes
├── popup.js # Main UI logic
├── popup.html # Extension popup interface
├── style.css # Styling
├── shared.js # Shared utilities and constants
├── userMetadata.js # User profile handling
├── services/ # External API integrations (Giphy, etc.)
├── sounds/ # Audio files for notifications
├── icons/ # Extension and UI icons
├── state/ # State management and persistence
└── lib/ # Third-party libraries
Built using:
- nostr-tools for protocol handling
- Native WebSocket for relay connections
- Chrome Storage API for data persistence
- Web Notifications API
- Giphy API for GIF support
- WebLN for Lightning Network integration
Supports NIPs:
- NIP-01: Basic protocol
- NIP-04: Encrypted Direct Messages
- NIP-05: DNS Identifiers
- NIP-07: Browser Extension
- NIP-19: bech32-encoded entities
- NIP-21: nostr: URL scheme
- NIP-25: Reactions
- NIP-28: Public Chat Channels
- NIP-40: Expiration Timestamp
- NIP-42: Authentication
- NIP-44: Versioned Encryption
- NIP-57: Lightning Zaps
- NIP-89: Application Handlers
- NIP-92: Media Attachments
-
Authentication Flow
- Support both NIP-07 extension login and manual nsec
- Implement secure credential storage
- Handle auto-login via Chrome storage
- Validate all key formats
-
Relay Management
- Implement connection pooling
- Handle relay failures gracefully
- Cache messages for offline use
- Monitor relay health
-
Message Handling
- Encrypt all DMs using NIP-04/44
- Validate message signatures
- Handle different content types
- Implement proper error recovery
- Process group messages (kind 42)
- Handle group metadata updates
-
Group Management
- Create and edit groups
- Member management
- Group metadata handling
- Leave group functionality
- Group message caching
- Group event validation
-
Performance
- Cache user metadata locally
- Cache group data locally
- Implement lazy loading for media
- Optimize WebSocket connections
- Minimize storage usage
- Efficient message filtering
- End-to-end encrypted messages using both:
- NIP-04: Legacy encryption support
- NIP-44: Latest versioned encryption protocol
- No central server, pure P2P communication
- Private keys never leave your device
- Local storage encryption for cached data
- Open source and auditable code
- No tracking or analytics
- Minimal permission requirements
- Secure relay connections only
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature
) - Commit your changes (
git commit -m 'Add some AmazingFeature'
) - Push to the branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
If you find this project useful, please consider sending a zap to support development at [email protected]!
This project is licensed under the Creative Commons Attribution-NonCommercial 4.0
This means you are free to:
-
Share: Copy and redistribute the material in any medium or format
-
Adapt: Remix, transform, and build upon the material Under the following terms:
-
Attribution: You must give appropriate credit, provide a link to the license, and indicate if changes were made
-
NonCommercial: You may not use the material for commercial purposes
-
No additional restrictions: You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits
For more information, see CC BY-NC 4.0
- The Nostr community for their amazing psychoOs and tools
- Lightning Network developers making instant payments possible
- All contributors and users making this project better