a love letter to tangled (android, iOS, and a search API)
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`).