Skip to content

Blossom specifications ​

Blossom is defined by a set of BUDs (Blossom Upgrade Documents). This page lists which BUDs Almond implements. Deviations from the spec text are documented in detail under Spec deviations.

Support matrix ​

BUDTitleAlmondNotes
00Blossom Upgrade Documents–Meta document
01Server requirements and blob retrieval✅GET/HEAD /<sha256>[.ext], range requests, ETag, Sunset. Operator routes are not CORS-public, and redirect targets are not checked for the required headers (deviations).
02Blob upload and management✅PUT /upload, plus the chunked upload extension and the X-Expiration header
03User Server List✅Client-side spec. Almond reads the ?as= author's kind 10063 list for upstream lookups.
04Mirroring blobs✅PUT /mirror. Mirroring an HLS playlist also mirrors its segments. No MIME sniffing when the origin omits Content-Type.
05Media optimization❌/media is not routed
06Upload requirements✅HEAD /upload
07Payment required⚠️Cashu, behind the cashu feature. The 402 challenge is not NUT-24 creqA, and an insufficient payment returns 402 instead of 400.
08Nostr File Metadata Tags✅Blob descriptors carry nip94
09Blob Report⚠️PUT /report, off by default. Public mode accepts reports without an x tag, and no report rules are published.
10Blossom URI Schema–Client-side only
11Nostr Authorization✅Kind 24242 events; server tag optionally required (ALMOND_AUTH_REQUIRE_SERVER_TAG). Single-use authorizations for delete.
12Blob management endpoints⚠️/list with cursor pagination and DELETE. /list/<pubkey> is not per-uploader, and deleting an absent blob returns 204.

✅ implemented · ⚠️ implemented with deviations · ❌ not implemented · – not applicable to servers

Almond extensions ​

ExtensionDescription
Chunked uploadsResumable PATCH /upload in parts
Blob discovery filterGET /filter lets clients check existence locally with Binary Fuse filters, without revealing hashes
Filter JS decodingHow clients decode and query the /filter response
X-ExpirationLets a client shorten its own upload's lifetime
Local Blossom CacheImplements the upstream local cache profile

Released under the MIT License.