What Blossom Is
Blossom stands for "Blobs stored simply on mediaservers." It specifies HTTP endpoints for storing and retrieving binary blobs from publicly accessible servers. Users authenticate with Nostr keys, and clients can discover the user's preferred servers through a replaceable Nostr event.
Core pieces:
- Blob. Binary data addressed by its SHA-256 hash.
- Server. HTTP endpoint that stores and serves blobs.
- Authorization. Nostr-signed authorization events, currently kind
24242in the Blossom specs. - User server list. Nostr replaceable event kind
10063, listing the Blossom servers a user uses. - BUDs. Blossom Upgrade Documents that define endpoints and optional features.
Blossom is not a storage blockchain. It is closer to "Nostr-authenticated object storage with content-addressed URLs."
Protocol Shape
Important endpoints from the BUD specs:
| Endpoint | Purpose |
|---|---|
GET /<sha256> |
Retrieve blob bytes |
HEAD /<sha256> |
Check blob existence and metadata |
PUT /upload |
Upload raw blob bytes |
DELETE /<sha256> |
Delete a blob where policy permits |
PUT /mirror |
Ask a server to mirror a remote blob |
PUT /media |
Media-specific upload / optimization path |
Blob descriptors include:
urlsha256sizetypeuploaded
BUD-02 requires upload servers to hash the exact bytes received. That lets users re-upload the same blob to another server and keep the same identifier.
User Server Lists
BUD-03 defines a Nostr event kind 10063 that advertises the servers a user trusts for their blobs:
{
"kind": 10063,
"content": "",
"tags": [
["server", "https://cdn.self.hosted"],
["server", "https://cdn.satellite.earth"]
]
}
Clients can use this list when the original media URL fails: extract the 64-character SHA-256 hash from the URL, fetch the author's server list, then try the listed Blossom servers in order.
This is the key Nostr-native property: media availability follows the author, not the original CDN URL.
Blossom vs NIP-96 and NIP-94
| Spec | Role |
|---|---|
| Blossom BUDs | HTTP blob server protocol |
| NIP-94 | Nostr file metadata event |
| NIP-96 | HTTP file storage server API for Nostr |
Blossom overlaps with NIP-96 but is intentionally content-hash centered. BUD-08 maps Blossom blobs to Nostr file metadata tags so clients can interoperate with NIP-94-style metadata.
Where It Fits
| Use case | Fit |
|---|---|
| Nostr avatars and images | Strong |
| Podcast clips / short video | Strong if server limits allow |
| Client-portable media posts | Strong |
| Large private backups | Poor; use encrypted object storage |
| Immutable public archive | Pair with Arweave or IPFS |
| High-censorship publishing | Mirror across many Blossom servers plus IPFS/Arweave |
Blossom's practical job is making Nostr media less brittle. It does not remove the need for mirrors, payments, or local encryption.
Threat Model
Blossom improves:
- Integrity. The URL contains a SHA-256 hash; clients can verify bytes.
- Identity binding. Upload and management actions use Nostr-key authorization.
- Portability. Users can advertise several servers and move media across them.
- Mirroring. BUD-04 gives a protocol path for copying blobs between servers.
Blossom does not automatically provide:
- Confidentiality. Blobs are public unless encrypted before upload.
- Guaranteed retention. Each server has its own limits, terms, quotas, and payment policy.
- Anonymity. Uploads and retrievals are HTTP requests visible to servers and network observers unless routed through privacy layers.
- Global replication. Mirroring is explicit client/server behavior, not an automatic swarm.
Operational Pattern
For a robust Nostr media identity:
- Run or pay for a primary Blossom server.
- Publish kind
10063with two or more server URLs. - Upload important media to all listed servers or use BUD-04 mirroring.
- Include NIP-94 metadata for media-rich clients.
- Mirror public high-value artifacts to IPFS or Arweave.
- Strip EXIF and encrypt sensitive files before upload.
Attack Surface
| Attack | Mitigation |
|---|---|
| Server deletes blob | Mirror to several servers; publish kind 10063 |
| Server swaps bytes | Verify SHA-256 from URL / descriptor |
| Key compromise | Rotate Nostr identity or delegate upload keys carefully |
| Metadata leak | Strip EXIF; avoid uploading sensitive media raw |
| Server logs retrievals | Use Tor/VPN or fetch through privacy-preserving clients |
| CDN/domain takedown | Use multiple Blossom servers and content-hash fallback |
Primary Sources
- Blossom specification and BUDs — github.com/hzrd149/blossom
- BUD-01, Server requirements and blob retrieval.
- BUD-02, Blob upload.
- BUD-03, User Server List.
- BUD-04, Mirroring blobs.
- BUD-08, Nostr File Metadata Tags.
- BUD-11, Nostr Authorization.
- Nostr NIPs — github.com/nostr-protocol/nips
Compare the storage and replication choices in Choosing Decentralized Storage and Hypercore and Hyperdrive.
Also in Identity, Social and Trust
Page history
- Updated
- 2026-04-28
- Origin
- Compiled from the ungovernable.tech research notes.
- Improve this page
- Suggest an edit — issues and pull requests are welcome.