noStrudel
NOTE: This client is still in development and is very buggy
noStrudel is my personal nostr client.
My goals for this project is to learn as much as I can about nostr (by implementing everything myself) and to have a client that works exactly how I like.
There are many features missing from this client and I wont get around to implementing everything. but if you like the client you are welcome to use it.
Live Instance: nostrudel.ninja
You can find better clients with more features in the awesome-nostr repo.
Please dont trust my app with your nsec
While logging in with a secret key is supported. please dont. Ultimatly this is a web client, so there is always a change of XXS attacks that could steal your secret key.
I would recomend you use a browser extension like Alby or Nos2x
Current Features
- Home feed
- Discovery Feed
- Dark theme
- Preview twitter / youtube links
- Lighting invoices
- Blurred or hidden images and embeds for people you dont follow
- Thread view
- NIP-05 support
- Broadcast events
- User tipping
- Manage followers ( Contact List )
- Relay management
- Profile management
- Image upload
- Reactions
- Dynamically connect to relays (start with one relay then connect to others as required)
- Reporting users and events
- Blocking users
- Notifications
Supported NIPs
- NIP-02: Contact List and Petnames
- NIP-03: OpenTimestamps Attestations for Events
- NIP-04: Encrypted Direct Message
- NIP-05: Mapping Nostr keys to DNS-based internet identifiers
- NIP-06: Basic key derivation from mnemonic seed phrase
- NIP-07:
window.nostr
capability for web browsers - NIP-08: Handling Mentions
- NIP-09: Event Deletion
- NIP-11: Relay Information Document
- NIP-12: Generic Tag Queries
- NIP-13: Proof of Work
- NIP-14: Subject tag in text events.
- NIP-15: End of Stored Events Notice
- NIP-19: bech32-encoded entities
- NIP-20: Command Results
- NIP-21:
nostr:
URL scheme - NIP-25: Reactions
- NIP-26: Delegated Event Signing
- NIP-33: Parameterized Replaceable Events
- NIP-39: External Identities in Profiles
- NIP-36: Sensitive Content
- NIP-40: Expiration Timestamp
- NIP-42: Authentication of clients to relays
- NIP-50: Keywords filter
- NIP-56: Reporting
- NIP-51: Lists (Mute, Pin, People List, and Bookmark list)
- NIP-57: Lightning Zaps
- NIP-57: Badges
- NIP-65: Relay List Metadata
TODO
- Update TimelineLoader to connect to each relay individually so it better track the latest events
- Create notifications service that keeps track of read notifications. (show unread count in sidenav)
- Rebuild relays view to show relay info and settings NIP-11
- filter list of followers by users the user has blocked/reported (stops bots/spammers from showing up at followers)
- Add mentions in notes (https://css-tricks.com/so-you-want-to-build-an-mention-autocomplete-feature/)
- Save note drafts and let users manage them
- make app a valid web share target https://developer.chrome.com/articles/web-share-target/
- handle image share
- implement NIP-56 and blocking
- Improve link previews https://github.com/pengx17/logseq-plugin-link-preview/blob/master/src/use-link-preview-metadata.tsx
- Support
magnet:
links- in-browser video player? https://webtorrent.io/
- Button to open magnet link in system default app
- Add support for uploading files (seed files in background?, how to pick trackers?)
Setup
yarn install && yarn start
Contributing
For now this is only a personal project, and while im more than happy to fix any issues that are found. id like to spend as much time as posible inside of vscode and not responding to PRs or issues. So if you do want to open a PR please keep it small and dont rewrite the whole project :D