{"eid":"github-nostr-protocol","name":"Nostr relays + NIP-94/NIP-96 file metadata","domain":"github.com","resolved_by":"platform","topics":["storage"],"n_records":1,"best_vorder":6,"review":null,"aliases":["Nostr relays + NIP-94/NIP-96 file metadata","Nostr relays + NIP-94/NIP-96 file metadata — index only, not bytes","github.com"],"records":[{"rid":"storage/nostr-relays-nip-94-nip-96-file-metadata-index-only-not","card":{"rid":"storage/nostr-relays-nip-94-nip-96-file-metadata-index-only-not","eid":"github-nostr-protocol","topic":"storage","slug":"nostr-relays-nip-94-nip-96-file-metadata-index-only-not","provider":"Nostr relays + NIP-94/NIP-96 file metadata — index only, not bytes","url":"https://github.com/nostr-protocol/nips/blob/master/94.md","domain":"github.com","category":"nostr-relay","tier":null,"verdict":"fails-quota","vorder":6,"grp":"rejected","confidence":"reported","binding":"per-object-cap","identity_kind":"email","identity_basis":"defaulted","needs_card":null,"needs_phone":null,"needs_id":null,"needs_institution":null,"country":null,"crypto":null,"interfaces":"cli","egress_metered":0,"per_object_bytes":64000,"retention_days":null,"verified_at":"2026-10-21T00:00:00.000Z","verified_basis":"inherited","checked_on":"2026-10-21","stale_on":"2026-11-04","n_evidence":1,"usd_month":null,"usd_per_tb_month":null,"summary":"Zero bytes. NIP-94 is a *metadata* event: `url`, `m` (mime), `size`, `dim`, `i` (torrent infohash), `thumb`. The relay stores the JSON pointer, the file live...","duplicate_of":null,"n_unknown":6},"record":{"topic":"storage","slug":"nostr-relays-nip-94-nip-96-file-metadata-index-only-not","provider":"Nostr relays + NIP-94/NIP-96 file metadata — index only, not bytes","url":"https://github.com/nostr-protocol/nips/blob/master/94.md","category":"nostr-relay","free_tier":{"stated":"Zero bytes. NIP-94 is a *metadata* event: `url`, `m` (mime), `size`, `dim`, `i` (torrent infohash), `thumb`. The relay stores the JSON pointer, the file lives elsewhere.","unit":"mixed","metered_on":"stored-bytes","source_url":"https://raw.githubusercontent.com/nostr-protocol/nips/master/94.md","read_on":"2026-10-21","notes":null},"per_object_cap":{"stated":"per-object-cap = relay event size limit (~64 KB","bytes":64000,"source_url":"https://raw.githubusercontent.com/nostr-protocol/nips/master/94.md","notes":"not stated"},"retention":{"stated":"until the instance is recycled; not persistent","source_url":"https://raw.githubusercontent.com/nostr-protocol/nips/master/94.md","notes":"not stated"},"egress":{"terms":"n/a — relay never serves the file.","metered":false},"interface":["cli"],"interface_detail":"websocket","tooling":"nostr websocket protocol (EVENT/REQ), `nak` CLI. Relays are free and accept arbitrary events, but the event size limit (typ. 64 KB) caps any inline-base64 trick at ~48 KB.","chaining":"Chains with Blossom: NIP-94/NIP-96 events make Blossom blobs discoverable and re-mirrorable. On its own this is not storage.","limits":[{"kind":"per-object-cap","value":"per-object-cap = relay event size limit (~64 KB","source":"https://raw.githubusercontent.com/nostr-protocol/nips/master/94.md"}],"limits_note":"per-object-cap = relay event size limit (~64 KB typical), of which base64 payload is ~75%, so ~48 KB of real data per event — three orders of magnitude short of useful.","identity_cost":{"kind":"email","detail":null,"country":null},"reliability_note":"Relays are ephemeral and freely delete events; free relays exist in the thousands but none is a byte store.","confidence":"reported","confidence_note":"One page read moves it to documented.","evidence":[{"url":"https://raw.githubusercontent.com/nostr-protocol/nips/master/94.md","date":"2026-10-21","proved":"tags are `url`, `m`, `size`, `dim`, `i` (torrent infohash), `thumb`; 'A relay for indexing shared files. For example, to promote torrents.' — confirms metadata-only semantics"}],"verdict":"fails-quota","verified_at":"2026-10-21T00:00:00.000Z","notes":"Zero bytes. NIP-94 is a *metadata* event: `url`, `m` (mime), `size`, `dim`, `i` (torrent infohash), `thumb`. The relay stores the JSON pointer, the file lives elsewhere.","extras":{"verdict_note":"PLAN.md §3.2 rules fails-quota by default, because no row in this set clears 500 GiB per unit for a user.","dead_end":{"failure_class":"quota","why":"Zero bytes. NIP-94 is a *metadata* event: `url`, `m` (mime), `size`, `dim`, `i` (torrent infohash), `thumb`. The relay stores the JSON pointer, the file lives elsewhere.","retry_when":null,"first_recorded":"2026-10-21"}},"binding":"per-object-cap","binding_note":"the per-object cap sets the shard size and therefore the object count; it bounds the total more tightly than any headline quota"},"claims":[{"path":"$.free_tier.stated","kind":"free-quota","num":null,"unit":null,"per":null,"currency":null,"usd":null,"fx_date":null,"parse":"unparsed"},{"path":"$.limits[0].value","kind":"limit:per-object-cap","num":64.0,"unit":"KB","per":null,"currency":null,"usd":null,"fx_date":null,"parse":"ok"}],"unknown":[["$.extras.dead_end.retry_when","process"],["$.free_tier.notes","process"],["$.identity_cost.detail","defaulted"],["$.identity_cost.kind","identity-defaulted"],["$.per_object_cap.notes","not-extracted"],["$.retention.notes","not-extracted"]],"history":[],"drift":[]}]}