Skip to content

77elements/noornote

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1,149 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NoorNote

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.

Features

Core

  • 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

Highlights

  • 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

Add-Ons

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.

Get Started

Web: noornote.app — no install needed, use with a browser extension like Alby

Desktop: macOS and Linux downloads on Releases

macOS Note

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

Screenshot

NoorNote Timeline

Privacy & Security

  • 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

Troubleshooting

If the app crashes, check the log files:

System Log Location
Linux ~/.local/share/com.noornote.desktop/logs/
macOS ~/Library/Logs/com.noornote.desktop/

Login Options

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.

NIPs Supported

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 — kind 10000105, consumed from Primal's caching relay for time_joined lookup 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 kind 30003)

Build from Source

Complete guide for building NoorNote (Web, Desktop, Android) and NoorSigner from source.

System Requirements

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_HOME env 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.

Step 1: Clone

git clone https://github.com/77elements/noornote.git
cd noornote
bun install   # or: npm install --legacy-peer-deps  (Linux)

Step 2: Build NoorSigner (Desktop only)

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/*/

Step 3: Web build (Vite)

bun run dev    # http://localhost:5173 — vanilla web app, no Electron

Production:

bun run build  # outputs to dist/

Step 4: Desktop (Electron)

Officially supported targets:

  • macOS Apple Silicon (arm64) — Intel macs are not built by CI
  • Linux x64 and arm64

In one terminal:

bun run dev

In another terminal:

bun run electron:dev   # launches Electron pointing at the Vite dev server

Production 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 arm64

Artifacts 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.

Step 5: Android (Capacitor)

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:assembleRelease

The unsigned APK lands in android/app/build/outputs/apk/release/. See .claude/skills/apk/SKILL.md for the full sign + zipalign + verify flow.

Tech Stack

  • Frontend: TypeScript, Vanilla JS, SASS
  • Desktop: Electron
  • Android: Capacitor
  • Nostr: NDK (Nostr Dev Kit)
  • Build: Vite
  • Package Manager: Bun

License

MIT

Links

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors