This document introduces Notedeck, a multi-platform Nostr client built in Rust. Notedeck functions as "The Nostr browser" - a performant, native application for interacting with the Nostr protocol across desktop (Linux, macOS, Windows) and Android platforms. It features a TweetDeck-style columnar interface, AI assistance, and a modular architecture that allows multiple sub-applications to run within a unified shell.
This overview covers the project's structure, key components, and architectural patterns. For detailed information on specific subsystems, see:
Notedeck is a workspace containing multiple Rust crates that collectively implement a full-featured Nostr client. The architecture separates concerns into:
The primary user-facing application is notedeck_chrome, which serves as a container for multiple sub-applications including notedeck_columns (TweetDeck-style interface) and notedeck_dave (AI assistant).
Diagram: Workspace Organization
Sources: Cargo.toml1-14 README.md29-40
| Feature | Description | Primary Implementation |
|---|---|---|
| Multi-column Layout | TweetDeck-style interface with customizable columns | notedeck_columns crate |
| AI Assistant | Conversational interface for querying Nostr data | notedeck_dave crate |
| Profile Management | View and edit Nostr profiles | notedeck core + notedeck_ui |
| Media Handling | Image/GIF viewing and uploading with caching | notedeck::Images |
| Lightning Integration | Zap (tip) functionality with NWC support | notedeck::Wallet, notedeck::Zaps |
| Multi-account | Manage multiple Nostr identities | notedeck::Accounts |
| Cross-platform | Desktop and Android support | eframe + platform-specific code |
| Localization | Multi-language support with Fluent | notedeck::LocalizationManager |
Sources: README.md12-19 Cargo.toml16-99
The notedeck crate provides the foundational framework. All applications built on Notedeck interact with the core through the Notedeck struct and its associated AppContext.
Diagram: Core Framework Structure
Sources: crates/notedeck/DEVELOPER.md9-36 Cargo.toml4-14
The Notedeck framework follows a hub-and-spoke pattern where the Notedeck struct owns all core subsystems and coordinates their lifecycle. The AppContext provides controlled access to these resources.
Diagram: Data Flow Between Components
Sources: crates/notedeck/DEVELOPER.md42-77
Notedeck provides two main binary targets:
The primary application binary that serves as a shell for multiple sub-applications. It manages:
Entry point: The notedeck_chrome crate contains the main binary and implements the Chrome container.
Can run as a standalone binary or be embedded in notedeck_chrome. Implements the TweetDeck-style columnar interface for Nostr.
Entry point: The notedeck_columns crate provides both library and binary targets.
Sources: Cargo.toml1-14 README.md29-40
Diagram: Platform and Build System
Sources: Cargo.toml26-30 shell.nix1-76 README.md44-73
Notedeck runs on:
Build with: cargo run --release
Android support is provided through:
android-activity crate with game-activity backendcargo-apk for packaging APKsshell.nixBuild with: cargo apk run --release -p notedeck_chrome
Sources: Cargo.toml97 shell.nix29-75 README.md56-73
Notedeck uses Nix for reproducible development environments. The shell.nix file defines all dependencies including:
rustupcmake, pkg-config, gradleEnable the environment with:
Configuration is controlled via environment variables in .envrc:
NOTEDECK_ENABLE_ANDROID: Enable/disable Android toolingRUST_LOG: Configure logging levelsSources: shell.nix1-76 .envrc1-24
| Dependency | Purpose | Version |
|---|---|---|
| egui/eframe | Immediate-mode GUI framework | 0.31.1 |
| nostrdb | High-performance Nostr database | Custom fork |
| enostr | Nostr protocol implementation | Path dependency |
| tokio | Async runtime | 1.16+ |
| image | Image decoding (JPEG, PNG, WebP) | 0.25 |
| fluent | Localization system | 0.17.0 |
| secp256k1 | Cryptographic operations | 0.30.0 |
| lightning-invoice | Lightning payment support | 0.33.1 |
Notedeck uses custom forks of egui/eframe with Damus-specific patches for Android support and other enhancements.
Sources: Cargo.toml16-99 Cargo.toml110-128
For detailed information on specific subsystems:
Refresh this wiki
This wiki was recently refreshed. Please wait 4 days to refresh again.