NoorNote (Arabic: نور, meaning "light") — a client for Nostr, the decentralized social protocol.
A slim yet feature rich Nostr client that doesn't rely on any Google services, under an open source license.
It focuses not just on the social media side but also heavily on the other stuff aspect of Nostr. Things like marketplace products, Zap Streams, tribes, drag and drop bookmark lists with folders, follow packs, custom emojis, an onboarding wizard, plus tons of other Nostr services and innovative features you won't find in other clients are all built in as addons. Great for Nostr newbies as well as advanced users.
Available as Web App, Desktop App (Linux & macOS) and Android App (on Zapstore). Windows is not officially supported.
- Timeline - Follow your network, see latest posts, reposts, and quotes
- Notifications - Likes, zaps, reposts, mentions, and replies
- Direct Messages - Encrypted private conversations (NIP-17 + legacy NIP-04)
- Long-Form Articles - Read and write NIP-23 articles with dedicated timeline
- Picture Posts - NIP-68 kind:20 image-first posts with multi-image grids
- Polls - Create and vote on NIP-88 polls
- Zaps - Send and receive Lightning payments via NWC
- Comments - NIP-22 Kind:1111 universal comments with Reply/Comment switch
- Custom Emojis (display) - Render NIP-30 custom emojis (incl. animated GIFs) from any author
- Beginner-friendly onboarding - Step-by-step profile setup with guided explanations, first follows via calle's Follow Packs, and Lightning wallet setup with Rizful
- Spotlight-like search - Search by Event, Username, npub and full-text. With built-in browsing history. Quick access to anything with CMD+K/CTRL+K
- Search in npub - Search for keywords within a specific user's posts
- Custom Bookmarks - Bookmark any URL, just like in a browser
- Mute Threads - Say bye to hell threads
- Follow lists - With mutual badges
- Quoted reposts - Shown in note's replies
- Article notifications - Get notified on new articles per user
- Analytics per note - See who liked, reposted, quoted, replied, or zapped
- Thread mention alerts - Get notified when someone replies to a note you were mentioned in
- Local list backups - Never lose your follows, bookmarks, or mutes again
- Multiple NIP-05 support - Add multiple verified addresses to your profile
- Image reposts - Share images with automatic source attribution
- Notification priorities - Drag & drop to customize notification order
- Rich DM content - Links, media, mentions, and quoted notes in direct messages
- 7 color themes - Deep Purple, Bright Superman, Code Bunker, Soft Lilac, Dark Symbiote, Neon Harley, Wake up Neo
- Font size controls - Adjustable text size with persistent preference
- Layout modes - Phone mode and customizable layout options
- Mutual change alerts - Get notified when someone stops following back
- Hijri calendar - Islamic date display alongside Gregorian dates
- Relay browsing - Filter timeline to show content from specific relays
- Time Machine - Jump to any date range in your timeline with the built-in date picker
- Broadcast delete - Notes are deleted across 159+ relays for thorough removal
- Article mentions - Nostr references and note embeds render inside longform articles
- Custom Emojis & animated GIFs - Render NIP-30 custom emojis from any author out of the box. Optional Custom Emojis add-on lets you upload your own pack and use them as reactions or in posts
- Opt-in client tag - Choose whether your posts identify NoorNote as the publishing client
NoorNote ships with optional features that you enable on demand under Settings → Add-ons. Disabled add-ons are lazy-loaded — their code stays out of the main bundle until you switch them on.
| Add-On | Description |
|---|---|
| Bookmarks | Save notes and links to bookmark folders with drag-and-drop organization |
| Tribes | Custom user groups with dedicated timeline tabs |
| Extended Follows | Mutual badges, Zap In/Out stats, and mutual change detection for your follows list |
| Wallet Balance | Show your Lightning wallet balance in the sidebar with fiat conversion |
| Profile Recognition | Visual cues (blinking profile pictures) when people you follow change their name or avatar |
| Marketplace | Browse and publish NIP-99 classified listings, tag filters, image carousel, listings from people you follow injected into your timeline |
| Follow Packs | Discover and share curated lists of Nostr users to follow |
| NostrIn | Mount a bookmark folder or a custom user list to your profile so other NoorNote users can see them |
| Hashtag Subscriptions | Subscribe to any hashtag or word and get notified when someone posts a note containing it |
| List Sync Mode | Switch between Easy Mode (automatic sync) and Manual Mode (action buttons + Danger Zone for resetting corrupted list data) |
| Word Filter | Hide notes containing specific words from all timelines |
| Custom Emojis | Upload your own NIP-30 emoji pack (incl. animated GIFs) and use them as reactions and in posts |
| Live Streams Player | Watch NIP-53 live streams (e.g. zap.stream) inline in the timeline via HLS, and zap the stream directly so your sats appear in the stream's overlay |
| Scheduled Posts | Schedule notes and long-form articles to be published at a later date and time — via a NoorNote-operated hold-and-forward service, no private keys leave your device |
...and many more to come.
Web: noornote.app — no install needed, use with a browser extension like Alby
Desktop: macOS and Linux downloads on Releases
Since the app is not signed, macOS will show an error ("app is damaged"). Run this in Terminal after installation:
xattr -cr /Applications/Noornote.app- No tracking - Zero analytics, no data collection
- Local-first lists - Follows, bookmarks, and mutes are stored locally with optional relay sync
- Encrypted local storage - Sensitive data (nsec, NWC string) stored in encrypted local files
If the app crashes, check the log files:
| System | Log Location |
|---|---|
| Linux | ~/.local/share/com.noornote.desktop/logs/ |
| macOS | ~/Library/Logs/com.noornote.desktop/ |
| Method | Platform | Security | Convenience |
|---|---|---|---|
| NoorSigner | Desktop | High | High |
| NIP-07 Browser Extension (e.g. Alby) | Web | High | High |
| NIP-46 Remote Signer | All | High | Medium |
Desktop: Use NoorSigner for best security and convenience. Web: Use a NIP-07 browser extension like Alby.
| NIP | Description | Kind(s) |
|---|---|---|
| NIP-01 | Basic protocol (notes, profiles) | 0, 1 |
| NIP-02 | Follow list | 3 |
| NIP-04 | Encrypted DMs (legacy) | 4 |
| NIP-05 | DNS-based verification | - |
| NIP-07 | Browser extension signing | - |
| NIP-09 | Event deletion | 5 |
| NIP-10 | Reply threading | - |
| NIP-17 | Private Direct Messages | 13, 14, 1059, 10050 |
| NIP-18 | Reposts & generic reposts | 6, 16 |
| NIP-19 | bech32 encoding (npub, nsec, note, nevent, naddr) | - |
| NIP-22 | Comments | 1111 |
| NIP-23 | Long-form content (articles + drafts) | 30023, 30024 |
| NIP-24 | Extra metadata fields and tags (banner, website, lud16, etc.) | - |
| NIP-25 | Reactions | 7 |
| NIP-27 | Text note references | - |
| NIP-30 | Custom emojis (incl. animated GIFs) | 30030 |
| NIP-34 | Git on Nostr (lightweight cards linking to gitworkshop.dev) | 1617, 1618, 1619, 1621, 1630, 1631, 1632, 1633, 30617 |
| NIP-36 | Content warnings (NSFW) | - |
| NIP-42 | Authentication of clients to relays | 22242 |
| NIP-44 | Encrypted payloads (modern encryption) | - |
| NIP-46 | Remote signing (bunker://) | 24133 |
| NIP-47 | Nostr Wallet Connect | 23194, 23195 |
| NIP-50 | Search | - |
| NIP-51 | Lists (bookmarks, mutes, private follows, tribes) | 10000, 30000, 30003 |
| NIP-53 | Live Activities (inline HLS player for live streams + chat input) | 1311, 30311 |
| NIP-55 | Android signer application (Amber) | - |
| NIP-56 | Reporting | 1984 |
| NIP-57 | Zaps | 9734, 9735 |
| NIP-65 | Relay list metadata | 10002 |
| NIP-68 | Picture events | 20 |
| NIP-71 | Video events | 21, 22 |
| NIP-78 | Application-specific data | 30078 |
| NIP-88 | Polls | 1068, 1018 |
| NIP-92 | Media attachments (imeta tags) |
- |
| NIP-94 | File metadata events in the timeline | 1063 |
| NIP-96 | HTTP file storage | - |
| NIP-98 | HTTP auth | 27235 |
| NIP-99 | Classified listings (marketplace) | 30402 |
Other event kinds (not tied to a numbered NIP — community specs, third-party APIs, NoorNote-internal):
- Blossom upload auth — kind
24242, signed-event upload authorization for Blossom-style media servers - Follow Packs — kind
39089, used by the Follow Packs add-on and calle's Follow Packs - Zapstore Apps — kind
32267, app metadata for Zapstore listings - Zapstore Release Artifacts — kind
30063, release artifact metadata for Zapstore apps - Polls (legacy / Pollerama) — kind
6969, alternative poll format predating NIP-88 - Primal Cache
USER_PROFILE_INFO— kind10000105, consumed from Primal's caching relay fortime_joinedlookup on profile pages - Mutual changes (NoorNote-internal) — kind
99001, synthesized for notifications when someone follows or unfollows you. Not published to relays. - Bookmark list (legacy) — kind
10003, NIP-51 legacy bookmark list (read for migration; new bookmarks go in kind30003)
Complete guide for building NoorNote (Web, Desktop, Android) and NoorSigner from source.
All Platforms:
- Bun latest (install via bun.sh)
- Node.js 22+ (for
electron-builder) - Go 1.24+ (only if you also build NoorSigner from source — Desktop only)
Android (additional):
- Android Studio + Android SDK (
ANDROID_HOMEenv var set) - JDK 21
Linux Desktop note: bun install has a known bug with platform-specific optionalDependencies (rollup, esbuild). On Linux use npm install --legacy-peer-deps instead of bun install.
git clone https://github.com/77elements/noornote.git
cd noornote
bun install # or: npm install --legacy-peer-deps (Linux)NoorNote bundles the NoorSigner daemon as a sidecar binary. Skip this step if you're only targeting Web or Android.
git clone https://github.com/77elements/noorsigner.git ../noorsigner
cd ../noorsigner
go build -o noorsigner -ldflags="-s -w" .
cd ../noornote
# Copy into the platform folder Electron expects
mkdir -p binaries/$(uname -s | tr A-Z a-z)-$(uname -m | sed 's/x86_64/x64/' | sed 's/aarch64/arm64/')
cp ../noorsigner/noorsigner binaries/*/bun run dev # http://localhost:5173 — vanilla web app, no ElectronProduction:
bun run build # outputs to dist/Officially supported targets:
- macOS Apple Silicon (arm64) — Intel macs are not built by CI
- Linux x64 and arm64
In one terminal:
bun run devIn another terminal:
bun run electron:dev # launches Electron pointing at the Vite dev serverProduction build:
ELECTRON_BUILD=1 bun run build
npx electron-builder --mac --arm64 # macOS Apple Silicon
# or:
npx electron-builder --linux --x64 # Linux x64
npx electron-builder --linux --arm64 # Linux arm64Artifacts land in dist-electron/: .dmg (macOS), .deb / .AppImage / .tar.gz (Linux). The same flow runs in CI via .github/workflows/build-desktop.yml on every v* tag.
Android is not built by CI yet — APKs are produced locally only.
export ANDROID_HOME=~/Library/Android/sdk # macOS
# or:
export ANDROID_HOME=~/Android/Sdk # Linux
bun run build
npx cap sync android
cd android && ./gradlew :app:assembleReleaseThe unsigned APK lands in android/app/build/outputs/apk/release/. See .claude/skills/apk/SKILL.md for the full sign + zipalign + verify flow.
- Frontend: TypeScript, Vanilla JS, SASS
- Desktop: Electron
- Android: Capacitor
- Nostr: NDK (Nostr Dev Kit)
- Build: Vite
- Package Manager: Bun
MIT
