content surface · pds · lexicon-agnostic
<atproto-record-list>
Browse every record in any collection. Custom lexicons included — no dedicated component required.
Live
<!-- browse a user's follow records -->
<atproto-record-list src="pfrazee.com" collection="app.bsky.graph.follow"></atproto-record-list>
<!-- browse a custom lexicon -->
<atproto-record-list
src="did:plc:..."
collection="com.example.recipe.recipe">
</atproto-record-list> Attributes
| Name | Type | Default | Description |
|---|---|---|---|
src * | string | — | Author handle or DID. |
collection * | string | — | Lexicon NSID — any collection, custom included. |
limit | number | 10 | Records per page. |
Parts
External CSS can target these via atproto-record-list::part(<name>) { ... }.
| Part | What it is |
|---|---|
head | Collection + subject header. |
list | Vertical list container. |
record | Each nested atproto-lexicon-viewer. |
loadmore / empty | Pagination button + empty-state. |
Why this exists
The high-level components (<atproto-feed>,
<atproto-comments>) bake in Bluesky lexicon assumptions —
they filter replies, render posts, use known field paths. The moment you
want to browse a custom lexicon or a non-post collection (follows, likes,
lists, recipe records, whatever), those components don't fit.
<atproto-record-list> is the escape hatch. Point it
at any DID + collection pair and it paginates the records, rendering each
as a full lexicon-viewer tree. Useful for custom-lexicon builders who want
immediate browsability without writing a dedicated UI.