Where It's at:// 🔗 **Source:** [Where It's at://](https://overreacted.io/where-its-at/) > [!note]+ Document Notes > ```markdown > > --- > tags: [AT Protocol, DIDs, Bluesky] > author: Dan Abramov > source: overreacted.io > reference: [https://overreacted.io/where-its-at/] > date created: > > --- > > # 🏷️ Title: Where It's at:// > <!-- deep-read:sections start --> ## 🧭 Table of Contents - [📝 Summary](#-summary) - [📖 Main Content](#-main-content) - [🗒️ Notes](#️-notes) - [📚 References](#-references) - [🗣️ Paraphrase](#️-paraphrase) - [📰 Newsletter](#-newsletter) - [✅ Action Items](#-action-items) - [🧪 Hypotheses](#-hypotheses) - [📊 Methodology](#-methodology) - [❓ Questions](#-questions) - [🔮 Future Research](#-future-research) - [💡 Implications](#-implications) - [🧠 Learning Styles Assessment](#-learning-styles-assessment) - [📊 Accessibility Assessment](#-accessibility-assessment) - [🌍 DEIB Assessment](#-deib-assessment) - [✅ Logical Validity](#-logical-validity) - [🛡️ DARVO Analysis](#-darvo-analysis) - [🎯 Conclusion](#-conclusion) ### 🔗 References - Include links cited in or relevant to the article. ## 📝 Summary - The article explains resolving at:// URIs to JSON. - It matters because identity and hosting are decoupled. - Stakeholders include app builders, users, and host operators. - Risks include DNS loss for did:web and PLC centralization. - Bottom line: store DIDs, not handles, for durable links. ## 📖 Main Content - at:// uses user authority, not host authority. - Resolution has three steps: handle→DID, DID→host, host→record. - Two DID methods exist: did:web and did:plc. - did:web ties identity to domain control. - did:plc uses the PLC directory for DID documents. - JSON records are fetched via the host’s XRPC endpoints. - SDKs and resolution caches improve performance. ### 🗒️ Notes ### [H1] AT separates identity from hosting > [!quote] [Where It's at://](https://overreacted.io/where-its-at/) by [[Dan Abramov]] via [[overreacted.io]]. Published 2025-10-02. Accessed . > “The user is the authority for their own data.” This frames user-owned identity independent from servers. [view highlight](https://overreacted.io/where-its-at/#H1) #xref #articleseed ID:rw_01 ### [H2] at:// resolution has three steps > [!quote] [Where It's at://](https://overreacted.io/where-its-at/) > “1. Resolve the handle to an identity… 2. Resolve that identity to a hosting… 3. Request the JSON…” Clear, actionable algorithm for clients. [view highlight](https://overreacted.io/where-its-at/#H2) #xref ID:rw_02 ### [H3] DIDs are the canonical permalinks > [!quote] [Where It's at://](https://overreacted.io/where-its-at/) > “Think of at:// links with DIDs as ‘permalinks’.” Store DIDs to avoid link rot from handle or host changes. [view highlight](https://overreacted.io/where-its-at/#H3) #xref #articleseed ID:rw_03 ### [H4] did:web depends on domain control > [!quote] [Where It's at://](https://overreacted.io/where-its-at/) > “If did:web… ever loses control of the… domain, he will lose control over his DID Document.” did:web has DNS/TLD dependency risk. [view highlight](https://overreacted.io/where-its-at/#H4) #xref ID:rw_04 ### [H5] did:plc uses PLC directory > [!quote] [Where It's at://](https://overreacted.io/where-its-at/) > “Essentially, you need to hit the https://plc.directory service with a GET” Operational pointer for fetching PLC DID documents. [view highlight](https://overreacted.io/where-its-at/#H5) #xref ID:rw_05 ### [H6] DID documents bind handle, key, endpoint > [!quote] [Where It's at://](https://overreacted.io/where-its-at/) > “A DID Document… here’s their handle, here’s their signature, and here’s their location.” Three essentials: alias, verification key, hosting URL. [view highlight](https://overreacted.io/where-its-at/#H6) #xref #articleseed ID:rw_06 ### [H7] Fetch records via com.atproto.repo.getRecord > [!quote] [Where It's at://](https://overreacted.io/where-its-at/) > “hit the … server with the com.atproto.repo.getRecord endpoint” Concrete API to retrieve JSON records. [view highlight](https://overreacted.io/where-its-at/#H7) #xref ID:rw_07 ### [H8] Caches improve resolution performance > [!quote] [Where It's at://](https://overreacted.io/where-its-at/) > “for good performance, you’ll want to hit a resolution cache…” Cache DIDs/hosts to avoid repeated lookups. [view highlight](https://overreacted.io/where-its-at/#H8) #xref #articleseed ID:rw_08 ## 📚 References - AT Protocol docs: Identity, DIDs, XRPC (https://atproto.com) - W3C DID Core specification (https://www.w3.org/TR/did-core/) - PLC directory service (https://plc.directory) - QuickDID resolution cache (https://quickdid.net) — If inaccessible, use AT SDKs. - Bluesky XRPC: com.atproto.repo.getRecord (https://github.com/bluesky-social/atproto) ## 🗣️ Paraphrase - The system resolves human handles into stable identities and hosts. - Clients then fetch portable JSON records from the current host. ## 📰 Newsletter - AT Protocol tip: store DIDs, not handles, for durability. - WordPress builders can map at:// into site content safely. - Try a resolution cache like QuickDID for speed. - Learn DIDs with the W3C primer and AT docs. ## ✅ Action Items #### DevRel - Publish a “Handle→DID→Host” tutorial with cURL and Node examples. - Demo getRecord in a WordPress plugin with caching. - Record a 5-minute explainer on DID documents. #### OSPO - Draft a policy to store DIDs canonically across services. - Add PLC and did:web risks to governance docs. - Define SBOM notes for AT SDK dependencies. #### Community - Run an onboarding session on at:// resolution. - Create a cheat sheet for DNS TXT and .well-known. - Share a sample DID document with annotations. #### WordPress - Build a WP plugin to resolve at:// to embeds. - Add transients for DID and host caches. - Provide admin tools to verify DNS and .well-known. #### The WPOCC - Fund a microgrant for an open at:// resolver. - Publish transparency reports on funded infra. ### FAIR - Add provenance checks for DID documents. - Write a covenant for neutral PLC governance. ## 🧪 Hypotheses - Storing DIDs reduces broken links by 90% versus handles. - Resolution caches cut API latency by 50%+. - did:web identities fail more during domain churn periods. ### 📊 Methodology - Compare link integrity across handle vs DID datasets. - A/B test cache-enabled vs direct lookups. - Track incident rates for did:web expirations. ### ❓ Questions - What SLOs should PLC directory meet? - How should apps rotate keys without downtime? ### 🔮 Future Research - Evaluate multi-PLC federation designs. - Explore DID method migration playbooks for users. ### 💡 Implications - CMSs should normalize at:// to DIDs. - OSPOs must document identity risks and mitigations. - Fund neutral registries to reduce capture risks. ### 🧠 Learning Styles Assessment - Reading level estimate: Flesch-Kincaid Grade ≈ 10–11. #### 👀 Visual learners - Present: URI diagrams implied. - Improve: End-to-end resolution flowchart. #### 🔊 Aural learners - Present: None. - Improve: Short narrated explainer. #### 🗣️ Verbal learners - Present: Clear definitions and steps. - Improve: Glossary for DID terms. #### 🧩 Kinesthetic learners - Present: cURL commands. - Improve: Interactive sandbox with real endpoints. #### 🧠 Logical learners - Present: Three-step algorithm. - Improve: Decision tree for did:web vs did:plc. #### 🧑‍🤝‍🧑 Social learners - Present: Community references. - Improve: Group lab with shared hosts. #### 🧘‍♀️ Solitary learners - Present: Self-paced commands. - Improve: Self-check quiz on steps. #### 🌿 Naturalistic learners - Present: Not applicable. - Improve: None required. ### 📊 Accessibility Assessment #### Screen reader semantics - Present: Standard headings. - Improve: ARIA landmarks for code examples. #### Keyboard navigation - Present: Basic web article flow. - Improve: Skip links in long posts. #### Contrast and readability - Present: Typical blog contrast. - Improve: Larger code font and line height. #### Text resizing and reflow - Present: Responsive layout. - Improve: Prefer reduced motion support. #### Media and captions - Present: Static content. - Improve: Captioned video explainer. #### Forms and interactions - Present: None. - Improve: N/A. #### Standards reference - Map to WCAG 2.2 AA: 1.4.*, 2.4.*, 1.3.1. ### 🌍 DEIB Assessment #### Cultural breadth - Present: Neutral technical scope. - Improve: Global DNS and TLD examples. #### Inclusive language - Present: Clear, neutral phrasing. - Improve: Plain-language summary card. #### Neurodiversity support - Present: Chunked steps. - Improve: Repeated key takeaways. #### Representation - Present: Technical identities only. - Improve: Diverse case studies. #### Psychological safety - Present: Respectful tone. - Improve: Community guidelines link. ### ✅ Logical Validity #### Strong reasoning - Procedural reasoning in three steps [H2]. - Risk analysis contrasts did:web and did:plc [H4][H5]. #### Fallacies - None apparent; assumptions are noted as tradeoffs. #### Tone of voice - Informative, pragmatic, and instructional. ### 🛡️ DARVO Analysis - No denial, attack, or reversal patterns present. - Risks are acknowledged without blame. ## 🎯 Conclusion - Use DIDs as canonical permalinks. - Resolve handle→DID→host, then fetch the record. - Prefer caches for speed and reliability. ## 🧱 Refactor Appendix (append after 🎯 Conclusion) ### 📚 Literature Split Pad - Purpose: Stage Konik CEE units that become per-source Literature notes. - Split level: H3. - Include verbatim quotes under 25 words and a [view highlight] link. ### [H1] AT separates identity from hosting > [!quote] [Where It's at://](https://overreacted.io/where-its-at/) by [[Dan Abramov]] via [[overreacted.io]]. Published 2025-10-02. Accessed . > “The user is the authority for their own data.” Two lines: central principle; guides storage and linking strategy. [view highlight](https://overreacted.io/where-its-at/#H1) #xref #articleseed ID:rw_[MISSING] ### [H2] at:// resolution has three steps > [!quote] [Where It's at://](https://overreacted.io/where-its-at/) > “1. Resolve the handle to an identity… 2. Resolve that identity to a hosting… 3. Request the JSON…” Two lines: operational recipe for implementers. [view highlight](https://overreacted.io/where-its-at/#H2) #xref ID:rw_[MISSING] --- ### 🔖 Atomic Split Pad (Zettel Candidates) - Purpose: Promote reusable claims into Atomic notes. - Split level: H4. - Each item: one idea, present tense, specific, testable. #### [Z1] Clients store DIDs as canonical links - Holds when persistence across handle changes is required. - Pointer: [H3]. - Links: [[AT-Identity]] [[Permalinks]] #### [Z2] did:web risks domain-based identity loss - Holds when DNS/TLD events occur. - Pointer: [H4]. - Links: [[DID-Methods]] [[Operational-Risk]] --- ### ✏️ Fleeting Queue (Extract by Selection) - Purpose: Capture quick actions or sparks for Fleeting notes. - Extraction: Select one line → Refactor. - [F1] Draft WP at:// embed plugin — context/https://overreacted.io/where-its-at/ #fleeting #inbox - [F2] Create DID cache service spec — context/https://overreacted.io/where-its-at/ #fleeting #inbox - [F3] Record 5-min DID doc explainer — context/https://overreacted.io/where-its-at/ #fleeting #inbox --- <!-- deep-read:sections end -->