Chapter 24 - Profiles
24
Nostr Implementation Possibility - Hex № 24

Extra Metadata Fields and Tags

The community glossary: optional profile fields and shared tags that became de facto standards without a NIP of their own.

1 Overview

Some fields and tags appear in real events but are defined in no NIP. Clients started to use them anyway. They became de facto standards. This NIP keeps track of them.

The NIP has three parts. Part one lists extra fields for the kind-0 user metadata event of NIP-01. Part two lists a deprecated field pattern in the kind-3 follow event of NIP-02. Part three lists four tags that keep the same meaning across many event kinds.

This NIP also collects minor implementation possibilities. These items do not deserve their own NIP. They also have no place in other NIPs. All fields and tags here are optional.

Hint!

Treat this chapter as an appendix to NIP-01 and NIP-02. It defines no new kinds and no new messages. It only names things that clients already write into existing events.

Kind-0 content field map NIP-01 base name - about - picture NIP-24 extras display_name - website - banner - bot - birthday DEPRECATED displayName - username — ignore or remove on sight SHARED TAGS r - i - title - t — same meaning across many kinds
Fig. 24-1 — What this NIP tracks. Extra fields extend the kind-0 object; deprecated fields must be ignored; four tags are shared across kinds.

2 Extra Fields for Kind 0

NIP-01 defines the kind-0 user metadata event. Its content is a stringified JSON object. NIP-01 specifies name, about, and picture. The fields below may also be present in that object. NIP-01 does not specify them.

Extra kind-0 fields
FieldTypeMeaning
display_namestringAn alternative, bigger name with richer characters than name. Set name always, even when display_name is present.
websitestringA web URL related in any way to the event author.
bannerstringA URL to a wide (~1024x768) picture. Clients may display it in the background of a profile screen.
botbooleanStates that the content is entirely or partially the result of automation. Examples: chatbots, newsfeeds.
birthdayobjectThe author's birth date. Format: {"year": number, "month": number, "day": number}. Each field may be omitted.
Kind-0 content object - with NIP-24 extras
{
  "name":         "dami",
  "about":        "I write manuals.",
  "picture":      "https://example.com/avatar.png",
  "display_name": "Dami ⚡ Manual Dept.",
  "website":      "https://example.com",
  "banner":       "https://example.com/banner.png",
  "bot":          false,
  "birthday":     { "month": 4, "day": 1 }   // year omitted
}
Tech Note

The source spec calls banner a "wide" picture but gives ~1024x768 as the example size. That is a 4:3 ratio, which is not wide. Treat the number as a rough size hint, not a required aspect ratio.

Deprecated kind-0 fields

Ignore or remove these fields when you find them in the wild:

Deprecated kind-0 fields
FieldStatusReplacement
displayNamedeprecatedUse display_name instead.
usernamedeprecatedUse name instead.

3 Deprecated Fields for Kind 3

NIP-02 defines the kind-3 follow event. Old clients wrote a relay list into its stringified JSON content. That pattern is now deprecated. Ignore or remove it when found.

Deprecated - kind-3 content relay object
{
  "wss://relay.example.com": { "read": true,  "write": true },
  "wss://other.example.com": { "read": true,  "write": false }
}  // <relay-url> keys map to {"read": <true|false>, "write": <true|false>}
Warning!

Do not publish this relay object anymore. Use a NIP-65 relay list event instead. Reading clients should ignore the object when they parse kind-3 events.

4 Shared Tags

These four tags may be present in multiple event kinds. A more specific NIP can give a tag a different meaning for its own kinds. When no such NIP applies, the tags mean this:

Shared tags
TagValueMeaning
rweb URLA web URL the event refers to in some way.
iexternal idAn external id the event refers to in some way. See NIP-73.
titlestringThe name of a NIP-51 set, a NIP-52 calendar event, a NIP-53 live event, or a NIP-99 listing.
thashtagA hashtag. The value must be a lowercase string.
Tech Note

The t rule constrains only case. It does not say whether the value includes a leading # character or how to handle spaces. In practice clients store the bare word without #. Relays index all four tags because their names are short; see the NIP-01 single-letter indexing rule, which covers r, i, and t but not title.

5 Worked Example

The transcript below shows two events. First a client publishes a full kind-0 metadata event with NIP-24 extras. The content is the stringified object from §2. Then it publishes a kind-1 note that uses the shared r and t tags.

Session transcript - wss://relay.example.com
-- publish profile metadata (kind 0) --
→ ["EVENT", {"id":"7f3a91cc42…","pubkey":"22a12a12…","created_at":1754900000,
     "kind":0,"tags":[],
     "content":"{\"name\":\"dami\",\"about\":\"I write manuals.\",
       \"picture\":\"https://example.com/avatar.png\",
       \"display_name\":\"Dami ⚡ Manual Dept.\",
       \"website\":\"https://example.com\",
       \"banner\":\"https://example.com/banner.png\",
       \"bot\":false,\"birthday\":{\"month\":4,\"day\":1}}",
     "sig":"a4c11f09…"}]
← ["OK", "7f3a91cc42…", true, ""]

-- publish a note that uses shared tags (kind 1) --
→ ["EVENT", {"id":"c09d4a17be…","pubkey":"22a12a12…","created_at":1754900060,
     "kind":1,
     "tags":[["r","https://example.com/spec.pdf"],
             ["t","nostr"],
             ["i","isbn:9780765382030","https://example.com/book"]],
     "content":"Reading the spec again. #nostr","sig":"91bb02de…"}]
← ["OK", "c09d4a17be…", true, ""]
Hint!

The old profile still shows username or displayName? Drop those fields the next time you write the kind-0 event. Clients must ignore them either way.

6 Version History

NIP-24 grows one field at a time, as the community adopts new conventions. Notable changes, newest first:

  • 20252025-08Fixed heading levels in the document. No content change.
  • 20252025-03Added the birthday object for the author's birth date. Every part of it may be omitted.
  • 20242024-11Clarified the purpose statement. A pronouns field was merged by mistake and reverted two days later.
  • 20242024-08Defined the t hashtag tag. Its value must be a lowercase string.
  • 20242024-04Added the i external-id tag, later pointed at NIP-73.
  • 20242024-03Added the bot boolean for automated accounts.
  • 20232023-12Added title as a shared tag for NIP-51, NIP-52, and later NIP-53 and NIP-99 events.
  • 20232023-09Added the kind-3 relay object as a deprecated pattern; NIP-65 replaces it.
  • Origin2023-09-24fiatjaf created the NIP with the extra metadata fields; banner and the deprecated names arrived the same day.

Original Proposal - Credits

Authorfiatjaf
First commit2023-09-24 — “add nip-24: extra metadata fields.”
Statusdraft - optional — clients may adopt any subset of these fields and tags
Source24.md on GitHub - full change history

7 See Also

  • NIP-01 — defines the kind-0 metadata event and its base fields name, about, picture.
  • NIP-02 — defines the kind-3 follow event that carried the deprecated relay object.
  • NIP-65 — the relay list event that replaces the kind-3 relay object.
  • NIP-73 — external content ids, the full spec behind the i tag.
  • NIP-51, NIP-52, NIP-53, NIP-99 — the kinds that use the shared title tag.