NIP-58 Renumbers Profile Badges and Adds Badge Sets
A merged pull request changes which kind number NIP-58's Profile Badges event uses, from 30008 to 10008, and defines a new Badge Sets event at the vacated kind 30008.
Nostr WoT Newsroom
Assembled by the Nostr WoT Newsroom from the cited primary sources, and published automatically without individual human review.
NIP-58 defines how badges work on Nostr: issuers define a badge, award it to pubkeys, and recipients choose which awarded badges to display on their profile. On 2026-04-01, PR #2276, authored by alexgleason and closing issue #2275, merged into the spec and changed which kind number the "Profile Badges" event uses, while also adding a new event kind for grouping badges into sets.
What moved, precisely
Before this PR, the Profile Badges event, the one a user publishes to say "these are the badges I accept and want shown on my profile", was defined as an addressable event at kind 30008, identified by a d tag fixed to the value profile_badges.
After this PR, Profile Badges is a replaceable event at kind 10008, defined as a standard NIP-51 list. It no longer needs a d tag at all, since replaceable events don't require one to be unique per pubkey. The event still contains the same ordered pairs of a and e tags, one pair per badge, referencing the Badge Definition and Badge Award for each badge the user is displaying.
Kind 30008 was not retired. It was reassigned. The PR gives it a new meaning: a "Badge Set" event, an addressable NIP-51 set that lets a user group their accepted badges into labeled categories, each with its own ordered a/e tag pairs pointing at Badge Definitions and Badge Awards.
That reassignment is the part worth being precise about. Kind numbers in Nostr aren't namespaced by NIP: a client or relay that queries for kind 30008 expecting the old Profile Badges format will now get Badge Set events instead, which share a similar tag shape but a different meaning and a different d tag convention (a set identifier chosen by the user, not the fixed string profile_badges). Anything still reading kind 30008 under the old assumption breaks silently rather than erroring, because the event still parses, it just means something else now.
The spec addresses the transition directly. A new "Deprecated Profile Badges event" section states that an earlier version of NIP-58 used a kind 30008 addressable event with a d tag of profile_badges for Profile Badges, and instructs clients to treat those old events as equivalent to the new kind 10008 and migrate to the new format.
Where else the numbers changed
The PR also updates NIP-51 (51.md), the list-and-set NIP that NIP-58 builds on, and the NIP index (README.md), so all three files stay consistent:
51.mdadds kind10008to its table of standard lists as "Profile badges", referencing both the badge definitions (atags to kind 30009) and badge awards (etags to kind 8), plusatags to the new kind 30008 badge sets.51.mdadds kind30008to its table of standard sets as "Badge sets", pointing at kind 30009 badge definitions and kind 8 badge awards.README.md's kind index now lists10008as "Profile Badges" (referencing NIP-51 and NIP-58) and relabels30008from "Profile Badges" to "Badge sets" (now referencing NIP-51 and NIP-58 jointly, where before it only referenced NIP-58).
Kind 30009, the Badge Definition event, and kind 8, the Badge Award event, are unchanged by this PR.
Scope of the change
The PR touched three files, 51.md, 58.md and README.md, with 15 lines added and 10 removed in total. NIP-58 remains marked draft and optional.
Sources
Every claim in this piece links to a primary source.
- NIP-58: change Profile Badges to kind 10008, add kind 30008 Badge sets — nostr-protocol/nips (April 1, 2026)