Community

NIPs

NIP-38: User Statuses

NIP-38 is the lightweight live-status standard: addressable kind 30315 events for what someone is doing, listening to or temporarily pointing people toward.

NIP-38: User Statuses 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 mediadraftoptionalstatus

NIP-38: User Statuses

NIP38Statusdraft / optionalStatus eventkind 30315Common d tagsgeneral, musicRelated tagsr, p, e, a, expirationDisplay surfaceprofiles, posts, music and live context

The small sign beside a user's name

NIP-38 gives Nostr a way to publish a live status without changing a user's profile metadata or writing a normal post. It is the little piece of context beside a name: working, out of office, at a live room, listening to a track, promoting an event or pointing people at something happening now.

The standard is useful because status is not the same as biography. Profile metadata needs to be stable. A status needs to be temporary, addressable and easy to replace. NIP-38 uses kind 30315, an addressable event, with the d tag as the status type.

The value is product-level. A music app can publish what a user is listening to. A calendar app can show a meeting state. A live-audio app can point to the room someone joined. A client can display it next to a username without forcing every status into the main timeline.

Kind 30315, status types and optional links

The event kind is 30315. The d tag names the type. The standard defines two common values: general and music. Other status types are allowed, but the NIP does not define their meaning.

The content field holds the human-readable status. It can be plain text, emoji or NIP-30 custom emoji. An empty content string tells clients to clear the status. The event may include r, p, e or a tags to link to a URL, profile, note or addressable event.

Expiration is especially important for music. A music status needs to expire when the track ends. That keeps the feature from becoming stale and misleading. Without expiration, a live status becomes an old profile slogan.

A social-status NIP that followed addressable-event language

NIP-38 was first visible in 2023 and later absorbed the broader language shift from parameterized replaceable events to addressable events. Asai Toshiya's 2024 update moved the content explanation into the live-status section, and Yoji Shidara fixed heading levels in 2025.

Those are not dramatic changes, but they show the standard maturing into the ordinary event model. A status is not a special account field. It is an addressable event whose current version can be selected by kind, pubkey and d tag.

The use-case list in the official source remains the best clue to the product intent: calendar apps, Nostr Nests, music streaming, podcast listening and system media players. NIP-38 is about ambient context, not permanent identity.

Addressable rename2024 updates aligned wording with addressable eventsSource cleanup2025 heading-level fix after broader NIP formatting workOpen Git history

Good status UX is mostly about expiry and restraint

A client implementing NIP-38 needs to display statuses in places where small context helps: profile headers, beside usernames, in live rooms or in contact lists. It must not turn status events into noisy timeline posts unless the user explicitly wants that.

Status type handling needs to be conservative. general and music can get first-class treatment. Unknown status types can still be shown, but clients need to avoid inventing global meaning where the standard does not define one.

The expiry path is the real product test. A music app that posts a track status and never clears it makes the standard feel broken. A calendar app that publishes a meeting status needs to know when to remove or replace it.

kind 30315Addressable event for the current status under a user's key.
d tagDefines the status type, commonly general or music.
Linksr, p, e and a tags can point to URLs, people, notes or addressable events.
ExpirationTemporary statuses need expiration or explicit clearing to stay honest.

Live context gets stale fast

The obvious risk is staleness. A status that says someone is listening to a track, attending a room or working on a project loses meaning quickly. Clients need to treat old status events with suspicion unless expiration or replacement behavior is clear.

There is also a privacy edge. A live status can reveal routine, location-adjacent behavior, relationships or media habits. NIP-38 makes sharing possible; it must not make clients publish status automatically without a user's informed choice.

Read NIP-38 in the wild

NIP-38 handles user status. A status is not a biography and not a normal post; it is a temporary signal such as what you are doing, listening to or pointing people toward.

The product question is expiry. A music status after the track ends or an away status from last month becomes misinformation. Clients need to treat status as live context, not profile decoration.

What changes when you actually use it

For you, NIP-38: User Statuses 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 kind 30315, draft, kind:30315, d, p, e decide whether the object carries enough context to survive.

What changes for builders and operators

For builders, NIP-38: User Statuses 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

The official file is organized around Abstract, Live Statuses, Client behavior, Use Cases. Inspect kind 30315, draft, kind:30315, d, p, e, a, content because these are the pieces most likely to surface as product behavior. Read it beside NIP-30 before treating it as isolated.

NIP-38: User Statuses 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-38: User Statuses 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-38: User Statuses 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-38: User Statuses 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-30 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-38: User Statuses 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-38: User Statuses 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-38: User Statuses 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 kind 30315, draft, kind:30315, d, p, e. 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-30 Custom Emoji, NIP-40 Expiration Timestamp, Nostrbook kinds. Use those links to move from the spec to live libraries, mirrors, pull requests, guides or products.

Official NIP-38 source is the anchor for exact wording, and NIP-38 commit history shows how that wording moved over time. The strongest secondary clues here are NIP-30 Custom Emoji, NIP-40 Expiration Timestamp, Nostrbook kinds. 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-38: User Statuses: first the human promise, then kind 30315, draft, kind:30315, d, p, e, then the implementation record, then the real-world failure case. That order keeps NIP-38 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 kind 30315, draft, kind:30315, d to render the work without private context?

What to verify before you rely on it

  • Find kind 30315, draft, kind:30315, d, p in the official file and check where the UI exposes the same concept.
  • Read NIP-30 as context before treating NIP-38 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-38: User Statuses in that order: Official NIP-38 source for the current wording; NIP-38 commit history for the change record; NIP-30 Custom Emoji, NIP-40 Expiration Timestamp, Nostrbook kinds 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