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.
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.
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.
| Field | Type | Meaning |
|---|---|---|
| display_name | string | An alternative, bigger name with richer characters than name. Set name always, even when display_name is present. |
| website | string | A web URL related in any way to the event author. |
| banner | string | A URL to a wide (~1024x768) picture. Clients may display it in the background of a profile screen. |
| bot | boolean | States that the content is entirely or partially the result of automation. Examples: chatbots, newsfeeds. |
| birthday | object | The author's birth date. Format: {"year": number, "month": number, "day": number}. Each field may be omitted. |
{
"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
}
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:
| Field | Status | Replacement |
|---|---|---|
| displayName | deprecated | Use display_name instead. |
| username | deprecated | Use 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.
{
"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>}
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:
| Tag | Value | Meaning |
|---|---|---|
| r | web URL | A web URL the event refers to in some way. |
| i | external id | An external id the event refers to in some way. See NIP-73. |
| title | string | The name of a NIP-51 set, a NIP-52 calendar event, a NIP-53 live event, or a NIP-99 listing. |
| t | hashtag | A hashtag. The value must be a lowercase string. |
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.
-- 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, ""]
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
birthdayobject for the author's birth date. Every part of it may be omitted. - 20242024-11Clarified the purpose statement. A
pronounsfield was merged by mistake and reverted two days later. - 20242024-08Defined the
thashtag tag. Its value must be a lowercase string. - 20242024-04Added the
iexternal-id tag, later pointed at NIP-73. - 20242024-03Added the
botboolean for automated accounts. - 20232023-12Added
titleas 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;
bannerand the deprecated names arrived the same day.
Original Proposal - Credits
| Author | fiatjaf |
| First commit | 2023-09-24 — “add nip-24: extra metadata fields.” |
| Status | draft - optional — clients may adopt any subset of these fields and tags |
| Source | 24.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
itag. - NIP-51, NIP-52, NIP-53, NIP-99 — the kinds that use the shared
titletag.