# at.atjam.playlist

> Published by [atjam.at](https://lexicon.garden/identity/did:plc:b5bxdq5jyv3tvkyscu42xr7u)

✓ This is the authoritative definition for this NSID.

## Links

- [View on Lexicon Garden](https://lexicon.garden/lexicon/did:plc:b5bxdq5jyv3tvkyscu42xr7u/at.atjam.playlist)
- [Documentation](https://lexicon.garden/lexicon/did:plc:b5bxdq5jyv3tvkyscu42xr7u/at.atjam.playlist/docs)
- [Examples](https://lexicon.garden/lexicon/did:plc:b5bxdq5jyv3tvkyscu42xr7u/at.atjam.playlist/examples)

## Definitions

### `at.atjam.playlist#item`

**Type**: `object`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `note` | `string` | No | Why this is here — 'the original', 'Round 30 winner'. The curator's voice, which is the part a bare list of tracks loses. |
| `subject` | `ref` → `com.atproto.repo.strongRef` | Yes | Any record. CID-pinned, so an item that changed under you is detectable rather than silent. |

### `at.atjam.playlist`

**Type**: `record`

An ordered list of records, authored by the repo owner. Deliberately knows nothing about music — or about any project type, which is why it lives in atjam: items are strongRefs to records of any collection, so one list can hold owned audio, an external song reference, and a record from an app that did not exist when this was written, with no schema change. A reader that does not recognise an item's collection renders the URI and moves on — that is the property that makes this infrastructure rather than an app's private format. Order is array order: one atomic write, and no ordering field to disagree about.

**Key**: `any`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `items` | `array` | Yes |  |
| `title` | `string` | Yes |  |
| `context` | `ref` → `com.atproto.repo.strongRef` | No | What this list is about — a round, a jam, an event. Lets a page surface lists made about it without anyone registering them. |
| `createdAt` | `string` (datetime) | Yes |  |
| `description` | `string` | No |  |

## Raw Schema

```json
{
  "id": "at.atjam.playlist",
  "defs": {
    "item": {
      "type": "object",
      "required": [
        "subject"
      ],
      "properties": {
        "note": {
          "type": "string",
          "maxLength": 3000,
          "description": "Why this is here — 'the original', 'Round 30 winner'. The curator's voice, which is the part a bare list of tracks loses.",
          "maxGraphemes": 300
        },
        "subject": {
          "ref": "com.atproto.repo.strongRef",
          "type": "ref",
          "description": "Any record. CID-pinned, so an item that changed under you is detectable rather than silent."
        }
      }
    },
    "main": {
      "key": "any",
      "type": "record",
      "record": {
        "type": "object",
        "required": [
          "title",
          "items",
          "createdAt"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "ref": "#item",
              "type": "ref"
            },
            "maxLength": 500,
            "minLength": 1
          },
          "title": {
            "type": "string",
            "maxLength": 5120,
            "maxGraphemes": 512
          },
          "context": {
            "ref": "com.atproto.repo.strongRef",
            "type": "ref",
            "description": "What this list is about — a round, a jam, an event. Lets a page surface lists made about it without anyone registering them."
          },
          "createdAt": {
            "type": "string",
            "format": "datetime"
          },
          "description": {
            "type": "string",
            "maxLength": 30000,
            "maxGraphemes": 3000
          }
        }
      },
      "description": "An ordered list of records, authored by the repo owner. Deliberately knows nothing about music — or about any project type, which is why it lives in atjam: items are strongRefs to records of any collection, so one list can hold owned audio, an external song reference, and a record from an app that did not exist when this was written, with no schema change. A reader that does not recognise an item's collection renders the URI and moves on — that is the property that makes this infrastructure rather than an app's private format. Order is array order: one atomic write, and no ordering field to disagree about."
    }
  },
  "$type": "com.atproto.lexicon.schema",
  "lexicon": 1
}
```
