Community

NIPs

NIP-36: Sensitive Content

NIP-36 defines the content-warning tag: a small author-side warning that lets clients hide sensitive events until you chooses to open them.

NIP-36: Sensitive Content visual
NIPs Under the hood Events, NIPs, relay behavior and the shared formats apps can trust.
Back to Nostr
NIPs Open NIP map Deep guidesConcepts, NIP pages and source checks BrowseClose
Publishing and mediadraftoptionalcontent warning

NIP-36: Sensitive Content

NIP36Statusdraft / optionalCore tagcontent-warningRelated labelsNIP-32 L and l tagsFirst visible source2022-12-01 by Fernando Lopez GuevaraMain limitWarning tag, not privacy or deletion

A small consent layer for public content

NIP-36 is not a moderation system. It is a consent cue. An author can add a content-warning tag to an event, optionally with a reason, and a client can hide the content until you decides to open it.

That is useful because Nostr has no central feed owner that can impose one global sensitivity policy. A public protocol still needs you controls. Content warnings let authors signal that a post may be disturbing, adult, graphic, political, spoiler-heavy or otherwise better behind a click.

The standard is deliberately small. It does not define a taxonomy of all sensitive material. It gives clients a tag to recognize and leaves communities free to build richer label systems on top.

The content-warning tag and its relationship to labels

The tag shape is simple: ["content-warning", "optional reason"]. The reason can be empty or omitted. A client that respects the tag can blur, collapse or hide the event until you acts.

NIP-36 also points to NIP-32 labels. An event may include L and l tags in the content-warning namespace or another namespace. That matters when a client wants queryable or more specific warnings, such as a standardized label vocabulary rather than freeform text.

The example in the official source shows both styles at once: a direct content-warning tag and label tags. That is the right mental model. NIP-36 is the quick you cue; NIP-32 is the broader annotation system.

From basic warning tag to label-aware warning

The file entered the repository through Fernando Lopez Guevara's 2022 content-warning proposal. Jonathan Staab's 2023 updates connected NIP-36 to the label work in NIP-32, which made the standard less isolated and more useful for clients that want queryable moderation metadata.

Later changes mostly cleaned formatting and removed old author metadata. That quiet history fits the standard. NIP-36 is not trying to be a grand governance layer. It is a small tag that becomes more useful when clients actually respect it.

The important change is conceptual: content warnings must not be read as only a creator courtesy. They are also a bridge into client-side moderation and user preference. You can choose to see less surprise without depending on one platform's moderation team.

First visible file commit2022-12-01 by Fernando Lopez GuevaraNIP-32 link2023 updates connected warnings to label tagsOpen Git history

The client decision happens at display time

A client implementing NIP-36 needs to decide how the warning behaves visually. It can blur the content, collapse it into a warning row, hide media previews, or show the reason and an open button. The important part is that you is not surprised by content the author marked as sensitive.

The tag also belongs in search and feed policy. A user may want to show all warnings, hide all warnings, open some namespaces, or trust labels from certain people. That is where NIP-36 meets NIP-32 and the broader moderation stack.

The standard must not be oversold. A content warning does not prevent relays, crawlers or other users from downloading the event. It does not encrypt anything. It is a presentation signal for clients and people.

Author signalThe event carries content-warning, optionally with a reason.
Client behaviorThe client hides or softens display until you chooses to open it.
Label bridgeNIP-32 labels can make warnings queryable or more specific.
BoundaryThis is not encryption, deletion, access control or legal moderation.

Warnings only work when clients and authors act in good faith

The first risk is underuse. If authors do not apply warnings, people receive no protection. The second is overuse or weaponized labeling, where ordinary content is buried under warnings to reduce visibility. NIP-36 alone cannot settle that social layer.

The third risk is false privacy. A hidden post is still public. A warning protects you experience, not confidentiality. That distinction needs to be clear in any product UI that uses the tag.

Read NIP-36 in the wild

NIP-36 gives sensitive content a warning surface. It is not a moral court; it is a way for an author or tool to say that a viewer may want context before opening an event.

The value is humane display. The risk is overreach. If warnings become hidden moderation labels, show who applied them and why. If authors self-label, make that visible too.

What changes when you actually use it

For you, NIP-36: Sensitive Content is felt when a post becomes a durable object: article, file, image, video, audio, bookmark, wiki entry or source reference. The question is whether the work still makes sense after one app, host or relay disappears. The concrete pieces draft, content-warning decide whether the object carries enough context to survive.

What changes for builders and operators

For builders, NIP-36: Sensitive Content is context preservation. Store enough title, tag, author, hash, URL, media, preview and reference material that another interface can rebuild the object. If your feature depends on a private database to make sense, the NIP is not doing the portability work yet.

What the official file makes concrete

Inspect draft, content-warning because these are the pieces most likely to surface as product behavior. Read it beside NIP-32 before treating it as isolated.

NIP-36: Sensitive Content protects context. Titles, media, hashes, source links, timestamps and references decide whether work survives beyond one app.

Where it breaks

The failure mode in NIP-36: Sensitive Content is link rot with a nice interface. Media disappears, metadata lies, source URLs change, hashes are missing or an article loses its addressable identity. The page needs to make durability part of the feature, not an afterthought.

Where this appears outside the markdown

In the ecosystem, NIP-36: Sensitive Content is part of the creator and archive layer. It decides whether writing, media, files, bookmarks, wiki material or source references remain understandable after the first app disappears. That is why media standards need to talk about storage, provenance and recovery, not only presentation.

The nearby-standard trap

The nearby-standard trap in NIP-36: Sensitive Content is flattening every creative object into a note with a link. Articles, videos, files, torrents, highlights, images, wiki entries and bookmarks carry different metadata and storage pressure. Read NIP-32 so the product does not throw away the part that made the object portable.

Language that keeps the feature honest

Good product copy for NIP-36: Sensitive Content names the object and the storage. It says article, file, image, video, bookmark, wiki page, torrent, highlight or podcast episode, then tells you where the signed metadata ends and where external hosting begins.

What this page does not promise

NIP-36: Sensitive Content does not guarantee that published work survives forever. It can carry richer metadata, hashes, references or addressability, but files still need hosts, relays still need retention, and clients still need to render the object faithfully. Treat the NIP as the signed map of the work, then check where the actual bytes, previews and source links live.

Read it as a field test

Start NIP-36: Sensitive Content with the object you want to keep: article, file, media, bookmark, repository, torrent, wiki entry or podcast episode. Then trace which parts are signed, which parts are hosted, and which parts another client can reconstruct from draft, content-warning. That is the difference between portable publishing and a pretty link preview.

Where the standard earns trust

The source links give you places to test the interpretation in public: NIP-32 Labeling, nips.nostr.com NIP-36, Nostrbook tags. Use those links to move from the spec to live libraries, mirrors, pull requests, guides or products.

Official NIP-36 source is the anchor for exact wording, and NIP-36 commit history shows how that wording moved over time. The strongest secondary clues here are NIP-32 Labeling, nips.nostr.com NIP-36, Nostrbook tags. Treat this evidence chain as part of the article, not as footnotes. A NIP page becomes useful when you can move from claim to source to working behavior without guessing.

Keep the chain visible for NIP-36: Sensitive Content: first the human promise, then draft, content-warning, then the implementation record, then the real-world failure case. That order keeps NIP-36 useful without turning it into marketing copy or protocol trivia.

Three questions to carry forward

  • Where do the signed metadata and the actual media or file bytes part ways?
  • Can the object still be identified by hash, address, title, author and source if the first URL breaks?
  • Does a second client know enough from draft, content-warning to render the work without private context?

What to verify before you rely on it

  • Find draft, content-warning in the official file and check where the UI exposes the same concept.
  • Read NIP-32 as context before treating NIP-36 as a complete product story.
  • Open at least one implementation, mirror, pull request or library source from the source links before trusting that the idea is mature.
  • Test the unhappy path: missing relays, stale metadata, invalid signatures, blocked events, expired state, revoked permissions or unavailable media.
  • Write the user-facing copy in plain language. If a standard changes authority, privacy, money, moderation or recovery, say that before the click.

Direct sources

Use these sources for NIP-36: Sensitive Content in that order: Official NIP-36 source for the current wording; NIP-36 commit history for the change record; NIP-32 Labeling, nips.nostr.com NIP-36, Nostrbook tags for public context. The article gives you the consequence in plain language, but the source trail is where exact fields, status notes, unresolved debates and implementation proof stay checkable.

Back to the NIP hub
NIPs route visual cue 1
NIPs route visual cue 2
NIPs route visual cue 3
NIPs route visual cue 4
NIPs route visual cue 5