NIPs by PolleramaCommunity NIPs, surfaced by trustConnect
npub1tp4pzuu5fw6...

Music Playlists (Extended)

Published Jun 1, 2026

Music Playlists (Extended)

This spec defines an addressable event kind for publishing music playlists on Nostr. Tracks can be referenced either by Nostr-native coordinates (a tags) or by Podcast Index GUIDs (i tags) — both are valid and may be used together in the same playlist.

Event Kind

  • 34139: Playlist (addressable per NIP-01)

Playlist Event

A playlist is an addressable event containing an ordered list of music tracks.

Format

The .content field is reserved for a track listing — an ordered list of tracks that clients can display as a fallback. It SHOULD use Markdown and include one track per line in playlist order:

# Playlist Title

Artist One - Track Title
Artist Two - Track Title

N tracks

For playlists using only a tags (Nostr-native), .content MAY be omitted since tracks resolve directly via relays.

For playlist descriptions, use the alt and/or description tags — not .content.

Tags

Required:

  • d - Unique identifier for this playlist
  • title - Playlist title
  • alt - Short human-readable description (NIP-31) — used for accessibility and link previews

Optional:

  • description - Longer human-readable description of the playlist
  • image - URL to playlist artwork
  • a - Track references in Nostr-native format 36787:<pubkey>:<d-tag> (multiple, ordered)
  • i - Track and feed references using Podcasting 2.0 GUIDs (multiple, ordered — see [Podcast Index Track References](#podcast-index-track-references))
  • t - Category tags for discovery
  • type - Playlist type (see [Playlist Types](#playlist-types))
  • role - Playlist role (see [Playlist Roles](#playlist-roles))

Example (Nostr-native a tags only)

{
  "kind": 34139,
  "content": "Survival Guide - January Shock\nJune & The Jets - You Sure Did\nBear's Snare - Ocean Breeze\n\n3 tracks",
  "tags": [
    ["d", "summer-vibes-2024"],
    ["title", "Summer Vibes 2024"],
    ["alt", "Playlist: Summer Vibes 2024"],
    ["description", "A hand-picked selection of chill electronic tracks from Summer 2024, curated for late-night listening."],
    ["t", "playlist"],
    ["t", "music"],
    ["type", "ep"],
    ["role", "release"],
    ["image", "https://cdn.blossom.example/img/playlist.jpg"],
    ["a", "36787:abc123...:january-shock"],
    ["a", "36787:def456...:you-sure-did"],
    ["a", "36787:abc123...:ocean-breeze"]
  ]
}

Example (both a and i tags)

{
  "kind": 34139,
  "content": "# Summer Vibes 2024\n\nSurvival Guide - January Shock\nJune & The Jets - You Sure Did\nBear's Snare - Ocean Breeze\n\n3 tracks",
  "tags": [
    ["d", "summer-vibes-2024"],
    ["title", "Summer Vibes 2024"],
    ["alt", "Music playlist: Summer Vibes 2024"],
    ["description", "A hand-picked selection of chill electronic tracks from Summer 2024, curated for late-night listening."],
    ["t", "playlist"],
    ["t", "music"],
    ["type", "ep"],
    ["role", "release"],
    ["image", "https://cdn.blossom.example/img/playlist.jpg"],
    ["a", "36787:abc123...:january-shock"],
    ["a", "36787:def456...:you-sure-did"],
    ["a", "36787:abc123...:ocean-breeze"],
    ["i", "podcast:item:guid:a1b2c3d4-e5f6-7890-abcd-ef1234567890"],
    ["i", "podcast:item:guid:b2c3d4e5-f6a7-8901-bcde-f12345678901"],
    ["i", "podcast:item:guid:c3d4e5f6-a7b8-9012-cdef-012345678902"],
    ["i", "podcast:guid:d7b4abee-1234-5678-9abc-def012345678"],
    ["i", "podcast:guid:e8c5bcff-2345-6789-abcd-ef0123456789"]
  ]
}

Nostr-native Track References

Playlists may reference music tracks using a tags in the format:

["a", "36787:<pubkey>:<d-tag>"]

Where:

  • 36787 is the Music Track event kind (see [Music Tracks](NIP-Music-Tracks.md))
  • <pubkey> is the track author's public key (hex)
  • <d-tag> is the track's unique identifier

a tags resolve by querying Nostr relays for the referenced track events.

Podcast Index Track References

Playlists may additionally reference music tracks using i tags with prefixes from the Podcasting 2.0 namespace:

["i", "podcast:item:guid:<itemGuid>"]
["i", "podcast:guid:<feedGuid>"]

Where:

Item GUID tags SHOULD appear in playlist order. Feed GUID tags MAY appear in any order.

The mapping between items and feeds is implicit. Clients resolve all feed GUIDs, parse each feed, and search across them to match each item GUID.

Resolution

Clients resolve i tags by:

  1. Collecting podcast:guid values from i tags
  2. Looking up feed URLs via a podcast catalogue (e.g., the Podcast Index API [podcasts/byguid](https://podcastindex-org.github.io/docs-api/#get-/podcasts/byguid) endpoint, or any compatible directory)
  3. Fetching and parsing each feed's RSS XML
  4. Matching each podcast:item:guid across all parsed feeds
  5. Falling back to the .content track listing for unresolved items

Playlist Types

The type tag describes the release format:

  • album - A full-length studio album
  • ep - An extended play (typically 4-6 tracks)
  • single - A single track release
  • compilation - A collection of tracks from various sources/artists
  • live - A live recording/performance
  • remix - A remix album
  • soundtrack - Music from a film, game, or other media
  • mixtape - A user-curated or DJ mix
  • demo - A demo recording

Clients MAY use additional values. Unknown values SHOULD be displayed as-is.

Playlist Roles

The role tag describes the playlist's role in the ecosystem:

  • release - An artist's official release (album, EP, single, etc.) (default)
  • curated - A public themed playlist assembled by a single curator
  • personal - A user's private collection, useful for organizing tracks
  • collaborative - A community playlist editable by multiple contributors

When role is omitted, release is assumed.

Implementation Notes

  • Playlists are updatable (addressable events — re-publishing with the same d tag replaces the previous version)
  • a and i tag order are both canonical; clients SHOULD preserve track order when displaying
  • Clients SHOULD handle missing/deleted tracks gracefully — show a placeholder from .content or skip
  • When a feed cannot be resolved (dead URL, removed from index), clients MAY show the corresponding .content line instead
  • When a referenced track is not found via a tags, clients MAY fall back to i tag resolution or skip
  • Use naddr identifiers to link to playlists
  • Playlists support NIP-25 reactions and NIP-22 comments