fshy

fshy / Storage

Nostr relays as blob transport

nostr.com · Storage · 1 record · JSON

Nostr relays as blob transport (event path, not Blossom) Storage

fails: quotaanonymousno cardRper-object-cap

nips.nostr.com/94 · signalling-only · storage/nostr-relays-as-blob-transport · JSON · compare

Free tierno storage quota, but a hard per-event size ceiling that is the real limit. Probed NIP-11 limitation.max_message_length: relay.damus.io 1,000,000 bytes; relay.primal.net 1,000,000 bytes; nos.lol 131,072 bytes. No payment_required, no auth_required on any of the three.
unit mixed; metered on stored-bytes
Pricenone stated
Per-object capper-object-cap ~1 MB (1000000 bytes)
Retentionnot stated
Egressfree and unmetered on all three.
Identityanonymous anonymous
Limits
  • per-object-cap per-object-cap ~1 MB source
per-object-cap ~1 MB on the most generous relays, 128 KB on nos.lol. 1 TiB would be ~1.4 million events.
Bindingper-object-cap the per-object cap sets the shard size and therefore the object count; it bounds the total more tightly than any headline quota
Interfaceunknown WebSocket, NIP-01 REQ/EVENT; NIP-94 kind 1063 carries file *metadata* only.
Toolingnak, nostr-tools, any relay client. Blobs are pinned by sha256+url in tags; the bytes live elsewhere (Blossom).
Composes withbase64 in tags costs 4/3 the payload, so a 1 MB message cap is ~750 KB of useful bytes. This is the same failure shape as the GitHub-repo-as-blob-store dead end already recorded in 1.2.
Reliabilityrelays can be paid-gated (NIP-11 payment_required) and prune old events; several now require auth for writes. Correct use is metadata only, which is exactly what NIP-94 defines.
Notesno storage quota, but a hard per-event size ceiling that is the real limit. Probed NIP-11 limitation.max_message_length: relay.damus.io 1,000,000 bytes; relay.primal.net 1,000,000 bytes; nos.lol 131,072 bytes. No payment_required, no auth_required on any of the three.
Evidence rungreported One page read moves it to documented.
Checked2026-10-21 (inherited); stale on 2026-11-04
Parsed numbers
  • $.limits[0].value limit:per-object-cap 1.0 MB
Evidence (5)
datesourcewhat it proved
2026-10-21relay.damus.io/with Accept: application/nostr+json — literal: max_message_length 1000000, max_subscriptions 200, payment_required None, auth_required None
2026-10-21nos.lol/max_message_length 131072, max_subscriptions 100
2026-10-21relay.primal.net/max_message_length 1000000, max_subscriptions 20
2026-10-21nips.nostr.com/94NIP-94 defines kind 1063 file metadata with url/mime/sha256/size tags — metadata, not bytes
2026-10-21github.com/renostr/nrps/blob/master/nrp-1.md'the total size of the event can't be larger than 50 267 340 bytes (~50 MB)' as an upper protocol bound, far above what any public relay accepts
More fields (1)
{
 "dead_end": {
  "failure_class": "quota",
  "why": "no storage quota, but a hard per-event size ceiling that is the real limit. Probed NIP-11 limitation.max_message_length: relay.damus.io 1,000,000 bytes; relay.primal.net 1,000,000 bytes; nos.lol 131,072 bytes. No payment_required, no auth_required on any of the three.",
  "retry_when": null,
  "first_recorded": "2026-10-21"
 }
}
Unknown or withheld values (6)
  • $.extras.dead_end.retry_when process
  • $.free_tier.notes process
  • $.interface interface-unknown
  • $.per_object_cap.notes not-extracted
  • $.retention.notes not-extracted
  • $.retention.stated not-extracted