Join us

Nostr storage deep dive

Blossom Servers, Relays and Nostr Media Storage

What Blossom servers are, why they are not relays, and how clients use them with Nostr events, relay discovery, hashes, server lists, mirrors and file metadata.

Blossom Servers, Relays and Nostr Media Storage visual
Route The full atlas A searchable shelf for long reads, references, maps and rabbit holes.
Library route

Library map

The whole shelf lives here: source audits, deep research, app maps, NIP references, field guides, long reads and the routes that keep a huge archive actually usable.

LibraryAll Library pages645 pages in this route

Awesome Nostr branches

Awesome Nostr: Blossom Awesome Nostr: Bridges and Gateways Awesome Nostr: Cache services Awesome Nostr: Clients Awesome Nostr: Communities Awesome Nostr: Contributing Awesome Nostr: Databases Awesome Nostr: Deprecated/Defunct Awesome Nostr: Funding Awesome Nostr: Games on Nostr Awesome Nostr: Libraries Awesome Nostr: Most popular Awesome Nostr: NIP-05 identity services Awesome Nostr: NIP-07 Browser extensions Awesome Nostr: NIP-90 Data vending machines Awesome Nostr: NIP-96 File Storage Servers Awesome Nostr: Nostr Web Services (NWS) Awesome Nostr: Offline signers Awesome Nostr: Other links Awesome Nostr: Peer-to-peer markets Awesome Nostr: Podcasts Awesome Nostr: Protocol Awesome Nostr: Recommended reading/watching Awesome Nostr: Related Resources Awesome Nostr: Relays Awesome Nostr: Stats Awesome Nostr: Tools Awesome Nostr: Tutorials Awesome Nostr: Vanity pubkey mining Awesome Nostr: Web of Trust (WOT)

Deep dives

Field guides

AI Agents on Nostr: Nostr Field Guide Analytics: Nostr Field Guide Anti-Algorithm Culture: Nostr Field Guide App Handlers: Nostr Field Guide App Rivalries: Nostr Field Guide App-Specific Data: Nostr Field Guide Archival Relays: Nostr Field Guide Artist Communities: Nostr Field Guide Audio and Voice: Nostr Field Guide Bitcoin Crossover: Nostr Field Guide Bitcoin Relationship: Nostr Field Guide Blossom Storage: Nostr Field Guide Bookmarks: Nostr Field Guide Calendar Events: Nostr Field Guide Censorship Drama: Nostr Field Guide Classified Listings: Nostr Field Guide Client Design Taste: Nostr Field Guide Client Switching: Nostr Field Guide Client Tribes: Nostr Field Guide Comments on Articles: Nostr Field Guide Communities: Nostr Field Guide Community Moderators: Nostr Field Guide Conference Hallway Nostr: Nostr Field Guide Contact Lists: Nostr Field Guide Data Portability: Nostr Field Guide Data Vending Machines: Nostr Field Guide Dating and Social Discovery: Nostr Field Guide Deletion Requests: Nostr Field Guide Deplatforming Stories: Nostr Field Guide Desktop Clients: Nostr Field Guide Direct Messages: Nostr Field Guide Education Workshops: Nostr Field Guide Encryption: Nostr Field Guide Event Access: Nostr Field Guide Expiration: Nostr Field Guide Family and Private Circles: Nostr Field Guide Feed Design: Nostr Field Guide File Metadata: Nostr Field Guide Forks and Schisms: Nostr Field Guide Founder Mythology: Nostr Field Guide Funding Rumors: Nostr Field Guide Gift Wraps: Nostr Field Guide Git on Nostr: Nostr Field Guide Grant Culture: Nostr Field Guide Habla and YakiHonne: Nostr Field Guide Highlights: Nostr Field Guide HTTP Auth: Nostr Field Guide Key Backup: Nostr Field Guide Labels: Nostr Field Guide Legal Risk: Nostr Field Guide Live Activities: Nostr Field Guide Local Meetups: Nostr Field Guide Local Relays: Nostr Field Guide Login with Nostr: Nostr Field Guide Longform Salon: Nostr Field Guide Lurkers and Readers: Nostr Field Guide Maker Launches: Nostr Field Guide Meme Culture: Nostr Field Guide Microfame and Status: Nostr Field Guide Migration Stories: Nostr Field Guide Mobile Clients: Nostr Field Guide Moderation Drama: Nostr Field Guide Mute Lists: Nostr Field Guide Negentropy Sync: Nostr Field Guide NIP-05 Names: Nostr Field Guide NIP-96 Storage: Nostr Field Guide Nostr as a Third Place: Nostr Field Guide Nostr Bars and Venues: Nostr Field Guide Nostr Education: Nostr Field Guide Nostr Fandoms: Nostr Field Guide Nostr Journalism: Nostr Field Guide Nostr Language: Nostr Field Guide Nostr vs ActivityPub: Nostr Field Guide Nostr vs Bluesky: Nostr Field Guide Nostr vs Web3: Nostr Field Guide Nostrich Culture: Nostr Field Guide Notifications: Nostr Field Guide npub Identity: Nostr Field Guide nsec Safety: Nostr Field Guide Old Web Nostalgia: Nostr Field Guide Onboarding: Nostr Field Guide Open-Source Celebrities: Nostr Field Guide Open-Source Funding: Nostr Field Guide Operator Personalities: Nostr Field Guide Outbox Discovery: Nostr Field Guide Paid Relays: Nostr Field Guide Photography Scenes: Nostr Field Guide Polls: Nostr Field Guide Practical Sovereignty: Nostr Field Guide Primal Reads: Nostr Field Guide Privacy Model: Nostr Field Guide Product Shipping Culture: Nostr Field Guide Profile Metadata: Nostr Field Guide Proof of Work: Nostr Field Guide Protected Events: Nostr Field Guide Protocol Maximalism: Nostr Field Guide Pseudonymous Fame: Nostr Field Guide Public Brain: Nostr Field Guide Public Feuds: Nostr Field Guide Purple Pilling: Nostr Field Guide Relay Authentication: Nostr Field Guide Relay Counts: Nostr Field Guide Relay Groups: Nostr Field Guide Relay Management: Nostr Field Guide Relay Moderation: Nostr Field Guide Relay Politics: Nostr Field Guide Remote Signers: Nostr Field Guide Reply Guy Dynamics: Nostr Field Guide Reports: Nostr Field Guide Scene Gossip with Care: Nostr Field Guide Screenshots and Receipts: Nostr Field Guide Search and Indexing: Nostr Field Guide SEO and the Public Web: Nostr Field Guide Signer UX: Nostr Field Guide Social Graph Drama: Nostr Field Guide Spam Defense: Nostr Field Guide Threat Modeling: Nostr Field Guide Topics and Hashtags: Nostr Field Guide Travel and Nostr: Nostr Field Guide User Status: Nostr Field Guide Venue Identity: Nostr Field Guide Web Clients: Nostr Field Guide Web of Trust: Nostr Field Guide Wiki Events: Nostr Field Guide

Research and library

An Empirical Analysis of the Nostr Social Network Awesome Nostr Archive Awesome Nostr Resources Boris Core directory and map research Crays Nostr Archive Library Forbes — Guide to Nostr Habla News Hacker News — Nostr discussions Highlights Lyn Alden — The Power of Nostr my.nostr.com No Bullshit Bitcoin — Primal v2.0 Nostr App and Tool Profiles Nostr Book — Kinds Nostr Compass Nostr Compass Newsletters Nostr Compass Podcast Nostr Design Nostr Design docs Nostr Research Map Nostr.Band Nostr.com Nostr.com Explore Nostr.com indexed Primal Reads note Nostr.com Topics / Articles Nostr.how Nostr.how — Protocol Nostr.how — What is Nostr? Nostr.org Nostrium / read.nostr.com Postr / write.nostr.com Reads and research atlas Reddit r/nostr Registry of Kinds Soapbox — Nostr 101 start.nostr.net The Nostr Book Wikipedia — Nostr

Source inventory

Deep Research: Clients, apps and product surfaces Deep Research: Core maps and gateways Deep Research: Developer stack and tooling Deep Research: Reads, essays and research Deep Research: Relays, infrastructure and storage Deep Research: Security, wallets and trust Deep Research: Standards and NIPs Nostr Deep Research Database Research Map: nostr.co.uk Research Map: nostr.com Research Map: nostr.how Research Map: nostr.net Research Map: nostr.org Research Map: nostrapps.com Research Map: nostrlogin.org Research Source: 0xchat Research Source: 0xchat — NostrApps page Research Source: advanced-nostr-search Research Source: Aegis — NostrApps page Research Source: Alby Research Source: Alby Go Research Source: Alby Hub Research Source: Alby Hub GitHub Research Source: Alby SDK Research Source: Alby — NostrApps page Research Source: Amber Research Source: Amber — NostrApps page Research Source: Amethyst Research Source: Amethyst GitHub Research Source: An Empirical Analysis of the Nostr Social Network Research Source: Android Signer Application Research Source: Android Signer Application Research Source: Application-specific data Research Source: Application-specific data Research Source: Authentication of clients to relays Research Source: Authentication of clients to relays Research Source: Awesome Nostr Resources Research Source: Basic key derivation from mnemonic seed phrase Research Source: Basic key derivation from mnemonic seed phrase Research Source: Basic protocol flow Research Source: Basic protocol flow Research Source: bitvora/wot-relay Research Source: BLE Communications Research Source: BLE Communications Research Source: Blossom Research Source: Blossom Research Source: Blossom GitHub Research Source: Bookstr Research Source: Boris Research Source: Boris — NostrApps page Research Source: Bouquet Research Source: Bouquet — NostrApps page Research Source: Bridged Events Research Source: Bridged Events Research Source: Calendar by Formstr Research Source: Calendar Events Research Source: Calendar Events Research Source: Chachi Research Source: Chachi — NostrApps page Research Source: Chats Research Source: Chats Research Source: Chess Research Source: Chess Research Source: Citrine Research Source: Classified Listings Research Source: Classified Listings Research Source: Code Snippets Research Source: Code Snippets Research Source: Comments Research Source: Comments Research Source: Coracle Research Source: Coracle — NostrApps page Research Source: Corny Chat Research Source: Counting Results Research Source: Counting Results Research Source: Custom Emoji Research Source: Custom Emoji Research Source: Damus Research Source: Damus — NostrApps page Research Source: Data Vending Machines Research Source: Data Vending Machines Research Source: Dealing with Unknown Events Research Source: Dealing with Unknown Events Research Source: Delegated Event Signing Research Source: Delegated Event Signing Research Source: Ditto Research Source: Ditto — NostrApps page Research Source: Docstr Research Source: Draft Events Research Source: Draft Events Research Source: DTAN Research Source: DTAN — NostrApps page Research Source: E2EE Messaging using MLS Research Source: E2EE Messaging using MLS Research Source: Ecash Mint Discoverability Research Source: Ecash Mint Discoverability Research Source: Emojito Research Source: Emojito — NostrApps page Research Source: Encrypted Direct Message Research Source: Encrypted Direct Message Research Source: Event Deletion Request Research Source: Event Deletion Request Research Source: Expiration Timestamp Research Source: Expiration Timestamp Research Source: External Content IDs Research Source: External Content IDs Research Source: External Identities Research Source: External Identities Research Source: Extra metadata fields and tags Research Source: Extra metadata fields and tags Research Source: File Metadata Research Source: File Metadata Research Source: Flotilla — NostrApps page Research Source: Flycat Research Source: Follow List Research Source: Follow List Research Source: Forbes — Guide to Nostr Research Source: Formstr Research Source: Formstr — NostrApps page Research Source: Forum Threads Research Source: Forum Threads Research Source: Fountain Research Source: FreeFrom Research Source: FreeFrom — NostrApps page Research Source: Fundstr Research Source: futr Research Source: futr — NostrApps page Research Source: Geocaching Research Source: Geocaching Research Source: GIF Buddy Research Source: GIF Buddy — NostrApps page Research Source: Gift Wrap Research Source: Gift Wrap Research Source: Gittr Research Source: go-nostr GitHub Research Source: Gossip Research Source: Gossip — NostrApps page Research Source: grain Research Source: Grimoire Research Source: Grimoire — NostrApps page Research Source: Groups NIP-29 Research Source: Habla Research Source: Habla — NostrApps page Research Source: Hacker News — Nostr discussions Research Source: Handling Mentions Research Source: Handling Mentions Research Source: Hello Nostr — Resources Research Source: Highlighter Research Source: Highlights Research Source: Highlights Research Source: HiveTalk Research Source: HORNET Storage — NostrCompass Research Source: HTTP Auth Research Source: HTTP Auth Research Source: HTTP File Storage Integration Research Source: HTTP File Storage Integration Research Source: Iris Research Source: Iris — NostrApps page Research Source: Jumble Research Source: Jumble — NostrApps page Research Source: Keys Band Research Source: Keys Band — NostrApps page Research Source: Khatru Research Source: Labeling Research Source: Labeling Research Source: Listr Research Source: Lists Research Source: Lists Research Source: Live Activities Research Source: Live Activities Research Source: LNBits Nostrmarket Research Source: Lume Research Source: Lumilumi Research Source: LUMINA Research Source: Lyn Alden — The Power of Nostr Research Source: Mapping Nostr keys to DNS-based identifiers Research Source: Mapping Nostr keys to DNS-based identifiers Research Source: Mapstr Research Source: Marmot Protocol Research Source: Meetstr Research Source: Memestr Research Source: Minds Research Source: Moderated Communities Research Source: Moderated Communities Research Source: monstr GitHub Research Source: mostard Research Source: Mostro Research Source: my.nostr.com Research Source: myrelay.page Research Source: nak GitHub Research Source: nak — Nostr Army Knife Research Source: Nalgorithm Research Source: Narr — NostrApps page Research Source: nashboard Research Source: NDK GitHub Research Source: NDK NPM Research Source: Negentropy Research Source: NIP-03: OpenTimestamps Attestations Research Source: NIP-03: OpenTimestamps Attestations Research Source: NIP-07: window.nostr capability for web browsers Research Source: NIP-07: window.nostr capability for web browsers Research Source: NIP-10: Text Notes and Threads Research Source: NIP-10: Text Notes and Threads Research Source: NIP-11: Relay Information Document Research Source: NIP-11: Relay Information Document Research Source: NIP-13: Proof of Work Research Source: NIP-13: Proof of Work Research Source: NIP-14: Subject tag Research Source: NIP-14: Subject tag Research Source: NIP-17: Private Direct Messages Research Source: NIP-17: Private Direct Messages Research Source: NIP-18: Reposts Research Source: NIP-18: Reposts Research Source: NIP-19: bech32-encoded entities Research Source: NIP-19: bech32-encoded entities Research Source: NIP-21: nostr: URI scheme Research Source: NIP-21: nostr: URI scheme Research Source: NIP-25: Reactions Research Source: NIP-25: Reactions Research Source: NIP-27: Text Note References Research Source: NIP-27: Text Note References Research Source: NIP-28: Public Chat Research Source: NIP-28: Public Chat Research Source: NIP-29 Groups Relay Research Source: NIP-29: Relay-based Groups Research Source: NIP-29: Relay-based Groups Research Source: NIP-34: git stuff Research Source: NIP-34: git stuff Research Source: NIP-35: Torrents Research Source: NIP-35: Torrents Research Source: NIP-36: Sensitive Content Research Source: NIP-36: Sensitive Content Research Source: NIP-38: User Statuses Research Source: NIP-38: User Statuses Research Source: NIP-43: Relay Access Metadata and Requests Research Source: NIP-43: Relay Access Metadata and Requests Research Source: NIP-44: Versioned Encryption Research Source: NIP-44: Versioned Encryption Research Source: NIP-46: Nostr Remote Signing Research Source: NIP-46: Nostr Remote Signing Research Source: NIP-49: Private Key Encryption Research Source: NIP-49: Private Key Encryption Research Source: NIP-50: Search Capability Research Source: NIP-50: Search Capability Research Source: NIP-54: Wiki Research Source: NIP-54: Wiki Research Source: NIP-56: Reporting Research Source: NIP-56: Reporting Research Source: NIP-5A: Static Websites / nsites Research Source: NIP-5A: Static Websites / nsites Research Source: NIP-62: Request to Vanish Research Source: NIP-62: Request to Vanish Research Source: NIP-65: Relay List Metadata Research Source: NIP-65: Relay List Metadata Research Source: NIP-66 / nostr-watch stack Research Source: NIP-66: Relay Liveness Monitoring Research Source: NIP-66: Relay Liveness Monitoring Research Source: NIP-68: Picture-first feeds Research Source: NIP-68: Picture-first feeds Research Source: NIP-69: Peer-to-peer Order events Research Source: NIP-69: Peer-to-peer Order events Research Source: NIP-70: Protected Events Research Source: NIP-70: Protected Events Research Source: NIP-77: Negentropy Syncing Research Source: NIP-77: Negentropy Syncing Research Source: NIP-85: Trusted Assertions Research Source: NIP-85: Trusted Assertions Research Source: NIP-86: Relay Management API Research Source: NIP-86: Relay Management API Research Source: NIP-88: Polls Research Source: NIP-88: Polls Research Source: NIP-89: Recommended Application Handlers Research Source: NIP-89: Recommended Application Handlers Research Source: NIP-A0: Voice Messages Research Source: NIP-A0: Voice Messages Research Source: NIP-A4: Public Messages Research Source: NIP-A4: Public Messages Research Source: NIP-B0: Web Bookmarks Research Source: NIP-B0: Web Bookmarks Research Source: NIP-F4: Podcasts Research Source: NIP-F4: Podcasts Research Source: NIPs mirror Research Source: No Bullshit Bitcoin — Primal v2.0 Research Source: Noflux — NostrApps page Research Source: Nos Social Research Source: Nos Social — NostrApps page Research Source: nos2x Research Source: nos2x — NostrApps page Research Source: nosbin Research Source: noscl GitHub Research Source: Nostorg Feature Matrix Research Source: Nostr App Manager Research Source: Nostr Book — Kinds Research Source: Nostr Compass Research Source: Nostr Compass Newsletters Research Source: Nostr Compass Podcast Research Source: Nostr Design Research Source: Nostr Design docs Research Source: Nostr Design — Relays Research Source: Nostr Developer Guide Research Source: Nostr Nests Research Source: Nostr Nests — NostrApps page Research Source: Nostr Playground Research Source: Nostr Relay Tray Research Source: Nostr Watch Research Source: nostr-post-checker Research Source: nostr-protocol/nips GitHub Research Source: nostr-protocol/nostr GitHub Research Source: nostr-rs-relay Research Source: nostr-sdk crates.io Research Source: nostr-sdk-ffi GitHub Research Source: nostr-tools GitHub Research Source: nostr-tools NPM Research Source: Nostr.Band Research Source: nostr.build Research Source: nostr.co.uk Clients Research Source: nostr.co.uk Relays Research Source: Nostr.com Research Source: Nostr.com Explore Research Source: Nostr.com indexed Primal Reads note Research Source: Nostr.how Research Source: Nostr.how — Clients Research Source: Nostr.how — Protocol Research Source: Nostr.how — Relays Research Source: Nostr.how — What is Nostr? Research Source: Nostr.org Research Source: nostr.wine Research Source: nostr.wine/filter-relay Research Source: Nostrability Research Source: NostrApps Research Source: NostrApps category — Audio Research Source: NostrApps category — Career Research Source: NostrApps category — Community Research Source: NostrApps category — Curation Research Source: NostrApps category — Direct Message Research Source: NostrApps category — Discovery Research Source: NostrApps category — File Sharing Research Source: NostrApps category — Group Chat Research Source: NostrApps category — Meatspace Research Source: NostrApps category — Onboarding Research Source: NostrApps category — Signers Research Source: NostrApps category — Tools Research Source: nostrcheck Research Source: nostrdb GitHub Research Source: nostream Research Source: Nostree Research Source: Nostree — NostrApps page Research Source: Nostria Research Source: Nostria — NostrApps page Research Source: Nostrid Research Source: Nostrify Research Source: Nostrium / read.nostr.com Research Source: Nostrmo GitHub Research Source: Nostrmo — NostrApps page Research Source: Nostrube Research Source: noStrudel Research Source: noStrudel — NostrApps page Research Source: Nostter Research Source: Nostur Research Source: Nostur — NostrApps page Research Source: Notedeck Research Source: Npub.pro Research Source: Npub.world Research Source: nsec.app Research Source: Nsite Research Source: Nstart.me Research Source: Nstart.me — NostrApps page Research Source: Obsidian Nostr Writer — NostrApps page Research Source: Olas Research Source: Olas — NostrApps page Research Source: Openvibe Research Source: Oracolo Research Source: Oracolo — NostrApps page Research Source: Ostrich Work Research Source: P2P Band Research Source: Paz Research Source: Peridot Research Source: Peridot — NostrApps page Research Source: Phoenix Research Source: Phoenix — NostrApps page Research Source: Plebeian Market Research Source: Plebeian Market — NostrApps page Research Source: Postr / write.nostr.com Research Source: Primal Research Source: Primal Article Editor / Reads authoring Research Source: Primal Studio Research Source: Primal — NostrApps page Research Source: pynostr GitHub Research Source: python-nostr GitHub Research Source: Reddit r/nostr Research Source: Registry of Kinds Research Source: Relay Setup 101 — Nostr.com Research Source: Relay Tools — NostrApps page Research Source: relay.nostr.net info Research Source: route66 NPM Research Source: rsslay Research Source: rust-nostr docs Research Source: rust-nostr GitHub Research Source: Satellite Research Source: SatShoot Research Source: sesseor raw relay list Research Source: sesseor/nostr-relays-list Research Source: Shakespeare Research Source: Shakespeare — NostrApps page Research Source: Shopstr Research Source: Shopstr — NostrApps page Research Source: Slidestr Research Source: Snort Research Source: Soapbox — Nostr 101 Research Source: start.nostr.net Research Source: Stemstr Research Source: strfry Research Source: The Nostr Book Research Source: Treasures Research Source: Wavlake Research Source: Wikifreedia Research Source: Wikifreedia — NostrApps page Research Source: Wikipedia — Nostr Research Source: Wikistr Research Source: Wikistr — NostrApps page Research Source: YakiHonne Research Source: YakiHonne mobile/web app directory Research Source: Yondar Research Source: Yondar — NostrApps page

Blossom is the missing media-storage chapter many Nostr explanations skip. It is not a social relay and it is not a new feed. A Blossom server is an HTTP blob server for file bytes, while relays remain the place where signed Nostr events are published, discovered and indexed.

The quick readWhat Blossom servers are, why they are not relays, and how clients use them with Nostr events, relay discovery, hashes, server lists, mirrors and file metadata.
Creators bring the protocol into public culture.
Creators bring the protocol into public culture.
The monetization layer should keep the human in the center.
The monetization layer should keep the human in the center.

The short answer

Blossom means blobs stored simply on media servers. In normal language: a Blossom server stores binary files - images, videos, PDFs, audio, encrypted archives, thumbnails or other file bytes - and makes them available through HTTP URLs.

The core rule is content addressing. A blob is identified by the sha256 hash of the exact bytes. That hash is the stable handle. The URL is just one place where those bytes can be fetched. If the same file is mirrored to another server, the hash should still point to the same content.

That is why Blossom matters for Nostr. Nostr relays are good at signed events, subscriptions, author identity, conversations, timestamps and discovery. They are not the right place for heavy media bytes. Blossom moves the bytes out to file servers while the Nostr event keeps the social and cryptographic context.

  • Relay. Stores and serves signed Nostr events over WebSockets.
  • Blossom server. Stores and serves file bytes over HTTP.
  • Nostr event. Says who published, what file is referenced and how to verify or find it.
  • sha256 hash. Lets clients verify that fetched bytes match the expected file.

How one upload works

A client starts with a file. Before upload it can compute the sha256 hash locally. It then chooses a Blossom server, often from the user's BUD-03 server list or from app defaults. If the server requires authorization, the client asks the user's signer for a short-lived Nostr authorization event that scopes the action.

The upload itself is HTTP, not a relay write. BUD-02 defines `PUT /upload`, where the request body is the binary data. A successful server response returns a blob descriptor: public URL, sha256 hash, size, MIME type and upload timestamp. If the server already has the blob, it can return the existing descriptor instead of storing duplicates.

Only after that does the client publish to Nostr relays. The Nostr event can be a normal note, a long-form article, a profile event, a marketplace event, a NIP-94 file metadata event or another app-specific event. That event carries or references the URL, hash, MIME type, dimensions, alt text, fallback sources or imeta-style tags, depending on the client and standard used.

  • 1. Prepare. Client reads the file and computes its hash.
  • 2. Authorize. Signer creates a scoped Blossom auth event when the server requires it.
  • 3. Upload. Client sends the bytes to a Blossom HTTP endpoint.
  • 4. Describe. Server returns the URL, hash, size, type and timestamp.
  • 5. Publish. Client posts a signed Nostr event to relays with the file reference.
  • 6. Fetch. Other clients read the event from relays and fetch the bytes from Blossom.

Where relays fit

Relays still do the Nostr work. They receive signed events, apply relay policy, answer subscriptions and help other clients discover that a file exists. A relay can index the tags, author, event kind, created_at time and conversation context around a file reference.

The relay does not need to download or host the image. It can simply store the event that says, in effect: this pubkey signed this post, this file URL or hash is attached, here are the tags and here is the signature. The media bytes live elsewhere.

This separation makes the network more realistic. Relay operators can manage event spam, paid relay access, local graph behavior and archive policy. Blossom operators can manage storage quota, bandwidth, file moderation, malware scanning, media optimization, deletion policy, payments and mirroring.

  • Relays answer. Who signed this? Where is the event? Which tags and replies connect to it?
  • Blossom answers. Where are the bytes? What hash do they have? Can this user upload, delete or mirror them?
  • Clients combine. Read events from relays, then fetch media through HTTP and verify what they can.

User server lists

BUD-03 defines a replaceable Nostr event, kind `10063`, where a user can advertise the Blossom servers they trust or use. The event contains `server` tags with full server URLs. The order matters because clients should treat the first servers as the most reliable or trusted.

This is the media-storage cousin of relay lists. A relay list helps clients know where to read or write events for a user. A Blossom server list helps clients know where that user's blobs may live, where uploads should go and where missing files can be recovered.

The powerful part is recovery. If a post contains an old URL and that URL no longer works, a client can extract the 64-character hash from the URL, fetch the author's kind `10063` server list from relays, then try each Blossom server for the same hash. If a mirror exists, the file can still load even when the original domain is gone.

  • Kind 10063. A replaceable Nostr event that advertises a user's Blossom servers.
  • Server tags. Each tag points at a Blossom server URL.
  • Ordered trust. Clients should try preferred servers first.
  • Recovery. The same hash can be found on mirrors when one URL disappears.
A big archive only works when every shelf has a clear next door.
A big archive only works when every shelf has a clear next door.
Research feels better when it looks like a working table, not a storage unit.
Research feels better when it looks like a working table, not a storage unit.

NIP-94 and NIP-96

NIP-94 and Blossom solve different parts of the same problem. NIP-94 defines a file metadata event, kind `1063`, with tags such as URL, MIME type, sha256 hash, original hash, size, dimensions, thumbnail, preview, alt text and fallback sources. It is an event format relays can store.

Blossom is the storage and serving side. It gives clients a way to put bytes on HTTP media servers, retrieve them by hash and advertise server preferences. A client can use Blossom to store a file and NIP-94 to publish rich metadata about it through relays.

NIP-96 is adjacent: it defines an HTTP file storage API intended for use with Nostr clients, including discovery through `/.well-known/nostr/nip96.json`. The useful way to explain it in our archive is: NIP-96 and Blossom both keep files out of relays, but Blossom puts stronger emphasis on hash-addressed blobs, BUD documents, user server lists and Nostr authorization.

  • NIP-94. Metadata event for describing files inside the Nostr event graph.
  • Blossom. HTTP blob storage and retrieval by content hash.
  • NIP-96. Another Nostr-oriented HTTP file-storage API.
  • route96. A real implementation reference that touches Blossom and NIP-96 territory.

Authorization and security

A public Blossom URL is not privacy. If the URL or hash is known, clients should assume the blob can be fetched unless the server adds access controls. For private records, private media, member documents or wallet-adjacent material, the right pattern is to encrypt before upload and only publish safe metadata.

BUD-11 defines Nostr authorization tokens. These are signed events of kind `24242` that prove a pubkey allowed an action such as upload, list, delete or media handling. They can include expiration, action tags, server scope and hash scope. This keeps a web app from asking for the user's raw private key while still letting a server verify intent.

Hash verification protects integrity, not secrecy. If the expected sha256 hash is in the event, a client can check that downloaded bytes match the referenced file. That does not stop metadata leaks, EXIF leaks, public URL sharing or server-side moderation. Serious deployments still need file scanning, quotas, takedown process, retention rules and careful UX.

  • Encrypt first. Private blobs should be encrypted before upload.
  • Verify hash. Clients can compare downloaded bytes against the expected sha256.
  • Limit auth. Authorization should be short-lived and scoped to the exact action.
  • Strip metadata. Images and documents can leak EXIF or author data.
  • Mirror wisely. More availability can also mean wider exposure if the blob is public.

How this fits our infrastructure

For our stack, the clean mental model is simple: a venue or Super Node can run a relay and a Blossom server side by side, but they are separate responsibilities. The relay handles signed member, creator, venue, event, payment, governance and reputation signals. The Blossom server handles media bytes, encrypted originals and large file transfer.

That split is useful for hospitality and creators. Profile images, venue photos, event galleries, creator media, paid content previews, encrypted Safebox records, receipts, award assets and local community files should not bloat relays. They should be referenced by Nostr events and fetched from storage that can be operated, mirrored and paid for deliberately.

A practical Crays node could therefore include a relay, a Blossom server, a signer-friendly auth flow, an indexer, a wallet/payment path and operator tools. Users would not need to know every layer. They should feel one experience: publish, prove, access, pay, recover and move.

  • Super Node relay. Event routing, local graph, paid relay policy and signed history.
  • Blossom server. Media storage, encrypted blob transfer, quotas and mirroring.
  • Signer. Scoped authorization without exposing private keys to the web app.
  • Indexer. Search and discovery over event metadata, not raw file hosting.
  • Wallet. Paid storage, creator access, zaps or member entitlements.

What to remember

If a reader remembers only one sentence, make it this: relays move and index the signed story; Blossom servers store and serve the heavy bytes. They are complementary infrastructure, not replacements for each other.

That distinction also keeps product language honest. A bad media experience is often not a Nostr failure in the abstract. It can be a storage server, mirror, URL, hash, metadata, relay discovery or client fallback problem. Once we name the layers, we can fix the right layer.

  • Do not store big files in relays. Use relays for signed events and discovery.
  • Do not trust URLs blindly. Use hashes and fallback sources when possible.
  • Do not call Blossom a relay. It is HTTP blob storage for the Nostr ecosystem.
  • Do design for recovery. Server lists and mirrors make media less brittle.

Research sources

Back to the Crays Nostr page