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
| Free tier | 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. unit mixed; metered on stored-bytes |
|---|---|
| Price | none stated |
| Per-object cap | per-object-cap ~1 MB (1000000 bytes) |
| Retention | not stated |
| Egress | free and unmetered on all three. |
| Identity | anonymous anonymous |
| Limits |
per-object-cap ~1 MB on the most generous relays, 128 KB on nos.lol. 1 TiB would be ~1.4 million events. |
| Binding | per-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 |
| Interface | unknown WebSocket, NIP-01 REQ/EVENT; NIP-94 kind 1063 carries file *metadata* only. |
| Tooling | nak, nostr-tools, any relay client. Blobs are pinned by sha256+url in tags; the bytes live elsewhere (Blossom). |
| Composes with | base64 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. |
| Reliability | relays 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. |
| Notes | 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. |
| Evidence rung | reported One page read moves it to documented. |
| Checked | 2026-10-21 (inherited); stale on 2026-11-04 |
| Parsed numbers |
|
Evidence (5)
| date | source | what it proved |
|---|---|---|
| 2026-10-21 | relay.damus.io/ | with Accept: application/nostr+json — literal: max_message_length 1000000, max_subscriptions 200, payment_required None, auth_required None |
| 2026-10-21 | nos.lol/ | max_message_length 131072, max_subscriptions 100 |
| 2026-10-21 | relay.primal.net/ | max_message_length 1000000, max_subscriptions 20 |
| 2026-10-21 | nips.nostr.com/94 | NIP-94 defines kind 1063 file metadata with url/mime/sha256/size tags — metadata, not bytes |
| 2026-10-21 | github.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_whenprocess$.free_tier.notesprocess$.interfaceinterface-unknown$.per_object_cap.notesnot-extracted$.retention.notesnot-extracted$.retention.statednot-extracted