a love letter to tangled (android, iOS, and a search API)
at main 138 lines 3.7 kB view raw view rendered
1--- 2title: Tangled Lexicons 3updated: 2026-03-24 4--- 5 6Tangled defines its AT Protocol record types under the `sh.tangled.*` namespace. These are the records stored on users' Personal Data Servers (PDS) and consumed by the indexing pipeline. 7 8## Searchable Records 9 10### sh.tangled.repo 11 12Repository metadata. Created when a user registers a repo with Tangled. 13 14- `name` (string, required) — Repository name 15- `description` (string) — Short description 16- `createdAt` (datetime) — Creation timestamp 17- `knot` (string) — Knot DID hosting the git data 18- `topics` (array of strings) — Tags/topics 19 20### sh.tangled.repo.issue 21 22Issue on a repository. 23 24- `repo` (at-uri, required) — Reference to the parent repo record 25- `title` (string, required) — Issue title 26- `body` (string) — Issue body (markdown) 27- `createdAt` (datetime) 28 29### sh.tangled.repo.pull 30 31Pull request on a repository. 32 33- `repo` (at-uri, required) — Reference to the parent repo record 34- `title` (string, required) — PR title 35- `body` (string) — PR body (markdown) 36- `head` (string) — Source branch 37- `base` (string) — Target branch 38- `createdAt` (datetime) 39 40### sh.tangled.string 41 42Code snippet or gist. 43 44- `filename` (string) — File name with extension 45- `contents` (string, required) — Code content 46- `language` (string) — Programming language 47- `createdAt` (datetime) 48 49### sh.tangled.actor.profile 50 51User profile information. 52 53- `displayName` (string) — Display name 54- `description` (string) — Bio/about text 55- `avatar` (blob) — Profile image 56- `pronouns` (string) — Pronouns 57- `location` (string) — Location 58- `links` (array of strings) — External links 59- `pinnedRepos` (array of at-uri) — Pinned repository references 60 61## Interaction Records 62 63### sh.tangled.feed.star 64 65Star/favorite on a repository. 66 67- `subject` (object, required) — `{ uri: at-uri, cid: cid }` referencing the starred repo 68 69### sh.tangled.graph.follow 70 71Follow relationship between users. 72 73- `subject` (did, required) — DID of the followed user 74- `createdAt` (datetime) 75 76### sh.tangled.feed.reaction 77 78Emoji reaction on content. 79 80- `subject` (object, required) — `{ uri: at-uri, cid: cid }` referencing the target 81- `emoji` (string, required) — Reaction emoji 82 83## State Records 84 85### sh.tangled.repo.issue.state 86 87Tracks whether an issue is open or closed. 88 89- `issue` (at-uri, required) — Reference to the issue 90- `state` (string, required) — `open` or `closed` 91 92### sh.tangled.repo.pull.status 93 94Tracks pull request lifecycle. 95 96- `pull` (at-uri, required) — Reference to the PR 97- `status` (string, required) — `open`, `closed`, or `merged` 98 99## Comment Records 100 101### sh.tangled.repo.issue.comment 102 103Comment on an issue. 104 105- `issue` (at-uri, required) — Reference to the parent issue 106- `body` (string, required) — Comment body (markdown) 107- `parent` (at-uri) — Parent comment for threading 108- `createdAt` (datetime) 109 110### sh.tangled.repo.pull.comment 111 112Comment on a pull request. 113 114- `pull` (at-uri, required) — Reference to the parent PR 115- `body` (string, required) — Comment body (markdown) 116- `parent` (at-uri) — Parent comment for threading 117- `createdAt` (datetime) 118 119## Infrastructure Records 120 121### sh.tangled.knot.member 122 123Knot membership record. 124 125- `knot` (did, required) — Knot DID 126- `permission` (string) — Permission level 127 128### sh.tangled.knot.version 129 130Knot software version metadata. 131 132## Stable ID Format 133 134Documents in the search index use the stable ID format: `did|collection|rkey` (e.g., `did:plc:abc123|sh.tangled.repo|repo-name`). This ensures idempotent upserts regardless of CID changes. 135 136## AT-URI Format 137 138Records are addressed as `at://did/collection/rkey` (e.g., `at://did:plc:abc123/sh.tangled.repo/repo-name`).