NIP-96: HTTP File Storage
Our archive page for NIP-96, explaining what it does, where it fits in Nostr and why it matters for identity, apps, relays and real-world systems.
NIP-96 describes an HTTP file storage integration intended to work alongside Nostr.


What it standardizes
It separates file upload and retrieval from WebSocket relay traffic. The broader point is that media storage can be adjacent to Nostr rather than inside every relay.
The important thing to understand is that NIP-96 is not an app feature by itself. It is a shared convention. A client, relay, wallet, signer or adjacent service can implement the convention, ignore it, implement only part of it, or hide it behind a simpler user experience.
That is why a NIP page needs two layers: the technical shape builders must respect, and the product consequence a normal reader can feel.
- Protocol layer. NIP-96 defines a pattern for interoperable behavior, not a closed product.
- Interoperability. The value is that different apps can understand the same signed data or request shape.
- Optionality. Support can vary by client, relay and service, so products need fallbacks and clear messaging.
Data shape and moving parts
A storage server exposes HTTP endpoints. Clients upload media and then reference resulting URLs through Nostr events.
In the nip-96-file-storage chapter, Read the moving parts in this order: who signs, what object is created, which fields or tags carry meaning, where the object is published, what relays or services have to support it, and how a second client can verify or interpret the result later.
In the nip-96-file-storage chapter, This sequence matters because Nostr problems often look like UX problems at the surface while the real failure is lower down: a missing tag, a relay policy mismatch, a signer permission, a stale relay list, a wallet limit, an unsupported event kind or an indexer that never saw the event.
- Signer boundary. Which key signs the event or request, and should a dedicated signer handle it?
- Relay boundary. Does the relay merely store/forward, or must it enforce authentication, search, policy or retention?
- Client boundary. What must the user see so the feature feels understandable instead of protocol-shaped?
- Fallback boundary. What happens when another app, relay or wallet does not support this convention yet?
Product consequence for us
We can combine storage, file metadata and content access for creator media without forcing relays to become general media hosts.
For us, NIP-96 matters only when it improves a real flow: identity, publishing, access, value transfer, media, venue context, reputation, moderation, governance or developer operations. If it does not help one of those flows, it can stay in the archive until the product need is real.
In the nip-96-file-storage chapter, The user should not have to memorize the NIP number. The product should translate the convention into plain actions: verify a profile, sign safely, publish content, receive a zap, connect a wallet, prove status, enter a space, vote, or recover context across apps.
- Crays. Profiles, creator pages and social proof need portable identity rather than a closed account table.
- Crays World. Real venues need local context, member state, reputation and payments that can survive app changes.
- Governance path. Future governance needs signed identity, membership context and auditable participation signals.
Risks, edge cases and implementation discipline
The NIP is marked unrecommended in favor of newer work, so production systems should verify current status before committing to it.
In the nip-96-file-storage chapter, The edge cases are where a standard becomes a product decision. A feature can be technically valid and still confuse users, leak metadata, create moderation problems, increase key exposure, break search, overload relays or make payments feel unreliable.
Before shipping anything based on NIP-96, test current client support, relay behavior, signer permissions, failure states, abuse cases and the exact words shown to a non-technical user. If the wording cannot be made simple, the implementation is probably not ready for a mainstream Crays surface.
- Do not overpromise. A NIP gives a shared format. It does not magically solve onboarding, moderation, UX or custody.
- Keep private keys away. Any feature that increases private-key exposure increases the attack surface.
- Make support visible. A reader should know whether the feature works everywhere, only in some clients, or only with specific relays/services.
- Use plain language. Most users need outcomes: login, pay, publish, vote, prove status, access a venue.
What this standard changes
NIP-96: HTTP File Storage belongs to the protocol standards layer. The page should help you answer one concrete question instead of forcing you through a generic Nostr essay.
The short version is: our archive page for NIP-96, explaining what it does, where it fits in Nostr and why it matters for identity, apps, relays and real-world systems. The deeper version is to see which concept, standard, product surface or human decision actually changes because of it.


Who has to implement it
The useful machinery around NIP-96: HTTP File Storage is event kinds, tags, relay behavior, client support and backwards compatibility. Name those moving parts directly, because vague protocol language is where confusion starts.
In the nip-96-file-storage chapter, A strong page gives you enough context to recognize the term in another client, NIP, relay policy, wallet prompt or source document without pretending every reader is already a protocol engineer.
- Status. Is the NIP mandatory, optional, draft, final or unrecommended?
- Layer. Client, relay, signer, wallet, media server or indexer?
- Adoption. Where can you verify support?
Event, tag or service surface
Test NIP-96: HTTP File Storage by asking what is signed, where it is stored, who renders it, which relays or services are involved and what survives when the first app or server is unavailable.
In the nip-96-file-storage chapter, That test keeps the explanation tied to reality. It also tells us which internal links belong in the body: foundations first, then standards, then practical examples.
Compatibility and adoption
In the nip-96-file-storage chapter, The main risk is that support can vary between clients and relays, so the feature may feel real in one place and missing in another. The page should say that plainly and then show the safer reading: what works today, what is experimental and what needs source verification.
In the nip-96-file-storage chapter, This is where dense content beats long content. Give the reader facts, constraints, examples and next steps instead of repeating broad claims about openness or decentralization.
Product risk
For us, NIP-96: HTTP File Storage matters only when it improves understanding or helps a real flow: identity, publishing, relay choice, signing, payment, media, moderation, commerce, venue context or governance.
In the nip-96-file-storage chapter, That does not mean every page has to become our product pitch. It means the page should make the connection visible when the topic affects our ecosystem, and stay purely educational when it does not.
Neighboring standards
The best next step from NIP-96: HTTP File Storage is not a generic link pile. Connect it to the closest prerequisite, the closest technical standard and the closest practical example.
In the nip-96-file-storage chapter, A large archive becomes useful when every page behaves like a node in a knowledge graph: this explains one thing, points to what it depends on and shows where the idea is used.
