content surface · pds · lexicon-agnostic

<atproto-repo>

Browse a repo's every collection — native Bluesky lexicons alongside any custom NSIDs. Lazy-expand each collection to see its records.

<atproto-repo src="pfrazee.com"></atproto-repo>
<atproto-repo src="did:plc:..."></atproto-repo>
NameTypeDefaultDescription
src * string Handle or DID.

External CSS can target these via atproto-repo::part(<name>) { ... }.

PartWhat it is
article / headerOuter card + header block.
handle / didHandle and DID text.
collections-label'N collections' label above the list.
collectionsContainer wrapping each collection row.
collection / collection-summary / collection-bodyExpandable per-collection row + its summary + the lazy-loaded content.
emptyEmpty-state for repos with no collections.

Surfaces com.atproto.repo.describeRepo — the PDS's own introspection endpoint — as a browsable tree. Shows the repo's handle and DID at the top, then lists every collection the repo holds. Clicking any collection expands inline to show its records via <atproto-record-list>, which renders each as a full <atproto-lexicon-viewer>.

Records lazy-load on expansion. The initial render is just a single PDS call — no matter how many collections the repo has.

  • Custom lexicon builders: point it at your own DID to see the full inventory of what your PDS has indexed — Bluesky records alongside your custom lexicons, all in one tree.
  • Protocol exploration: point it at any account to see what they've been writing besides Bluesky — some users have dozens of custom collections from experiments, third-party apps, bridges.
  • Debugging: before you assume a record exists or a collection has content, verify with this view. Works on any reachable PDS.

No record counts per collection — that info isn't in describeRepo's response, and counting per-collection would cost one listRecords page per collection up front. The lazy-expansion keeps that cost deferred.

No blob / media listing. If you want to see a repo's blobs separately, com.atproto.sync.listBlobs would be a separate surface — not yet exposed as a component.

<atproto-record-list> for a single collection. <atproto-lexicon-viewer> for a single record. <atproto-backlinks> for what LINKS to a subject (vs what the subject's repo contains).