First official Android Release!
- Keyboard visibiliy
- core lightning node ui (experimental)
- Onboarding follow packs
- Reaction notifications!
- Japanese translations
Terry Yiu (3):
Remove unused strings from translation files
Import translations
Add Japanese and Portuguese (Portugal) languages
William Casarin (38):
battery: disable render every 100ms
dave: switch to logical time
force oled with --mobile flag
gif: disable continuous gif rendering
ui: add AnimationMode to control GIF rendering behavior
debug: add repaint causes debug tool
Merge thread scroll fix by kernel
chrome: add virtual keyboard ui
android: fix dark/light mode and folding screen crash
notedeck app: add clndash
clndash: initial peer channel listing
default logs
clndash: channels ui
clndash: summary cards
clndash: include listpeerchannel errors
clndash: invoice loading
clndash: zap rendering
clndash: fix invoice order, return more stuff
clndash: reorganize
clndash: configurable host
clndash: add readme
clndash: readme
clndash: tweak readme
clndash: tweak links in readme
clndash: specify you need --clndash
clndash: dont forget CLNDASH_ID
remove hjkl bindings
Merge Japanese and Portuguese translations from Terry
clippy: fix lint errors
Implement soft keyboard visibility on Android
chrome: greatly improve soft-keyboard visibility & layout handling
args: parse hashtag columns from cli
debug: fix memory debug builds
Merge remote-tracking branch 'github/pr/1087' into notifications
Merge remote-tracking branch 'github/pr/1081' into notifications especially if it merges an updated upstream into a topic branch.
tweak follow pack design
chrome: remove dev log
v0.7.0
kernelkind (53):
TMP: use new egui-nav to fix scroll offset issues
add `scroll_offset` to `NoteAction::Note`
add `ThreadNote::set_scroll_offset`
set scroll offset when routing to thread
appease clippy
make search icon more customizable
make compose button animate horiz rather than vert
add toolbar icons to `notedeck_ui`
add select_by_route
add toolbar related logic
add toolbar defaults
copy toolbar rendering to `notedeck_ui`
use toolbar in columns rather than chrome
clippy: allow collapsible match
add flags to `ScaledTexture`
extract a pub `render_media` from image_carousel
add impl for `ScaledTextureFlags::RESPECT_MAX_DIMS`
add nip51 set caching structs
nip 51 set widget
add onboarding 'manager'
TMP: temporary author for trusted pks list
add onboarding view
add onboarding related state to app
integrate onboarding
fix contact list bug
use the onboarding follow pack curator pubkey
make `TimelineCache::notes` private
remove commented out code...
move `HybridSet` to own file
ui: add like icon
appease clippy
add muted helper
unknownids: use pk bytes
replace `HybridSet` with `NoteUnits`
add reactions kind to notifications filter
add `TimelineUnits`
note: account for mutes in the notifications dot
make since optimize accept Option<&NoteRef> instead of notes
prop `UnknownIds` for initial timeline
ui: add rendering for `NoteUnit`s
upgrade `TimelineOpenResult` to hold new pubkeys too
use `TimelineUnits` instead of `Vec<NoteRef>`
ui: remove unnecessary reverse
introduce failing test for reaction duplication bug
fix duplicate ReactionUnit for multiple kth indices
fix reaction target bug
ui: reactions closer approximation of iOS design
expose indexmap to notedeck
use indexmap
add Nip51SetCache helper methods
add virtual list to `Onboarding`
prop `Onboarding` as mut
render follow pack by index from virtual list
Signed-off-by: William Casarin <jb55@jb55.com>
Notedeck
A modern, multiplatform Nostr client built with Rust. Notedeck provides a feature-rich experience for interacting with the Nostr protocol on both desktop and Android platforms.
✨ Features
- Multi-column Layout: TweetDeck-style interface for viewing different Nostr content
- Dave AI Assistant: AI-powered assistant that can search and analyze Nostr content
- Profile Management: View and edit Nostr profiles
- Media Support: View and upload images with GIF support
- Lightning Integration: Zap (tip) content creators with Bitcoin Lightning
- Cross-platform: Works on desktop (Linux, macOS, Windows) and Android
📱 Mobile Support
Notedeck runs smoothly on Android devices with a responsive interface:
🏗️ Project Structure
notedeck
├── crates
│ ├── notedeck - Core library with shared functionality
│ ├── notedeck_chrome - UI container and navigation framework
│ ├── notedeck_columns - TweetDeck-style column interface
│ ├── notedeck_dave - AI assistant for Nostr
│ ├── notedeck_ui - Shared UI components
│ └── tokenator - String token parsing library
🚀 Getting Started
Desktop
To run on desktop platforms:
# Development build
cargo run -- --debug
# Release build
cargo run --release
Android
For Android devices:
# Install required target
rustup target add aarch64-linux-android
# Build and install on connected device
cargo apk run --release -p notedeck_chrome
Android Emulator
- Install Android Studio
- Open 'Device Manager' and create a device with API level
34and ABIarm64-v8a - Start the emulator
- Run:
cargo apk run --release -p notedeck_chrome
🧪 Development
Android Configuration
Customize Android views for testing:
- Copy
example-android-config.jsontoandroid-config.json - Run
make push-android-configto deploy to your device
Setting Up Developer Environment
./scripts/dev_setup.sh
This adds pre-commit hooks for proper code formatting.
📚 Documentation
Detailed developer documentation is available in each crate:
🔄 Release Status
Notedeck is currently in BETA status. For the latest changes, see the CHANGELOG.
Future
Notedeck allows for app development built on top of the performant, built specifically for nostr database nostrdb. An example app written on notedeck is Dave
Building on notedeck dev documentation is also on the roadmap.
🤝 Contributing
Developers
Contributions are welcome! Please check the developer documentation and follow these guidelines:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Translators
Help us bring Notedeck to non-English speakers!
Request to join the Notedeck translations team through Crowdin.
If you do not have a Crowdin account, sign up for one. If you do not see your language, please request it in Crowdin.
🔒 Security
For security issues, please refer to our Security Policy.
📄 License
This project is licensed under the GPL - see license information in individual crates.
👥 Authors
- William Casarin jb55@jb55.com
- kernelkind kernelkind@gmail.com
- And contributors

