{"id":8134,"date":"2025-10-04T16:27:00","date_gmt":"2025-10-04T16:27:00","guid":{"rendered":"https:\/\/pokecon.jp\/job\/?p=8134"},"modified":"2025-10-04T16:27:00","modified_gmt":"2025-10-04T16:27:00","slug":"where-its-at-overreacted","status":"publish","type":"post","link":"https:\/\/pokecon.jp\/job\/8134\/","title":{"rendered":"Where It&#8217;s at:\/\/ \u2014 overreacted"},"content":{"rendered":"\n<\/p>\n<div wp_automatic_readability=\"379.95643019112\">\n<p>You might have heard about the AT protocol (if not, <a target=\"_blank\" class=\" scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"https:\/\/overreacted.io\/open-social\/\">read this!<\/a>)<\/p>\n<p>Together, all servers speaking the AT protocol comprise <em>the atmosphere<\/em>\u2014a web of hyperlinked JSON. Each piece of JSON on the atmosphere has its own <code>at:\/\/<\/code> URI:<\/p>\n<p>But where do they point, exactly?<\/p>\n<p>Given an <code>at:\/\/<\/code> URI, how do you locate the corresponding JSON?<\/p>\n<p>In this post, I\u2019ll show you the exact process of resolving an <code>at:\/\/<\/code> URI step by step. Turns out, this is also a great way to learn the details of how <code>at:\/\/<\/code> works.<\/p>\n<p>Let\u2019s start with the structure of a URI itself.<\/p>\n<hr\/>\n<h3 id=\"the-user-as-the-authority\"><a target=\"_blank\" target=\"_self\" class=\"linked-heading scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"#the-user-as-the-authority\">The User as the Authority<\/a><\/h3>\n<p>As you might know, a URI often contains a scheme (for example, <code>https:\/\/<\/code>), an <em>authority<\/em> (like <code>wikipedia.com<\/code>), a path (like <code>\/Main_Page<\/code>), and maybe a query.<\/p>\n<p>In most protocols, including <code>https:\/\/<\/code>, the authority part points at whoever\u2019s <em>hosting<\/em> the data. Whoever <em>created<\/em> this data is either not present, or is in the path:<\/p>\n<p><span style=\"filter:var(--svg-filter);display:inline-block\" alt=\"A URI to a Bluesky post; &quot;bsky.app&quot; domain is highlighted as &quot;the app&quot; while &quot;ruuuuu.de&quot; username is highlighted in the path\"><?xml version=\"1.0\" standalone=\"no\"????><\/p>\n<p><svg style=\"max-width: 100%; width: 100%; height: auto;\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewbox=\"0 0 773.6822853284357 133.7882486588319\" width=\"1547.3645706568714\" height=\"267.5764973176638\"><!-- svg-source:excalidraw --><defs\/><g transform=\"translate(10 88.41995281069649) rotate(0 55.145973205566406 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#868e96\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">https:\/\/<\/text><\/g><g transform=\"translate(234.9639060803529 88.62313663611394) rotate(0 58.43596649169922 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#868e96\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">\/profile\/<\/text><\/g><g transform=\"translate(479.45444109015443 88.64564702659618) rotate(0 142.11392211914062 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#868e96\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">\/post\/3lzy2ji4nms2z<\/text><\/g><g transform=\"translate(119.93913228719248 88.45006504985213) rotate(0 57.189979553222656 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#228be6\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">bsky.app<\/text><\/g><g transform=\"translate(351.4890063087005 88.78824865883189) rotate(0 63.95197296142578 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#7950f2\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">ruuuuu.de<\/text><\/g><g transform=\"translate(120.97916270110727 87.40003626069483) rotate(0 57.92899915737689 -15.052645088736654)\" stroke=\"none\"><path fill=\"#228be6\" d=\"M -2.67,0 Q -2.67,0 -2.69,-1.07 -2.71,-2.15 -2.78,-3.49 -2.85,-4.83 -2.91,-5.93 -2.97,-7.03 -2.94,-8.45 -2.91,-9.86 -2.48,-11.01 -2.05,-12.16 -1.00,-13.85 0.03,-15.54 1.60,-16.80 3.16,-18.05 4.21,-18.79 5.26,-19.52 6.62,-20.16 7.98,-20.79 10.01,-21.33 12.03,-21.87 13.68,-22.22 15.33,-22.57 16.66,-22.82 17.98,-23.07 19.25,-23.20 20.52,-23.34 21.68,-23.41 22.85,-23.48 23.97,-23.52 25.08,-23.56 26.17,-23.58 27.26,-23.61 28.86,-23.56 30.45,-23.51 32.29,-23.23 34.14,-22.94 35.20,-22.82 36.27,-22.69 38.50,-22.22 40.72,-21.74 42.41,-21.36 44.10,-20.99 45.26,-20.80 46.43,-20.62 47.78,-20.65 49.14,-20.69 50.12,-21.36 51.11,-22.02 51.53,-23.33 51.95,-24.64 51.98,-25.90 52.01,-27.17 53.30,-28.28 54.60,-29.39 55.09,-28.37 55.58,-27.35 56.63,-26.50 57.68,-25.66 58.98,-24.79 60.29,-23.93 61.79,-23.28 63.29,-22.62 64.39,-22.38 65.49,-22.14 67.08,-22.04 68.66,-21.95 70.25,-21.92 71.83,-21.89 73.33,-21.88 74.82,-21.87 76.35,-21.87 77.89,-21.86 79.11,-21.82 80.34,-21.77 81.99,-21.66 83.63,-21.55 85.05,-21.50 86.47,-21.45 87.99,-21.39 89.50,-21.33 90.87,-21.30 92.23,-21.27 93.95,-21.32 95.67,-21.37 96.79,-21.42 97.92,-21.47 99.12,-21.53 100.33,-21.59 102.01,-21.19 103.69,-20.78 105.07,-19.94 106.44,-19.10 107.61,-17.92 108.78,-16.74 109.69,-15.67 110.61,-14.59 111.35,-13.74 112.08,-12.89 112.96,-11.72 113.84,-10.55 114.51,-9.55 115.18,-8.56 115.95,-7.53 116.72,-6.49 117.24,-5.56 117.76,-4.63 118.57,-1.94 119.37,0.74 119.35,1.31 119.32,1.88 119.12,2.42 118.91,2.95 118.54,3.39 118.18,3.84 117.69,4.14 117.20,4.44 116.64,4.57 116.09,4.70 115.52,4.64 114.94,4.59 114.42,4.35 113.90,4.12 113.48,3.73 113.06,3.34 112.78,2.84 112.51,2.33 112.41,1.77 112.31,1.20 112.40,0.64 112.48,0.07 112.74,-0.43 113.01,-0.94 113.42,-1.34 113.83,-1.74 114.35,-1.98 114.87,-2.23 115.43,-2.30 116.00,-2.37 116.57,-2.25 117.13,-2.13 117.62,-1.84 118.12,-1.55 118.49,-1.12 118.87,-0.69 119.09,-0.16 119.30,0.36 119.34,0.93 119.38,1.50 119.23,2.06 119.09,2.61 118.77,3.09 118.45,3.57 118.00,3.92 117.55,4.27 117.01,4.46 116.47,4.65 115.89,4.66 115.32,4.67 114.77,4.49 114.23,4.31 113.77,3.97 113.31,3.63 112.98,3.16 112.65,2.69 112.49,2.14 112.33,1.59 112.33,1.59 112.33,1.59 111.80,-0.17 111.26,-1.94 110.68,-2.93 110.09,-3.91 109.15,-5.30 108.20,-6.69 107.49,-7.66 106.78,-8.62 105.97,-9.61 105.16,-10.60 104.47,-11.45 103.77,-12.30 102.98,-13.14 102.19,-13.99 101.25,-14.64 100.32,-15.29 99.12,-15.36 97.92,-15.42 96.79,-15.47 95.67,-15.52 93.95,-15.57 92.23,-15.61 90.87,-15.59 89.50,-15.56 87.99,-15.50 86.47,-15.44 85.05,-15.39 83.63,-15.34 81.99,-15.23 80.34,-15.12 78.37,-15.07 76.40,-15.02 74.94,-15.02 73.47,-15.02 71.85,-15.02 70.23,-15.01 68.47,-15.03 66.71,-15.05 65.56,-15.10 64.40,-15.15 63.29,-15.32 62.18,-15.50 60.71,-15.97 59.25,-16.45 57.93,-17.09 56.62,-17.73 54.90,-18.76 53.18,-19.79 52.25,-20.51 51.33,-21.23 50.20,-22.48 49.07,-23.74 48.40,-25.28 47.72,-26.82 47.65,-27.90 47.59,-28.98 47.65,-30.30 47.70,-31.63 48.55,-32.89 49.41,-34.15 51.04,-34.51 52.68,-34.87 53.74,-34.56 54.81,-34.25 55.85,-33.37 56.89,-32.49 57.62,-31.49 58.36,-30.49 58.74,-29.08 59.12,-27.67 59.07,-26.36 59.03,-25.05 58.77,-23.77 58.51,-22.49 58.12,-21.38 57.72,-20.28 57.06,-19.13 56.40,-17.98 55.60,-17.14 54.79,-16.30 53.84,-15.68 52.88,-15.07 51.38,-14.74 49.88,-14.42 48.69,-14.50 47.50,-14.57 46.37,-14.73 45.23,-14.88 44.00,-15.21 42.78,-15.54 41.14,-16.03 39.50,-16.53 38.23,-16.82 36.95,-17.12 35.23,-17.53 33.50,-17.93 31.98,-18.07 30.45,-18.22 28.88,-18.16 27.30,-18.11 25.17,-18.13 23.04,-18.14 20.96,-18.08 18.87,-18.01 17.67,-17.81 16.46,-17.61 15.08,-17.27 13.70,-16.92 12.05,-16.23 10.40,-15.53 8.67,-14.55 6.93,-13.57 6.00,-12.72 5.06,-11.87 4.31,-10.71 3.57,-9.56 3.27,-8.29 2.97,-7.03 2.91,-5.93 2.85,-4.83 2.78,-3.49 2.71,-2.15 2.69,-1.07 2.67,0 2.63,0.32 2.59,0.64 2.48,0.94 2.36,1.24 2.18,1.50 2.00,1.77 1.76,1.98 1.51,2.20 1.23,2.35 0.94,2.50 0.63,2.57 0.32,2.65 -0.00,2.65 -0.32,2.65 -0.63,2.57 -0.94,2.50 -1.23,2.35 -1.51,2.20 -1.76,1.98 -2.00,1.77 -2.18,1.50 -2.36,1.24 -2.48,0.94 -2.59,0.63 -2.63,0.31 -2.67,-0.00 -2.67,-0.00 L -2.67,0 Z\"\/><\/g><g transform=\"translate(123.50627446410363 10) rotate(0 51.897979736328125 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#228be6\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">the app<\/text><\/g><g transform=\"translate(354.7891181149789 89.72562765395332) rotate(0 66.51214547980635 -14.811747175490382)\" stroke=\"none\"><path fill=\"#7950f2\" d=\"M -2.59,0 Q -2.59,0 -2.55,-1.63 -2.50,-3.27 -2.53,-4.37 -2.57,-5.47 -2.65,-6.96 -2.73,-8.45 -2.82,-9.89 -2.91,-11.33 -2.35,-12.80 -1.79,-14.28 -0.99,-15.07 -0.20,-15.87 1.50,-16.71 3.20,-17.56 4.49,-18.07 5.78,-18.58 7.35,-19.05 8.91,-19.52 11.19,-19.90 13.48,-20.29 14.64,-20.39 15.81,-20.49 18.30,-20.59 20.79,-20.69 22.05,-20.69 23.31,-20.69 25.31,-20.72 27.30,-20.75 29.89,-20.68 32.47,-20.62 33.64,-20.62 34.80,-20.62 35.92,-20.62 37.03,-20.63 38.12,-20.63 39.21,-20.64 40.78,-20.76 42.35,-20.89 44.00,-21.04 45.66,-21.19 48.05,-21.57 50.45,-21.96 52.34,-22.39 54.24,-22.82 55.82,-23.31 57.40,-23.80 58.61,-24.20 59.81,-24.60 61.29,-25.04 62.78,-25.49 64.32,-26.11 65.86,-26.73 66.92,-27.21 67.97,-27.69 69.21,-27.49 70.45,-27.29 71.38,-26.63 72.30,-25.96 73.09,-24.95 73.87,-23.93 74.70,-23.07 75.52,-22.21 76.54,-21.55 77.57,-20.89 78.95,-20.55 80.33,-20.20 81.38,-19.98 82.43,-19.77 84.15,-19.54 85.87,-19.31 87.75,-19.07 89.63,-18.84 91.45,-18.68 93.28,-18.52 94.34,-18.38 95.40,-18.24 97.49,-18.07 99.58,-17.89 100.68,-17.76 101.78,-17.62 104.42,-17.31 107.05,-16.99 109.22,-16.72 111.38,-16.44 113.17,-16.21 114.97,-15.98 116.09,-15.75 117.20,-15.52 118.70,-15.19 120.20,-14.85 121.85,-14.41 123.51,-13.97 124.54,-13.66 125.58,-13.34 126.85,-12.86 128.13,-12.38 129.08,-11.79 130.02,-11.20 130.85,-10.47 131.67,-9.74 132.50,-8.87 133.33,-8.01 134.04,-7.15 134.75,-6.30 134.75,-5.40 134.75,-4.50 134.90,-4.10 135.06,-3.70 135.11,-3.28 135.17,-2.86 135.12,-2.44 135.07,-2.01 134.92,-1.61 134.78,-1.21 134.54,-0.86 134.30,-0.51 133.98,-0.22 133.66,0.05 133.29,0.25 132.91,0.45 132.50,0.56 132.09,0.66 131.66,0.67 131.24,0.67 130.82,0.57 130.41,0.47 130.03,0.28 129.65,0.09 129.33,-0.18 129.01,-0.46 128.76,-0.81 128.52,-1.16 128.80,-0.77 129.09,-0.37 128.77,-0.84 128.44,-1.31 128.28,-1.86 128.12,-2.41 128.15,-2.98 128.17,-3.55 128.38,-4.09 128.58,-4.62 128.95,-5.06 129.31,-5.50 129.80,-5.80 130.29,-6.10 130.85,-6.23 131.40,-6.36 131.97,-6.30 132.54,-6.25 133.06,-6.01 133.58,-5.78 134.00,-5.39 134.42,-5.00 134.70,-4.50 134.97,-3.99 135.07,-3.43 135.17,-2.87 135.08,-2.30 134.99,-1.74 134.73,-1.23 134.47,-0.72 134.06,-0.32 133.65,0.06 133.13,0.31 132.61,0.56 132.05,0.62 131.48,0.69 130.92,0.57 130.36,0.46 129.87,0.17 129.37,-0.11 129.00,-0.54 128.62,-0.98 128.41,-1.51 128.19,-2.03 128.15,-2.60 128.11,-3.18 128.26,-3.73 128.41,-4.28 128.72,-4.76 129.04,-5.23 129.49,-5.58 129.94,-5.94 130.48,-6.12 131.02,-6.31 131.60,-6.32 132.17,-6.32 132.71,-6.15 133.25,-5.97 134.00,-5.23 134.75,-4.50 134.90,-4.10 135.06,-3.71 135.11,-3.28 135.17,-2.86 135.12,-2.44 135.07,-2.01 134.92,-1.61 134.78,-1.21 134.54,-0.86 134.30,-0.51 133.98,-0.22 133.66,0.05 133.29,0.25 132.91,0.45 132.50,0.56 132.09,0.66 131.66,0.67 131.24,0.67 130.82,0.57 130.41,0.48 130.03,0.28 129.65,0.09 129.33,-0.18 129.01,-0.46 128.76,-0.81 128.52,-1.16 128.45,-2.18 128.39,-3.19 127.45,-4.25 126.51,-5.30 125.72,-6.04 124.92,-6.77 123.78,-7.19 122.63,-7.60 121.59,-7.97 120.55,-8.33 118.92,-8.80 117.30,-9.28 115.66,-9.64 114.02,-10.01 112.34,-10.28 110.67,-10.55 108.54,-10.82 106.42,-11.09 104.93,-11.17 103.43,-11.24 102.26,-11.29 101.09,-11.34 99.04,-11.52 97.00,-11.70 94.82,-11.84 92.64,-11.98 90.71,-12.11 88.78,-12.24 87.09,-12.43 85.39,-12.62 83.32,-12.83 81.26,-13.05 79.35,-13.36 77.45,-13.68 75.89,-14.21 74.34,-14.74 72.89,-15.65 71.44,-16.57 70.52,-17.47 69.60,-18.37 68.54,-19.57 67.49,-20.78 66.86,-21.64 66.23,-22.51 65.38,-24.04 64.52,-25.57 64.39,-27.53 64.25,-29.49 64.76,-30.64 65.28,-31.79 67.38,-32.45 69.49,-33.12 70.77,-32.73 72.06,-32.34 73.27,-31.26 74.48,-30.18 74.77,-28.46 75.06,-26.74 74.47,-25.46 73.88,-24.19 72.73,-23.24 71.59,-22.30 70.53,-21.82 69.47,-21.34 68.07,-20.81 66.68,-20.28 65.45,-19.80 64.22,-19.32 62.94,-19.00 61.66,-18.67 60.37,-18.33 59.07,-18.00 57.35,-17.54 55.63,-17.08 53.63,-16.67 51.63,-16.26 50.15,-15.91 48.66,-15.55 47.30,-15.33 45.93,-15.10 44.22,-15.01 42.51,-14.93 40.87,-14.89 39.22,-14.84 38.12,-14.85 37.03,-14.86 35.92,-14.86 34.81,-14.86 33.64,-14.86 32.47,-14.86 29.90,-14.79 27.33,-14.72 25.37,-14.73 23.41,-14.73 22.20,-14.69 20.99,-14.65 19.66,-14.55 18.34,-14.46 16.43,-14.26 14.52,-14.06 12.65,-13.69 10.79,-13.33 9.41,-12.96 8.03,-12.59 6.80,-12.15 5.56,-11.71 4.24,-11.47 2.91,-11.23 2.82,-9.84 2.73,-8.45 2.65,-6.96 2.57,-5.47 2.53,-4.37 2.50,-3.27 2.55,-1.63 2.59,0 2.55,0.31 2.52,0.62 2.40,0.91 2.29,1.20 2.12,1.46 1.94,1.72 1.70,1.92 1.47,2.13 1.19,2.28 0.92,2.42 0.61,2.50 0.31,2.57 -0.00,2.57 -0.31,2.57 -0.61,2.50 -0.92,2.42 -1.19,2.28 -1.47,2.13 -1.70,1.92 -1.94,1.72 -2.12,1.46 -2.29,1.20 -2.40,0.91 -2.52,0.62 -2.55,0.31 -2.59,-0.00 -2.59,-0.00 L -2.59,0 Z\"\/><\/g><g transform=\"translate(355.26859761538435 14.120744112158263) rotate(0 57.35797882080078 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#7950f2\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">the user<\/text><\/g><\/svg><\/span><\/p>\n<p><strong>The <code>at:\/\/<\/code> protocol flips that around.<\/strong><\/p>\n<p>In <code>at:\/\/<\/code> URIs, whoever <em>created<\/em> the data is the authority, in the most literal sense:<\/p>\n<p><span style=\"filter:var(--svg-filter);display:inline-block\" alt=\"An at:\/\/ URI, with the &quot;ruuuuu.de&quot; username where you'd usually see a domain, followed by &quot;app.bsky.feed.post&quot; in the path\"><?xml version=\"1.0\" standalone=\"no\"????><\/p>\n<p><svg style=\"max-width: 100%; width: 100%; height: auto;\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewbox=\"0 0 686.381193160727 134.36299530115593\" width=\"1372.762386321454\" height=\"268.72599060231187\"><!-- svg-source:excalidraw --><defs\/><g transform=\"translate(269.845485107915 13.779591306684324) rotate(0 75.01197052001953 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#228be6\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">the format<\/text><\/g><g transform=\"translate(75.37369566187408 85.60488354179506) rotate(0 66.51214547980635 -14.811747175490382)\" stroke=\"none\"><path fill=\"#7950f2\" d=\"M -2.59,0 Q -2.59,0 -2.55,-1.63 -2.50,-3.27 -2.53,-4.37 -2.57,-5.47 -2.65,-6.96 -2.73,-8.45 -2.82,-9.89 -2.91,-11.33 -2.35,-12.80 -1.79,-14.28 -0.99,-15.07 -0.20,-15.87 1.50,-16.71 3.20,-17.56 4.49,-18.07 5.78,-18.58 7.35,-19.05 8.91,-19.52 11.19,-19.90 13.48,-20.29 14.64,-20.39 15.81,-20.49 18.30,-20.59 20.79,-20.69 22.05,-20.69 23.31,-20.69 25.31,-20.72 27.30,-20.75 29.89,-20.68 32.47,-20.62 33.64,-20.62 34.80,-20.62 35.92,-20.62 37.03,-20.63 38.12,-20.63 39.21,-20.64 40.78,-20.76 42.35,-20.89 44.00,-21.04 45.66,-21.19 48.05,-21.57 50.45,-21.96 52.34,-22.39 54.24,-22.82 55.82,-23.31 57.40,-23.80 58.61,-24.20 59.81,-24.60 61.29,-25.04 62.78,-25.49 64.32,-26.11 65.86,-26.73 66.92,-27.21 67.97,-27.69 69.21,-27.49 70.45,-27.29 71.38,-26.63 72.30,-25.96 73.09,-24.95 73.87,-23.93 74.70,-23.07 75.52,-22.21 76.54,-21.55 77.57,-20.89 78.95,-20.55 80.33,-20.20 81.38,-19.98 82.43,-19.77 84.15,-19.54 85.87,-19.31 87.75,-19.07 89.63,-18.84 91.45,-18.68 93.28,-18.52 94.34,-18.38 95.40,-18.24 97.49,-18.07 99.58,-17.89 100.68,-17.76 101.78,-17.62 104.42,-17.31 107.05,-16.99 109.22,-16.72 111.38,-16.44 113.17,-16.21 114.97,-15.98 116.09,-15.75 117.20,-15.52 118.70,-15.19 120.20,-14.85 121.85,-14.41 123.51,-13.97 124.54,-13.66 125.58,-13.34 126.85,-12.86 128.13,-12.38 129.08,-11.79 130.02,-11.20 130.85,-10.47 131.67,-9.74 132.50,-8.87 133.33,-8.01 134.04,-7.15 134.75,-6.30 134.75,-5.40 134.75,-4.50 134.90,-4.10 135.06,-3.70 135.11,-3.28 135.17,-2.86 135.12,-2.44 135.07,-2.01 134.92,-1.61 134.78,-1.21 134.54,-0.86 134.30,-0.51 133.98,-0.22 133.66,0.05 133.29,0.25 132.91,0.45 132.50,0.56 132.09,0.66 131.66,0.67 131.24,0.67 130.82,0.57 130.41,0.47 130.03,0.28 129.65,0.09 129.33,-0.18 129.01,-0.46 128.76,-0.81 128.52,-1.16 128.80,-0.77 129.09,-0.37 128.77,-0.84 128.44,-1.31 128.28,-1.86 128.12,-2.41 128.15,-2.98 128.17,-3.55 128.38,-4.09 128.58,-4.62 128.95,-5.06 129.31,-5.50 129.80,-5.80 130.29,-6.10 130.85,-6.23 131.40,-6.36 131.97,-6.30 132.54,-6.25 133.06,-6.01 133.58,-5.78 134.00,-5.39 134.42,-5.00 134.70,-4.50 134.97,-3.99 135.07,-3.43 135.17,-2.87 135.08,-2.30 134.99,-1.74 134.73,-1.23 134.47,-0.72 134.06,-0.32 133.65,0.06 133.13,0.31 132.61,0.56 132.05,0.62 131.48,0.69 130.92,0.57 130.36,0.46 129.87,0.17 129.37,-0.11 129.00,-0.54 128.62,-0.98 128.41,-1.51 128.19,-2.03 128.15,-2.60 128.11,-3.18 128.26,-3.73 128.41,-4.28 128.72,-4.76 129.04,-5.23 129.49,-5.58 129.94,-5.94 130.48,-6.12 131.02,-6.31 131.60,-6.32 132.17,-6.32 132.71,-6.15 133.25,-5.97 134.00,-5.23 134.75,-4.50 134.90,-4.10 135.06,-3.71 135.11,-3.28 135.17,-2.86 135.12,-2.44 135.07,-2.01 134.92,-1.61 134.78,-1.21 134.54,-0.86 134.30,-0.51 133.98,-0.22 133.66,0.05 133.29,0.25 132.91,0.45 132.50,0.56 132.09,0.66 131.66,0.67 131.24,0.67 130.82,0.57 130.41,0.48 130.03,0.28 129.65,0.09 129.33,-0.18 129.01,-0.46 128.76,-0.81 128.52,-1.16 128.45,-2.18 128.39,-3.19 127.45,-4.25 126.51,-5.30 125.72,-6.04 124.92,-6.77 123.78,-7.19 122.63,-7.60 121.59,-7.97 120.55,-8.33 118.92,-8.80 117.30,-9.28 115.66,-9.64 114.02,-10.01 112.34,-10.28 110.67,-10.55 108.54,-10.82 106.42,-11.09 104.93,-11.17 103.43,-11.24 102.26,-11.29 101.09,-11.34 99.04,-11.52 97.00,-11.70 94.82,-11.84 92.64,-11.98 90.71,-12.11 88.78,-12.24 87.09,-12.43 85.39,-12.62 83.32,-12.83 81.26,-13.05 79.35,-13.36 77.45,-13.68 75.89,-14.21 74.34,-14.74 72.89,-15.65 71.44,-16.57 70.52,-17.47 69.60,-18.37 68.54,-19.57 67.49,-20.78 66.86,-21.64 66.23,-22.51 65.38,-24.04 64.52,-25.57 64.39,-27.53 64.25,-29.49 64.76,-30.64 65.28,-31.79 67.38,-32.45 69.49,-33.12 70.77,-32.73 72.06,-32.34 73.27,-31.26 74.48,-30.18 74.77,-28.46 75.06,-26.74 74.47,-25.46 73.88,-24.19 72.73,-23.24 71.59,-22.30 70.53,-21.82 69.47,-21.34 68.07,-20.81 66.68,-20.28 65.45,-19.80 64.22,-19.32 62.94,-19.00 61.66,-18.67 60.37,-18.33 59.07,-18.00 57.35,-17.54 55.63,-17.08 53.63,-16.67 51.63,-16.26 50.15,-15.91 48.66,-15.55 47.30,-15.33 45.93,-15.10 44.22,-15.01 42.51,-14.93 40.87,-14.89 39.22,-14.84 38.12,-14.85 37.03,-14.86 35.92,-14.86 34.81,-14.86 33.64,-14.86 32.47,-14.86 29.90,-14.79 27.33,-14.72 25.37,-14.73 23.41,-14.73 22.20,-14.69 20.99,-14.65 19.66,-14.55 18.34,-14.46 16.43,-14.26 14.52,-14.06 12.65,-13.69 10.79,-13.33 9.41,-12.96 8.03,-12.59 6.80,-12.15 5.56,-11.71 4.24,-11.47 2.91,-11.23 2.82,-9.84 2.73,-8.45 2.65,-6.96 2.57,-5.47 2.53,-4.37 2.50,-3.27 2.55,-1.63 2.59,0 2.55,0.31 2.52,0.62 2.40,0.91 2.29,1.20 2.12,1.46 1.94,1.72 1.70,1.92 1.47,2.13 1.19,2.28 0.92,2.42 0.61,2.50 0.31,2.57 -0.00,2.57 -0.31,2.57 -0.61,2.50 -0.92,2.42 -1.19,2.28 -1.47,2.13 -1.70,1.92 -1.94,1.72 -2.12,1.46 -2.29,1.20 -2.40,0.91 -2.52,0.62 -2.55,0.31 -2.59,-0.00 -2.59,-0.00 L -2.59,0 Z\"\/><\/g><g transform=\"translate(75.85317516227951 10) rotate(0 57.35797882080078 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#7950f2\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">the user<\/text><\/g><g transform=\"translate(220.25062721840732 89.60220950083522) rotate(0 123.21464997310977 -17.40024157983953)\" stroke=\"none\"><path fill=\"#228be6\" d=\"M -2.65,-0.19 Q -2.65,-0.19 -2.61,-1.20 -2.56,-2.20 -2.11,-3.73 -1.67,-5.26 -0.76,-6.50 0.14,-7.74 0.93,-8.58 1.72,-9.42 2.72,-10.31 3.72,-11.20 4.87,-12.16 6.02,-13.12 6.95,-13.79 7.87,-14.45 8.76,-15.10 9.65,-15.75 10.52,-16.38 11.38,-17.02 12.73,-18.01 14.08,-19.01 14.99,-19.61 15.90,-20.22 17.01,-20.94 18.11,-21.67 19.19,-22.19 20.27,-22.71 21.47,-23.28 22.66,-23.84 23.73,-24.25 24.79,-24.65 26.29,-25.18 27.79,-25.70 29.12,-26.23 30.45,-26.76 32.14,-27.29 33.82,-27.81 35.18,-28.09 36.54,-28.38 38.08,-28.47 39.61,-28.55 40.76,-28.57 41.91,-28.59 43.43,-28.61 44.95,-28.62 46.68,-28.59 48.41,-28.56 49.51,-28.53 50.62,-28.49 52.96,-28.28 55.30,-28.07 56.40,-27.84 57.51,-27.61 59.72,-27.19 61.94,-26.78 63.64,-26.51 65.34,-26.24 66.39,-26.09 67.44,-25.94 68.99,-25.72 70.54,-25.50 72.20,-25.27 73.86,-25.03 75.49,-24.80 77.13,-24.56 79.21,-24.11 81.29,-23.67 83.12,-23.29 84.94,-22.91 86.69,-22.56 88.44,-22.22 89.97,-21.96 91.50,-21.70 92.99,-21.68 94.49,-21.66 95.55,-21.68 96.61,-21.70 98.07,-21.71 99.52,-21.71 100.97,-22.21 102.43,-22.70 104.13,-23.59 105.84,-24.47 107.96,-25.50 110.09,-26.52 111.80,-27.38 113.50,-28.23 114.80,-28.96 116.11,-29.68 117.10,-30.25 118.10,-30.82 119.12,-31.55 120.15,-32.29 121.35,-32.44 122.54,-32.60 122.71,-33.82 122.87,-35.04 123.85,-34.20 124.82,-33.36 125.71,-32.59 126.60,-31.82 128.02,-30.75 129.45,-29.67 130.77,-28.77 132.10,-27.86 133.72,-26.90 135.34,-25.94 136.64,-25.35 137.94,-24.76 139.18,-24.25 140.42,-23.74 141.99,-23.20 143.57,-22.65 144.74,-22.31 145.90,-21.96 147.10,-21.75 148.30,-21.54 149.56,-21.45 150.81,-21.36 152.19,-21.36 153.56,-21.36 155.04,-21.38 156.51,-21.39 157.59,-21.39 158.67,-21.40 160.62,-21.35 162.56,-21.30 163.90,-21.30 165.24,-21.30 166.53,-21.31 167.83,-21.31 169.11,-21.31 170.40,-21.32 171.80,-21.31 173.19,-21.31 174.84,-21.29 176.48,-21.28 178.18,-21.26 179.87,-21.25 181.52,-21.24 183.17,-21.23 184.52,-21.17 185.86,-21.11 187.15,-21.00 188.44,-20.89 189.52,-20.77 190.59,-20.65 193.08,-20.26 195.57,-19.86 197.97,-19.55 200.38,-19.24 201.72,-19.05 203.07,-18.86 204.98,-18.63 206.88,-18.40 208.50,-18.30 210.12,-18.19 211.71,-18.06 213.31,-17.93 214.37,-17.82 215.43,-17.72 217.41,-17.41 219.39,-17.11 221.70,-16.73 224.00,-16.35 225.36,-15.98 226.71,-15.62 227.82,-15.29 228.92,-14.96 230.70,-14.35 232.47,-13.75 233.83,-13.18 235.18,-12.60 236.22,-12.20 237.25,-11.79 238.33,-11.26 239.42,-10.72 241.01,-9.80 242.61,-8.87 243.71,-8.19 244.80,-7.51 247.33,-5.21 249.87,-2.90 249.95,-2.35 250.03,-1.80 249.92,-1.25 249.82,-0.70 249.55,-0.21 249.28,0.27 248.86,0.65 248.45,1.02 247.94,1.25 247.42,1.47 246.87,1.52 246.31,1.57 245.77,1.44 245.22,1.30 244.75,1.01 244.28,0.71 243.92,0.27 243.57,-0.15 243.38,-0.67 243.18,-1.20 243.16,-1.76 243.14,-2.32 243.30,-2.85 243.46,-3.39 243.79,-3.84 244.11,-4.30 244.56,-4.63 245.02,-4.96 245.55,-5.12 246.08,-5.29 246.64,-5.28 247.20,-5.27 247.73,-5.08 248.25,-4.89 248.69,-4.54 249.13,-4.19 249.43,-3.72 249.74,-3.25 249.88,-2.71 250.01,-2.17 249.97,-1.61 249.93,-1.05 249.71,-0.54 249.49,-0.02 249.12,0.38 248.75,0.80 248.27,1.08 247.78,1.36 247.23,1.47 246.68,1.58 246.13,1.50 245.57,1.43 245.07,1.19 244.57,0.94 244.17,0.55 243.77,0.15 243.52,-0.34 243.27,-0.84 243.27,-0.83 243.27,-0.83 241.97,-1.47 240.67,-2.10 239.64,-2.84 238.61,-3.59 237.63,-4.24 236.64,-4.89 235.13,-5.69 233.62,-6.49 232.54,-7.05 231.45,-7.62 230.17,-8.20 228.89,-8.77 227.05,-9.36 225.21,-9.94 224.17,-10.21 223.13,-10.48 220.82,-10.79 218.52,-11.10 216.66,-11.37 214.81,-11.64 213.11,-11.82 211.41,-11.99 209.84,-12.22 208.28,-12.44 207.22,-12.52 206.16,-12.60 204.28,-12.88 202.40,-13.17 201.03,-13.30 199.66,-13.43 197.23,-13.65 194.79,-13.87 193.27,-13.99 191.74,-14.11 189.89,-14.31 188.03,-14.51 186.95,-14.55 185.86,-14.60 184.52,-14.54 183.17,-14.48 181.52,-14.47 179.87,-14.46 178.18,-14.45 176.48,-14.43 174.84,-14.42 173.19,-14.40 171.80,-14.40 170.40,-14.39 169.11,-14.39 167.83,-14.40 166.53,-14.40 165.24,-14.40 163.90,-14.40 162.56,-14.41 160.62,-14.36 158.67,-14.31 157.59,-14.31 156.51,-14.32 155.02,-14.34 153.53,-14.35 152.02,-14.39 150.50,-14.43 149.03,-14.58 147.56,-14.72 146.35,-14.95 145.14,-15.17 143.96,-15.51 142.78,-15.84 141.41,-16.28 140.05,-16.73 138.39,-17.32 136.74,-17.92 135.22,-18.60 133.71,-19.28 132.13,-20.08 130.54,-20.88 129.51,-21.42 128.47,-21.97 127.11,-22.84 125.76,-23.72 123.87,-24.95 121.99,-26.19 120.68,-27.28 119.37,-28.37 118.47,-29.22 117.56,-30.06 116.96,-30.96 116.35,-31.86 116.21,-33.31 116.07,-34.75 116.45,-35.79 116.84,-36.83 118.80,-37.57 120.76,-38.30 121.94,-37.86 123.12,-37.41 124.07,-36.48 125.02,-35.56 125.62,-34.48 126.22,-33.40 126.24,-31.91 126.26,-30.43 125.82,-29.37 125.38,-28.31 124.30,-27.33 123.22,-26.36 122.26,-25.76 121.30,-25.16 120.18,-24.59 119.05,-24.01 117.69,-23.31 116.32,-22.61 114.62,-21.75 112.92,-20.90 110.93,-19.82 108.94,-18.73 107.89,-18.12 106.83,-17.50 105.01,-16.63 103.19,-15.76 102.16,-15.45 101.12,-15.15 99.60,-15.08 98.08,-15.02 96.78,-15.04 95.49,-15.06 94.35,-15.10 93.21,-15.14 91.76,-15.27 90.32,-15.40 88.79,-15.69 87.27,-15.99 85.36,-16.35 83.45,-16.72 81.77,-17.08 80.08,-17.44 78.17,-17.82 76.25,-18.19 74.63,-18.45 73.00,-18.70 71.29,-18.95 69.59,-19.21 68.12,-19.47 66.66,-19.72 65.51,-19.85 64.36,-19.98 62.68,-20.28 61.01,-20.57 59.57,-20.72 58.13,-20.87 56.36,-21.19 54.59,-21.51 52.61,-21.58 50.62,-21.65 49.51,-21.61 48.41,-21.58 46.68,-21.55 44.96,-21.52 43.46,-21.53 41.96,-21.53 40.88,-21.53 39.80,-21.52 38.22,-21.38 36.63,-21.25 35.19,-20.88 33.75,-20.52 32.38,-20.01 31.00,-19.50 29.48,-18.96 27.95,-18.43 26.68,-18.02 25.40,-17.60 24.29,-17.10 23.17,-16.59 22.00,-15.93 20.82,-15.27 19.51,-14.38 18.20,-13.48 16.81,-12.47 15.41,-11.46 14.13,-10.62 12.84,-9.79 11.84,-9.16 10.84,-8.53 9.56,-7.61 8.28,-6.70 7.14,-5.87 6.01,-5.04 5.14,-4.25 4.28,-3.47 3.57,-2.61 2.86,-1.75 2.75,-0.77 2.65,0.19 2.59,0.51 2.53,0.82 2.39,1.12 2.26,1.41 2.06,1.66 1.85,1.91 1.60,2.10 1.34,2.30 1.05,2.42 0.75,2.55 0.44,2.61 0.12,2.66 -0.19,2.63 -0.51,2.61 -0.82,2.51 -1.12,2.41 -1.40,2.24 -1.67,2.07 -1.89,1.84 -2.12,1.61 -2.28,1.33 -2.44,1.05 -2.53,0.75 -2.62,0.44 -2.64,0.12 -2.65,-0.19 -2.65,-0.19 L -2.65,-0.19 Z\"\/><\/g><g transform=\"translate(331.58938407869573 89.07176612885542) rotate(0 172.39590454101562 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#868e96\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">.feed.post\/3lzy2ji4nms2z<\/text><\/g><g transform=\"translate(10 89.36299530115593) rotate(0 32.40998077392578 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#868e96\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">at:\/\/<\/text><\/g><g transform=\"translate(202.20795004433603 89.03669325972533) rotate(0 7.853996276855469 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#868e96\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">\/<\/text><\/g><g transform=\"translate(216.6579406465171 89.18857126772946) rotate(0 57.189979553222656 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#228be6\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">app.bsky<\/text><\/g><g transform=\"translate(74.9183298167045 89.16372756630062) rotate(0 63.95197296142578 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#7950f2\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">ruuuuu.de<\/text><\/g><\/svg><\/span><\/p>\n<p><strong>The user is the authority for their own data.<\/strong> Whoever\u2019s <em>hosting<\/em> the data could change over time, and is <em>not<\/em> directly included in an <code>at:\/\/<\/code> URI. To find out the actual physical server hosting that JSON, you\u2019re gonna need to take a few steps.<\/p>\n<hr\/>\n<h3 id=\"a-post-in-the-atmosphere\"><a target=\"_blank\" target=\"_self\" class=\"linked-heading scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"#a-post-in-the-atmosphere\">A Post in the Atmosphere<\/a><\/h3>\n<p>Let\u2019s try to resolve this <code>at:\/\/<\/code> URI to the piece of JSON it represents:<\/p>\n<p><span style=\"filter:var(--svg-filter);display:inline-block\" alt=\"at:\/\/ruuuuu.de\/app.bsky.feed.post\/3lzy2ji4nms2z\"><?xml version=\"1.0\" standalone=\"no\"????><\/p>\n<p><svg style=\"max-width: 100%; width: 100%; height: auto;\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewbox=\"0 0 686.381193160727 134.36299530115593\" width=\"1372.762386321454\" height=\"268.72599060231187\"><!-- svg-source:excalidraw --><defs\/><g transform=\"translate(269.845485107915 13.779591306684324) rotate(0 75.01197052001953 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#228be6\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">the format<\/text><\/g><g transform=\"translate(75.37369566187408 85.60488354179506) rotate(0 66.51214547980635 -14.811747175490382)\" stroke=\"none\"><path fill=\"#7950f2\" d=\"M -2.59,0 Q -2.59,0 -2.55,-1.63 -2.50,-3.27 -2.53,-4.37 -2.57,-5.47 -2.65,-6.96 -2.73,-8.45 -2.82,-9.89 -2.91,-11.33 -2.35,-12.80 -1.79,-14.28 -0.99,-15.07 -0.20,-15.87 1.50,-16.71 3.20,-17.56 4.49,-18.07 5.78,-18.58 7.35,-19.05 8.91,-19.52 11.19,-19.90 13.48,-20.29 14.64,-20.39 15.81,-20.49 18.30,-20.59 20.79,-20.69 22.05,-20.69 23.31,-20.69 25.31,-20.72 27.30,-20.75 29.89,-20.68 32.47,-20.62 33.64,-20.62 34.80,-20.62 35.92,-20.62 37.03,-20.63 38.12,-20.63 39.21,-20.64 40.78,-20.76 42.35,-20.89 44.00,-21.04 45.66,-21.19 48.05,-21.57 50.45,-21.96 52.34,-22.39 54.24,-22.82 55.82,-23.31 57.40,-23.80 58.61,-24.20 59.81,-24.60 61.29,-25.04 62.78,-25.49 64.32,-26.11 65.86,-26.73 66.92,-27.21 67.97,-27.69 69.21,-27.49 70.45,-27.29 71.38,-26.63 72.30,-25.96 73.09,-24.95 73.87,-23.93 74.70,-23.07 75.52,-22.21 76.54,-21.55 77.57,-20.89 78.95,-20.55 80.33,-20.20 81.38,-19.98 82.43,-19.77 84.15,-19.54 85.87,-19.31 87.75,-19.07 89.63,-18.84 91.45,-18.68 93.28,-18.52 94.34,-18.38 95.40,-18.24 97.49,-18.07 99.58,-17.89 100.68,-17.76 101.78,-17.62 104.42,-17.31 107.05,-16.99 109.22,-16.72 111.38,-16.44 113.17,-16.21 114.97,-15.98 116.09,-15.75 117.20,-15.52 118.70,-15.19 120.20,-14.85 121.85,-14.41 123.51,-13.97 124.54,-13.66 125.58,-13.34 126.85,-12.86 128.13,-12.38 129.08,-11.79 130.02,-11.20 130.85,-10.47 131.67,-9.74 132.50,-8.87 133.33,-8.01 134.04,-7.15 134.75,-6.30 134.75,-5.40 134.75,-4.50 134.90,-4.10 135.06,-3.70 135.11,-3.28 135.17,-2.86 135.12,-2.44 135.07,-2.01 134.92,-1.61 134.78,-1.21 134.54,-0.86 134.30,-0.51 133.98,-0.22 133.66,0.05 133.29,0.25 132.91,0.45 132.50,0.56 132.09,0.66 131.66,0.67 131.24,0.67 130.82,0.57 130.41,0.47 130.03,0.28 129.65,0.09 129.33,-0.18 129.01,-0.46 128.76,-0.81 128.52,-1.16 128.80,-0.77 129.09,-0.37 128.77,-0.84 128.44,-1.31 128.28,-1.86 128.12,-2.41 128.15,-2.98 128.17,-3.55 128.38,-4.09 128.58,-4.62 128.95,-5.06 129.31,-5.50 129.80,-5.80 130.29,-6.10 130.85,-6.23 131.40,-6.36 131.97,-6.30 132.54,-6.25 133.06,-6.01 133.58,-5.78 134.00,-5.39 134.42,-5.00 134.70,-4.50 134.97,-3.99 135.07,-3.43 135.17,-2.87 135.08,-2.30 134.99,-1.74 134.73,-1.23 134.47,-0.72 134.06,-0.32 133.65,0.06 133.13,0.31 132.61,0.56 132.05,0.62 131.48,0.69 130.92,0.57 130.36,0.46 129.87,0.17 129.37,-0.11 129.00,-0.54 128.62,-0.98 128.41,-1.51 128.19,-2.03 128.15,-2.60 128.11,-3.18 128.26,-3.73 128.41,-4.28 128.72,-4.76 129.04,-5.23 129.49,-5.58 129.94,-5.94 130.48,-6.12 131.02,-6.31 131.60,-6.32 132.17,-6.32 132.71,-6.15 133.25,-5.97 134.00,-5.23 134.75,-4.50 134.90,-4.10 135.06,-3.71 135.11,-3.28 135.17,-2.86 135.12,-2.44 135.07,-2.01 134.92,-1.61 134.78,-1.21 134.54,-0.86 134.30,-0.51 133.98,-0.22 133.66,0.05 133.29,0.25 132.91,0.45 132.50,0.56 132.09,0.66 131.66,0.67 131.24,0.67 130.82,0.57 130.41,0.48 130.03,0.28 129.65,0.09 129.33,-0.18 129.01,-0.46 128.76,-0.81 128.52,-1.16 128.45,-2.18 128.39,-3.19 127.45,-4.25 126.51,-5.30 125.72,-6.04 124.92,-6.77 123.78,-7.19 122.63,-7.60 121.59,-7.97 120.55,-8.33 118.92,-8.80 117.30,-9.28 115.66,-9.64 114.02,-10.01 112.34,-10.28 110.67,-10.55 108.54,-10.82 106.42,-11.09 104.93,-11.17 103.43,-11.24 102.26,-11.29 101.09,-11.34 99.04,-11.52 97.00,-11.70 94.82,-11.84 92.64,-11.98 90.71,-12.11 88.78,-12.24 87.09,-12.43 85.39,-12.62 83.32,-12.83 81.26,-13.05 79.35,-13.36 77.45,-13.68 75.89,-14.21 74.34,-14.74 72.89,-15.65 71.44,-16.57 70.52,-17.47 69.60,-18.37 68.54,-19.57 67.49,-20.78 66.86,-21.64 66.23,-22.51 65.38,-24.04 64.52,-25.57 64.39,-27.53 64.25,-29.49 64.76,-30.64 65.28,-31.79 67.38,-32.45 69.49,-33.12 70.77,-32.73 72.06,-32.34 73.27,-31.26 74.48,-30.18 74.77,-28.46 75.06,-26.74 74.47,-25.46 73.88,-24.19 72.73,-23.24 71.59,-22.30 70.53,-21.82 69.47,-21.34 68.07,-20.81 66.68,-20.28 65.45,-19.80 64.22,-19.32 62.94,-19.00 61.66,-18.67 60.37,-18.33 59.07,-18.00 57.35,-17.54 55.63,-17.08 53.63,-16.67 51.63,-16.26 50.15,-15.91 48.66,-15.55 47.30,-15.33 45.93,-15.10 44.22,-15.01 42.51,-14.93 40.87,-14.89 39.22,-14.84 38.12,-14.85 37.03,-14.86 35.92,-14.86 34.81,-14.86 33.64,-14.86 32.47,-14.86 29.90,-14.79 27.33,-14.72 25.37,-14.73 23.41,-14.73 22.20,-14.69 20.99,-14.65 19.66,-14.55 18.34,-14.46 16.43,-14.26 14.52,-14.06 12.65,-13.69 10.79,-13.33 9.41,-12.96 8.03,-12.59 6.80,-12.15 5.56,-11.71 4.24,-11.47 2.91,-11.23 2.82,-9.84 2.73,-8.45 2.65,-6.96 2.57,-5.47 2.53,-4.37 2.50,-3.27 2.55,-1.63 2.59,0 2.55,0.31 2.52,0.62 2.40,0.91 2.29,1.20 2.12,1.46 1.94,1.72 1.70,1.92 1.47,2.13 1.19,2.28 0.92,2.42 0.61,2.50 0.31,2.57 -0.00,2.57 -0.31,2.57 -0.61,2.50 -0.92,2.42 -1.19,2.28 -1.47,2.13 -1.70,1.92 -1.94,1.72 -2.12,1.46 -2.29,1.20 -2.40,0.91 -2.52,0.62 -2.55,0.31 -2.59,-0.00 -2.59,-0.00 L -2.59,0 Z\"\/><\/g><g transform=\"translate(75.85317516227951 10) rotate(0 57.35797882080078 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#7950f2\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">the user<\/text><\/g><g transform=\"translate(220.25062721840732 89.60220950083522) rotate(0 123.21464997310977 -17.40024157983953)\" stroke=\"none\"><path fill=\"#228be6\" d=\"M -2.65,-0.19 Q -2.65,-0.19 -2.61,-1.20 -2.56,-2.20 -2.11,-3.73 -1.67,-5.26 -0.76,-6.50 0.14,-7.74 0.93,-8.58 1.72,-9.42 2.72,-10.31 3.72,-11.20 4.87,-12.16 6.02,-13.12 6.95,-13.79 7.87,-14.45 8.76,-15.10 9.65,-15.75 10.52,-16.38 11.38,-17.02 12.73,-18.01 14.08,-19.01 14.99,-19.61 15.90,-20.22 17.01,-20.94 18.11,-21.67 19.19,-22.19 20.27,-22.71 21.47,-23.28 22.66,-23.84 23.73,-24.25 24.79,-24.65 26.29,-25.18 27.79,-25.70 29.12,-26.23 30.45,-26.76 32.14,-27.29 33.82,-27.81 35.18,-28.09 36.54,-28.38 38.08,-28.47 39.61,-28.55 40.76,-28.57 41.91,-28.59 43.43,-28.61 44.95,-28.62 46.68,-28.59 48.41,-28.56 49.51,-28.53 50.62,-28.49 52.96,-28.28 55.30,-28.07 56.40,-27.84 57.51,-27.61 59.72,-27.19 61.94,-26.78 63.64,-26.51 65.34,-26.24 66.39,-26.09 67.44,-25.94 68.99,-25.72 70.54,-25.50 72.20,-25.27 73.86,-25.03 75.49,-24.80 77.13,-24.56 79.21,-24.11 81.29,-23.67 83.12,-23.29 84.94,-22.91 86.69,-22.56 88.44,-22.22 89.97,-21.96 91.50,-21.70 92.99,-21.68 94.49,-21.66 95.55,-21.68 96.61,-21.70 98.07,-21.71 99.52,-21.71 100.97,-22.21 102.43,-22.70 104.13,-23.59 105.84,-24.47 107.96,-25.50 110.09,-26.52 111.80,-27.38 113.50,-28.23 114.80,-28.96 116.11,-29.68 117.10,-30.25 118.10,-30.82 119.12,-31.55 120.15,-32.29 121.35,-32.44 122.54,-32.60 122.71,-33.82 122.87,-35.04 123.85,-34.20 124.82,-33.36 125.71,-32.59 126.60,-31.82 128.02,-30.75 129.45,-29.67 130.77,-28.77 132.10,-27.86 133.72,-26.90 135.34,-25.94 136.64,-25.35 137.94,-24.76 139.18,-24.25 140.42,-23.74 141.99,-23.20 143.57,-22.65 144.74,-22.31 145.90,-21.96 147.10,-21.75 148.30,-21.54 149.56,-21.45 150.81,-21.36 152.19,-21.36 153.56,-21.36 155.04,-21.38 156.51,-21.39 157.59,-21.39 158.67,-21.40 160.62,-21.35 162.56,-21.30 163.90,-21.30 165.24,-21.30 166.53,-21.31 167.83,-21.31 169.11,-21.31 170.40,-21.32 171.80,-21.31 173.19,-21.31 174.84,-21.29 176.48,-21.28 178.18,-21.26 179.87,-21.25 181.52,-21.24 183.17,-21.23 184.52,-21.17 185.86,-21.11 187.15,-21.00 188.44,-20.89 189.52,-20.77 190.59,-20.65 193.08,-20.26 195.57,-19.86 197.97,-19.55 200.38,-19.24 201.72,-19.05 203.07,-18.86 204.98,-18.63 206.88,-18.40 208.50,-18.30 210.12,-18.19 211.71,-18.06 213.31,-17.93 214.37,-17.82 215.43,-17.72 217.41,-17.41 219.39,-17.11 221.70,-16.73 224.00,-16.35 225.36,-15.98 226.71,-15.62 227.82,-15.29 228.92,-14.96 230.70,-14.35 232.47,-13.75 233.83,-13.18 235.18,-12.60 236.22,-12.20 237.25,-11.79 238.33,-11.26 239.42,-10.72 241.01,-9.80 242.61,-8.87 243.71,-8.19 244.80,-7.51 247.33,-5.21 249.87,-2.90 249.95,-2.35 250.03,-1.80 249.92,-1.25 249.82,-0.70 249.55,-0.21 249.28,0.27 248.86,0.65 248.45,1.02 247.94,1.25 247.42,1.47 246.87,1.52 246.31,1.57 245.77,1.44 245.22,1.30 244.75,1.01 244.28,0.71 243.92,0.27 243.57,-0.15 243.38,-0.67 243.18,-1.20 243.16,-1.76 243.14,-2.32 243.30,-2.85 243.46,-3.39 243.79,-3.84 244.11,-4.30 244.56,-4.63 245.02,-4.96 245.55,-5.12 246.08,-5.29 246.64,-5.28 247.20,-5.27 247.73,-5.08 248.25,-4.89 248.69,-4.54 249.13,-4.19 249.43,-3.72 249.74,-3.25 249.88,-2.71 250.01,-2.17 249.97,-1.61 249.93,-1.05 249.71,-0.54 249.49,-0.02 249.12,0.38 248.75,0.80 248.27,1.08 247.78,1.36 247.23,1.47 246.68,1.58 246.13,1.50 245.57,1.43 245.07,1.19 244.57,0.94 244.17,0.55 243.77,0.15 243.52,-0.34 243.27,-0.84 243.27,-0.83 243.27,-0.83 241.97,-1.47 240.67,-2.10 239.64,-2.84 238.61,-3.59 237.63,-4.24 236.64,-4.89 235.13,-5.69 233.62,-6.49 232.54,-7.05 231.45,-7.62 230.17,-8.20 228.89,-8.77 227.05,-9.36 225.21,-9.94 224.17,-10.21 223.13,-10.48 220.82,-10.79 218.52,-11.10 216.66,-11.37 214.81,-11.64 213.11,-11.82 211.41,-11.99 209.84,-12.22 208.28,-12.44 207.22,-12.52 206.16,-12.60 204.28,-12.88 202.40,-13.17 201.03,-13.30 199.66,-13.43 197.23,-13.65 194.79,-13.87 193.27,-13.99 191.74,-14.11 189.89,-14.31 188.03,-14.51 186.95,-14.55 185.86,-14.60 184.52,-14.54 183.17,-14.48 181.52,-14.47 179.87,-14.46 178.18,-14.45 176.48,-14.43 174.84,-14.42 173.19,-14.40 171.80,-14.40 170.40,-14.39 169.11,-14.39 167.83,-14.40 166.53,-14.40 165.24,-14.40 163.90,-14.40 162.56,-14.41 160.62,-14.36 158.67,-14.31 157.59,-14.31 156.51,-14.32 155.02,-14.34 153.53,-14.35 152.02,-14.39 150.50,-14.43 149.03,-14.58 147.56,-14.72 146.35,-14.95 145.14,-15.17 143.96,-15.51 142.78,-15.84 141.41,-16.28 140.05,-16.73 138.39,-17.32 136.74,-17.92 135.22,-18.60 133.71,-19.28 132.13,-20.08 130.54,-20.88 129.51,-21.42 128.47,-21.97 127.11,-22.84 125.76,-23.72 123.87,-24.95 121.99,-26.19 120.68,-27.28 119.37,-28.37 118.47,-29.22 117.56,-30.06 116.96,-30.96 116.35,-31.86 116.21,-33.31 116.07,-34.75 116.45,-35.79 116.84,-36.83 118.80,-37.57 120.76,-38.30 121.94,-37.86 123.12,-37.41 124.07,-36.48 125.02,-35.56 125.62,-34.48 126.22,-33.40 126.24,-31.91 126.26,-30.43 125.82,-29.37 125.38,-28.31 124.30,-27.33 123.22,-26.36 122.26,-25.76 121.30,-25.16 120.18,-24.59 119.05,-24.01 117.69,-23.31 116.32,-22.61 114.62,-21.75 112.92,-20.90 110.93,-19.82 108.94,-18.73 107.89,-18.12 106.83,-17.50 105.01,-16.63 103.19,-15.76 102.16,-15.45 101.12,-15.15 99.60,-15.08 98.08,-15.02 96.78,-15.04 95.49,-15.06 94.35,-15.10 93.21,-15.14 91.76,-15.27 90.32,-15.40 88.79,-15.69 87.27,-15.99 85.36,-16.35 83.45,-16.72 81.77,-17.08 80.08,-17.44 78.17,-17.82 76.25,-18.19 74.63,-18.45 73.00,-18.70 71.29,-18.95 69.59,-19.21 68.12,-19.47 66.66,-19.72 65.51,-19.85 64.36,-19.98 62.68,-20.28 61.01,-20.57 59.57,-20.72 58.13,-20.87 56.36,-21.19 54.59,-21.51 52.61,-21.58 50.62,-21.65 49.51,-21.61 48.41,-21.58 46.68,-21.55 44.96,-21.52 43.46,-21.53 41.96,-21.53 40.88,-21.53 39.80,-21.52 38.22,-21.38 36.63,-21.25 35.19,-20.88 33.75,-20.52 32.38,-20.01 31.00,-19.50 29.48,-18.96 27.95,-18.43 26.68,-18.02 25.40,-17.60 24.29,-17.10 23.17,-16.59 22.00,-15.93 20.82,-15.27 19.51,-14.38 18.20,-13.48 16.81,-12.47 15.41,-11.46 14.13,-10.62 12.84,-9.79 11.84,-9.16 10.84,-8.53 9.56,-7.61 8.28,-6.70 7.14,-5.87 6.01,-5.04 5.14,-4.25 4.28,-3.47 3.57,-2.61 2.86,-1.75 2.75,-0.77 2.65,0.19 2.59,0.51 2.53,0.82 2.39,1.12 2.26,1.41 2.06,1.66 1.85,1.91 1.60,2.10 1.34,2.30 1.05,2.42 0.75,2.55 0.44,2.61 0.12,2.66 -0.19,2.63 -0.51,2.61 -0.82,2.51 -1.12,2.41 -1.40,2.24 -1.67,2.07 -1.89,1.84 -2.12,1.61 -2.28,1.33 -2.44,1.05 -2.53,0.75 -2.62,0.44 -2.64,0.12 -2.65,-0.19 -2.65,-0.19 L -2.65,-0.19 Z\"\/><\/g><g transform=\"translate(331.58938407869573 89.07176612885542) rotate(0 172.39590454101562 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#868e96\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">.feed.post\/3lzy2ji4nms2z<\/text><\/g><g transform=\"translate(10 89.36299530115593) rotate(0 32.40998077392578 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#868e96\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">at:\/\/<\/text><\/g><g transform=\"translate(202.20795004433603 89.03669325972533) rotate(0 7.853996276855469 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#868e96\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">\/<\/text><\/g><g transform=\"translate(216.6579406465171 89.18857126772946) rotate(0 57.189979553222656 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#228be6\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">app.bsky<\/text><\/g><g transform=\"translate(74.9183298167045 89.16372756630062) rotate(0 63.95197296142578 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#7950f2\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">ruuuuu.de<\/text><\/g><\/svg><\/span><\/p>\n<p>An easy way to resolve an <code>at:\/\/<\/code> URI is to use an <a target=\"_blank\" target=\"_blank\" class=\" scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"https:\/\/sdk.blue\/\">SDK<\/a> or a client app. Let\u2019s try an online client, for example, <a target=\"_blank\" target=\"_blank\" class=\" scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"https:\/\/pdsls.dev\/at:\/\/ruuuuu.de\/app.bsky.feed.post\/3lzy2ji4nms2z\">pdsls<\/a> or <a target=\"_blank\" target=\"_blank\" class=\" scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"https:\/\/atproto.at\/viewer?uri=at:\/\/ruuuuu.de\/app.bsky.feed.post\/3lzy2ji4nms2z\">Taproot<\/a> or <a target=\"_blank\" target=\"_blank\" class=\" scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"https:\/\/atproto-browser.vercel.app\/at\/ruuuuu.de\/app.bsky.feed.post\/3lzy2ji4nms2z\">atproto-browser<\/a>. They\u2019ll figure out the physical server where its JSON is currently hosted, and show that JSON for you.<\/p>\n<p><strong>The above <code>at:\/\/<\/code> URI points at this JSON, wherever it is currently being hosted:<\/strong><\/p>\n<figure data-rehype-pretty-code-figure=\"\" wp_automatic_readability=\"10\">\n<pre style=\"background-color:var(--code-bg);color:#D6D9E0\" tabindex=\"0\" data-language=\"js\" data-theme=\"Overnight\"><code data-language=\"js\" data-theme=\"Overnight\" style=\"display:grid\"><span data-line=\"\"><span style=\"color:#C792EA\">{<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#C792EA\">  \"<\/span><span style=\"color:#ECC48D\">uri<\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#CED2D6\">: <\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#ECC48D\">at:\/\/did:web:iam.ruuuuu.de\/app.bsky.feed.post\/3lzy2ji4nms2z<\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#C792EA\">,<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#C792EA\">  \"<\/span><span style=\"color:#ECC48D\">cid<\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#CED2D6\">: <\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#ECC48D\">bafyreiae4ehmkk4rtajs5ncagjhrsv6rj3v6fggphlbpyfco4dzddp42nu<\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#C792EA\">,<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#C792EA\">  \"<\/span><span style=\"color:#ECC48D\">value<\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#CED2D6\">: <\/span><span style=\"color:#C792EA\">{<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#C792EA\">    \"<\/span><span style=\"color:#ECC48D\">text<\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#C792EA\">:<\/span><span style=\"color:#C792EA\"> \"<\/span><span style=\"color:#ECC48D\">posting from did:web, like a boss<\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#C792EA\">,<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#C792EA\">    \"<\/span><span style=\"color:#ECC48D\">$type<\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#C792EA\">:<\/span><span style=\"color:#C792EA\"> \"<\/span><span style=\"color:#ECC48D\">app.bsky.feed.post<\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#C792EA\">,<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#C792EA\">    \"<\/span><span style=\"color:#ECC48D\">langs<\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#C792EA\">:<\/span><span style=\"color:#C792EA\"> [<\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#ECC48D\">en<\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#C792EA\">],<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#C792EA\">    \"<\/span><span style=\"color:#ECC48D\">createdAt<\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#C792EA\">:<\/span><span style=\"color:#C792EA\"> \"<\/span><span style=\"color:#ECC48D\">2025-09-29T12:53:23.048Z<\/span><span style=\"color:#C792EA\">\"<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#C792EA\">  }<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#C792EA\">}<\/span><\/span><\/code><\/pre>\n<\/figure>\n<p>You can guess by the <code>$type<\/code> field being <code>\"app.bsky.feed.post\"<\/code> that this is some kind of a post (which might explain why it has fields like <code>text<\/code> and <code>langs<\/code>).<\/p>\n<p>However, note that this piece of JSON represents a certain social media post <em>itself<\/em>, not a web page or a piece of some app. <strong>It\u2019s pure data as a piece of JSON<\/strong>, not a piece of UI. You may think of the <code>$type<\/code> stating the data <em>format<\/em>; the <code>app.bsky.*<\/code> prefix tells us that the <code>bsky.app<\/code> application might know something about what to do with it. Other applications <a target=\"_blank\" target=\"_blank\" class=\" scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"https:\/\/bsky.app\/profile\/o.simardcasanova.net\/post\/3luujudlr5c2j\">may also<\/a> consume and produce data in this format.<\/p>\n<p>A careful reader might notice that the <code>uri<\/code> in the JSON block is <em>also<\/em> an <code>at:\/\/<\/code> URI but it\u2019s slightly different from the original <code>at:\/\/<\/code> URI we requested:<\/p>\n<figure data-rehype-pretty-code-figure=\"\" wp_automatic_readability=\"4\">\n<pre style=\"background-color:var(--code-bg);color:#D6D9E0\" tabindex=\"0\" data-language=\"js\" data-theme=\"Overnight\"><code data-language=\"js\" data-theme=\"Overnight\" style=\"display:grid\"><span data-line=\"\"><span style=\"color:#637777\">\/\/ What's at:\/\/ruuuuu.de\/app.bsky.feed.post\/3lzy2ji4nms2z ?<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#C792EA\">{<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#C792EA\">  \"<\/span><span style=\"color:#ECC48D\">uri<\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#CED2D6\">: <\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#ECC48D\">at:\/\/did:web:iam.ruuuuu.de\/app.bsky.feed.post\/3lzy2ji4nms2z<\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#C792EA\">,<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#637777\">  \/\/ ...<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#C792EA\">}<\/span><\/span><\/code><\/pre>\n<\/figure>\n<p>In particular, the short <code>ruuuuu.de<\/code> authority has expanded into a longer <code>did:web:iam.ruuuuu.de<\/code> authority. Maybe that\u2019s the physical host?<\/p>\n<p><strong>Actually, no, that\u2019s not the physical host either<\/strong>\u2014it\u2019s something called an <em>identity<\/em>. Turns out, resolving an <code>at:\/\/<\/code> URI is done in three distinct steps:<\/p>\n<ol>\n<li>Resolve the handle to an identity <em>(\u201cwho are you?\u201d)<\/em><\/li>\n<li>Resolve that identity to a hosting <em>(\u201cwho holds your data?\u201d)<\/em><\/li>\n<li>Request the JSON from that hosting <em>(\u201cwhat is the data?\u201d)<\/em><\/li>\n<\/ol>\n<p>Let\u2019s go through each of these steps and see how they work.<\/p>\n<hr\/>\n<h3 id=\"from-handles-to-identities\"><a target=\"_blank\" target=\"_self\" class=\"linked-heading scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"#from-handles-to-identities\">From Handles to Identities<\/a><\/h3>\n<p>The <code>at:\/\/<\/code> URIs you\u2019ve seen earlier are fragile because they use handles.<\/p>\n<p>Here, <code>ruuuuu.de<\/code>, <code>danabra.mov<\/code>, and <code>tessa.germnetwork.com<\/code> are handles:<\/p>\n<p><em>(Read more about <a target=\"_blank\" class=\" scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"http:\/\/overreacted.io\/open-social\/#open-social\">domains as \u201cinternet handles\u201d here.<\/a>)<\/em><\/p>\n<p>The user may choose to change their <code>at:\/\/<\/code> handle later, and it is important for that not to break any links between pieces of JSON already on the network.<\/p>\n<p>This is why, before you <em>store<\/em> an <code>at:\/\/<\/code> URI, you should turn it into a canonical form by resolving the handle to something that never changes\u2014an <em>identity<\/em>. An identity is like an account ID, but global and meant for the entire web. There are two mechanisms to resolve a handle to an identity (also known as a \u201c<a target=\"_blank\" target=\"_blank\" class=\" scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"https:\/\/en.wikipedia.org\/wiki\/Decentralized_identifier\">DID<\/a>\u201d):<\/p>\n<ol>\n<li>Query the DNS TXT record at <code>_atproto.<handle\/><\/code> looking for <code>did=???<\/code><\/li>\n<li>Make an HTTPS GET to <code>https:\/\/<handle>\/.well-known\/atproto-did<\/handle><\/code><\/li>\n<\/ol>\n<p>The thing you\u2019re looking for, the DID, is going to have a shape like <code>did:something:whatever<\/code>. (We\u2019ll revisit what that means later.)<\/p>\n<hr\/>\n<p>For example, let\u2019s try to resolve <code>ruuuuu.de<\/code> via the DNS mechanism:<\/p>\n<figure data-rehype-pretty-code-figure=\"\" wp_automatic_readability=\"3\">\n<pre style=\"background-color:var(--code-bg);color:#D6D9E0\" tabindex=\"0\" data-language=\"sh\" data-theme=\"Overnight\"><code data-language=\"sh\" data-theme=\"Overnight\" style=\"display:grid\"><span data-line=\"\"><span style=\"color:#8EACE3\">$<\/span><span style=\"color:#C792EA\"> nslookup<\/span><span style=\"color:#FFA7C4\"> -type=TXT<\/span><span style=\"color:#C792EA\"> _atproto.ruuuuu.de<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">Server:<\/span><span style=\"color:#F78C6C\">\t\t192.168.1.254<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">Address:<\/span><span style=\"color:#C792EA\">\t192.168.1.254#53<\/span><\/span>\n<span data-line=\"\"> <\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">Non-authoritative<\/span><span style=\"color:#C792EA\"> answer:<\/span><\/span>\n<span data-line=\"\" data-highlighted-line=\"\"><span style=\"color:#8EACE3\">_atproto.ruuuuu.de<\/span><span style=\"color:#C792EA\">\ttext<\/span><span style=\"color:#C792EA\"> =<\/span><span style=\"color:#C792EA\"> \"<\/span><span style=\"color:#ECC48D\">did=did:web:iam.ruuuuu.de<\/span><span style=\"color:#C792EA\">\"<\/span><\/span><\/code><\/pre>\n<\/figure>\n<p>Found it!<\/p>\n<p>The <code>ruuuuu.de<\/code> handle <em>claims<\/em> to be owned by <code>did:web:iam.ruuuuu.de<\/code>, whoever that may be. That\u2019s all that we wanted to know at this point:<\/p>\n<p><span style=\"filter:var(--svg-filter);display:inline-block\" alt=\"ruuuuu.de resolves to did:web:iam.ruuuuu.de\"><?xml version=\"1.0\" standalone=\"no\"????><\/p>\n<p><svg style=\"max-width: 450px; width: 100%; height: auto;\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewbox=\"0 0 403.78274038483505 146.0923676561706\" width=\"807.5654807696701\" height=\"292.1847353123412\"><!-- svg-source:excalidraw --><defs\/><g transform=\"translate(75.23901143105832 10.49212766904293) rotate(0 32.40998077392578 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#868e96\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">at:\/\/<\/text><\/g><g transform=\"translate(10 99.8988870211806) rotate(0 32.40998077392578 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#868e96\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">at:\/\/<\/text><\/g><g transform=\"translate(72.14151366488659 101.09236765617061) rotate(0 141.28793334960938 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#7950f2\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">did:web:iam.ruuuuu.de<\/text><\/g><g transform=\"translate(267.44696147539435 10) rotate(0 19.36199188232422 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#868e96\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">\/&#8230;<\/text><\/g><g transform=\"translate(355.0587566201866 99.80260117289026) rotate(0 19.36199188232422 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#868e96\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">\/&#8230;<\/text><\/g><g transform=\"translate(140.15734124776282 10.292859934187618) rotate(0 63.95197296142578 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#7950f2\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">ruuuuu.de<\/text><\/g><g stroke-linecap=\"round\"><g transform=\"translate(191.48154417005935 56.430036990881945) rotate(0 0.4574792503608478 18.199362630477253)\"><path d=\"M0.88 -0.25 C1.16 6.15, 1.06 31.28, 1.14 37.24 M-0.12 -1.43 C0.06 4.74, 0.15 29.27, 0.31 35.57\" stroke=\"#7950f2\" stroke-width=\"2\" fill=\"none\"\/><\/g><g transform=\"translate(191.48154417005935 56.430036990881945) rotate(0 0.4574792503608478 18.199362630477253)\"><path d=\"M-6.53 18.89 C-3.36 23.6, -4.34 26.7, 1.07 35.16 M-6.36 18.02 C-4.57 25.62, -1.37 31.41, 0.32 35.04\" stroke=\"#7950f2\" stroke-width=\"2\" fill=\"none\"\/><\/g><g transform=\"translate(191.48154417005935 56.430036990881945) rotate(0 0.4574792503608478 18.199362630477253)\"><path d=\"M5.92 18.72 C5.88 23.56, 1.7 26.71, 1.07 35.16 M6.09 17.85 C3.29 25.41, 1.91 31.25, 0.32 35.04\" stroke=\"#7950f2\" stroke-width=\"2\" fill=\"none\"\/><\/g><\/g><mask\/><\/svg><\/span><\/p>\n<p><strong>Note this doesn\u2019t <em>prove<\/em> their association yet.<\/strong> We\u2019ll need to verify that whoever controls the <code>did:web:iam.ruuuuu.de<\/code> identity \u201cagrees\u201d with <code>ruuuuu.de<\/code> being their handle. The mapping is bidirectional. But we\u2019ll confirm that in a later step.<\/p>\n<hr\/>\n<p>Now let\u2019s try to resolve <code>danabra.mov<\/code> using the DNS route:<\/p>\n<figure data-rehype-pretty-code-figure=\"\" wp_automatic_readability=\"3\">\n<pre style=\"background-color:var(--code-bg);color:#D6D9E0\" tabindex=\"0\" data-language=\"sh\" data-theme=\"Overnight\"><code data-language=\"sh\" data-theme=\"Overnight\" style=\"display:grid\"><span data-line=\"\"><span style=\"color:#8EACE3\">$<\/span><span style=\"color:#C792EA\"> nslookup<\/span><span style=\"color:#FFA7C4\"> -type=TXT<\/span><span style=\"color:#C792EA\"> _atproto.danabra.mov<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">Server:<\/span><span style=\"color:#F78C6C\">\t\t192.168.1.254<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">Address:<\/span><span style=\"color:#C792EA\">\t192.168.1.254#53<\/span><\/span>\n<span data-line=\"\"> <\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">Non-authoritative<\/span><span style=\"color:#C792EA\"> answer:<\/span><\/span>\n<span data-line=\"\" data-highlighted-line=\"\"><span style=\"color:#8EACE3\">_atproto.danabra.mov<\/span><span style=\"color:#C792EA\">\ttext<\/span><span style=\"color:#C792EA\"> =<\/span><span style=\"color:#C792EA\"> \"<\/span><span style=\"color:#ECC48D\">did=did:plc:fpruhuo22xkm5o7ttr2ktxdo<\/span><span style=\"color:#C792EA\">\"<\/span><\/span><\/code><\/pre>\n<\/figure>\n<p>That also worked! The <code>danabra.mov<\/code> handle claims to be owned by the <code>did:plc:fpruhuo22xkm5o7ttr2ktxdo<\/code> identity, whoever that may be:<\/p>\n<p><span style=\"filter:var(--svg-filter);display:inline-block\" alt=\"danabra.mov resolves to did:plc:fpruhuo22xkm5o7ttr2ktxdo\"><?xml version=\"1.0\" standalone=\"no\"????><\/p>\n<p><svg style=\"max-width: 450px; width: 100%; height: auto;\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewbox=\"0 0 604.3916306925712 152.29345326784187\" width=\"1208.7832613851424\" height=\"304.58690653568374\"><!-- svg-source:excalidraw --><defs\/><g transform=\"translate(127.65595739800483 10.199267734855312) rotate(0 32.40998077392578 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#868e96\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">at:\/\/<\/text><\/g><g transform=\"translate(10 107.22598213647916) rotate(0 32.40998077392578 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#868e96\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">at:\/\/<\/text><\/g><g transform=\"translate(77.18849687948023 107.29345326784187) rotate(0 238.27987670898438 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#be4bdb\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">did:plc:fpruhuo22xkm5o7ttr2ktxdo<\/text><\/g><g transform=\"translate(555.6676469279228 103.79446148765874) rotate(0 19.36199188232422 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#868e96\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">\/&#8230;<\/text><\/g><g transform=\"translate(192.07819346470933 10) rotate(0 81.87196350097656 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#be4bdb\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">danabra.mov<\/text><\/g><g stroke-linecap=\"round\"><g transform=\"translate(257.80954609590844 52.94637102860088) rotate(0 -0.4996832868473575 20.03146835490611)\"><path d=\"M-0.74 -0.6 C-1.13 6.09, -1.97 33.36, -2.05 40.16 M1.07 1.71 C1.02 8.6, 0.64 35.1, 0.11 41.75\" stroke=\"#be4bdb\" stroke-width=\"1\" fill=\"none\"\/><\/g><g transform=\"translate(257.80954609590844 52.94637102860088) rotate(0 -0.4996832868473575 20.03146835490611)\"><path d=\"M-6.94 20.91 C-3.81 28.51, -1.71 36.77, 1.96 40.07 M-5.33 23.53 C-4.91 27.88, -2.14 32.79, 1.06 42.03\" stroke=\"#be4bdb\" stroke-width=\"1\" fill=\"none\"\/><\/g><g transform=\"translate(257.80954609590844 52.94637102860088) rotate(0 -0.4996832868473575 20.03146835490611)\"><path d=\"M6.75 21.48 C5.45 28.81, 3.12 36.88, 1.96 40.07 M8.37 24.1 C5.38 28.43, 4.75 33.19, 1.06 42.03\" stroke=\"#be4bdb\" stroke-width=\"1\" fill=\"none\"\/><\/g><\/g><mask\/><g transform=\"translate(355.99007346395956 10.18969538392048) rotate(0 19.36199188232422 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#868e96\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">\/&#8230;<\/text><\/g><\/svg><\/span><\/p>\n<p>This DID looks a bit different than what you saw earlier but it\u2019s also a valid DID. Again, it\u2019s important to emphasize we\u2019ve not confirmed the association yet.<\/p>\n<hr\/>\n<p>Subdomains like <code>barackobama.bsky.social<\/code> can also be handles.<\/p>\n<p>Let\u2019s try to resolve it:<\/p>\n<figure data-rehype-pretty-code-figure=\"\" wp_automatic_readability=\"3\">\n<pre style=\"background-color:var(--code-bg);color:#D6D9E0\" tabindex=\"0\" data-language=\"sh\" data-theme=\"Overnight\"><code data-language=\"sh\" data-theme=\"Overnight\" style=\"display:grid\"><span data-line=\"\"><span style=\"color:#8EACE3\">$<\/span><span style=\"color:#C792EA\"> nslookup<\/span><span style=\"color:#FFA7C4\"> -type=TXT<\/span><span style=\"color:#C792EA\"> _atproto.barackobama.bsky.social<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">Server:<\/span><span style=\"color:#F78C6C\">\t\t192.168.1.254<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">Address:<\/span><span style=\"color:#C792EA\">\t192.168.1.254#53<\/span><\/span>\n<span data-line=\"\"> <\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">Non-authoritative<\/span><span style=\"color:#C792EA\"> answer:<\/span><\/span>\n<span data-line=\"\" data-highlighted-line=\"\"><span style=\"color:#C792EA\">***<\/span><span style=\"color:#CED2D6\"> Can<\/span><span style=\"color:#C792EA\">'<\/span><span style=\"color:#ECC48D\">t find _atproto.barackobama.bsky.social: No answer<\/span><\/span><\/code><\/pre>\n<\/figure>\n<p>The DNS mechanism didn\u2019t work, so let\u2019s try with HTTPS:<\/p>\n<figure data-rehype-pretty-code-figure=\"\" wp_automatic_readability=\"2\">\n<pre style=\"background-color:var(--code-bg);color:#D6D9E0\" tabindex=\"0\" data-language=\"sh\" data-theme=\"Overnight\"><code data-language=\"sh\" data-theme=\"Overnight\" style=\"display:grid\"><span data-line=\"\"><span style=\"color:#8EACE3\">$<\/span><span style=\"color:#C792EA\"> curl<\/span><span style=\"color:#C792EA\"> https:\/\/barackobama.bsky.social\/.well-known\/atproto-did<\/span><\/span>\n<span data-line=\"\" data-highlighted-line=\"\"><span style=\"color:#8EACE3\">did:plc:5c6cw3veuqruljoy5ahzerfx<\/span><\/span><\/code><\/pre>\n<\/figure>\n<p>That worked! This means that <code>barackobama.bsky.social<\/code> handle claims to be owned by the <code>did:plc:5c6cw3veuqruljoy5ahzerfx<\/code> identity, whoever that is:<\/p>\n<p><span style=\"filter:var(--svg-filter);display:inline-block\" alt=\"barackobama.bsky.social resolves to did:plc:5c6cw3veuqruljoy5ahzerfx\"><?xml version=\"1.0\" standalone=\"no\"????><\/p>\n<p><svg style=\"max-width: 450px; width: 100%; height: auto;\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewbox=\"0 0 572.1144746598547 151.27917129494972\" width=\"1144.2289493197095\" height=\"302.55834258989944\"><!-- svg-source:excalidraw --><defs\/><g transform=\"translate(65.21993399498024 10.544292024565493) rotate(0 32.40998077392578 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#868e96\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">at:\/\/<\/text><\/g><g transform=\"translate(10 106.27917129494972) rotate(0 32.40998077392578 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#868e96\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">at:\/\/<\/text><\/g><g transform=\"translate(76.05731956727686 106.17546758490653) rotate(0 223.3979034423828 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#c2255c\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">did:plc:5c6cw3veuqruljoy5ahzerfx<\/text><\/g><g transform=\"translate(523.3904908952063 106.24975061908344) rotate(0 19.36199188232422 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#868e96\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">\/&#8230;<\/text><\/g><g transform=\"translate(451.8358033952063 10.343500619083443) rotate(0 19.36199188232422 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#868e96\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">\/&#8230;<\/text><\/g><g transform=\"translate(129.9670889702793 10) rotate(0 160.81793212890625 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#c2255c\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">barackobama.bsky.social<\/text><\/g><g stroke-linecap=\"round\"><g transform=\"translate(260.0240310104273 52.94637102860088) rotate(0 -0.33916207493894035 20.978279196436006)\"><path d=\"M-0.88 -0.84 C-1.3 6.22, -1.48 35.53, -1.52 42.8 M0.85 1.34 C0.74 8.02, 1.25 34.53, 0.74 41.11\" stroke=\"#c2255c\" stroke-width=\"1\" fill=\"none\"\/><\/g><g transform=\"translate(260.0240310104273 52.94637102860088) rotate(0 -0.33916207493894035 20.978279196436006)\"><path d=\"M-7.39 19.83 C-1.97 27.99, 0.53 37.09, 2.52 42.12 M-5.1 21.5 C-3.6 29.26, -0.15 35.99, 1.38 40.54\" stroke=\"#c2255c\" stroke-width=\"1\" fill=\"none\"\/><\/g><g transform=\"translate(260.0240310104273 52.94637102860088) rotate(0 -0.33916207493894035 20.978279196436006)\"><path d=\"M6.95 20.15 C6.94 28.08, 4.01 37.06, 2.52 42.12 M9.25 21.82 C5.09 29.43, 2.88 36.03, 1.38 40.54\" stroke=\"#c2255c\" stroke-width=\"1\" fill=\"none\"\/><\/g><\/g><mask\/><\/svg><\/span><\/p>\n<p>So you get the idea. When you see a handle, you can probe it with DNS and HTTPS to see if it claims to be owned by some identity (a DID). If you found a DID, you\u2019ll then be able to (1) verify it actually owns that handle, and (2) locate the server that hosts the data for that DID. And that will be the server you\u2019ll ask for the JSON.<\/p>\n<p><a target=\"_blank\" target=\"_blank\" class=\" scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"https:\/\/docs.bsky.app\/docs\/advanced-guides\/resolving-identities\">In practice<\/a>, if you\u2019re building with AT, you\u2019ll likely want to either deploy your own handle\/did resolution cache or hit an existing one. (Here\u2019s <a target=\"_blank\" target=\"_blank\" class=\" scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"https:\/\/ngerakines.leaflet.pub\/3lyea5xnhhc2w\">one implementation.<\/a>)<\/p>\n<hr\/>\n<h3 id=\"at-permalinks\"><a target=\"_blank\" target=\"_self\" class=\"linked-heading scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"#at-permalinks\">AT Permalinks<\/a><\/h3>\n<p>Now you know how handles resolve to identities, also known as DIDs. Unlike handles, which change over time, DIDs never change\u2014they\u2019re immutable.<\/p>\n<p>These <code>at:\/\/<\/code> links, which use handles, are human-readable but fragile:<\/p>\n<p>They will break if one of us changes a handle again.<\/p>\n<p>In contrast, the <code>at:\/\/<\/code> links below, which use DIDs, will not break until we either delete our accounts, delete these records, or permanently take down our hosting:<\/p>\n<p>So, really, this is the \u201ctrue form\u201d of an <code>at:\/\/<\/code> URI:<\/p>\n<p><span style=\"filter:var(--svg-filter);display:inline-block\" alt=\"at:\/\/did:web:iam.ruuuuu.de\/app.bsky.feed.post\/3lzy2ji4nms2z\"><?xml version=\"1.0\" standalone=\"no\"????><\/p>\n<p><svg style=\"max-width: 100%; width: 100%; height: auto;\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewbox=\"0 0 840.853849410727 140.8998102444716\" width=\"1681.707698821454\" height=\"281.7996204889432\"><!-- svg-source:excalidraw --><defs\/><g transform=\"translate(430.958766357915 10) rotate(0 75.01197052001953 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#228be6\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">the format<\/text><\/g><g transform=\"translate(156.1891126622795 11.919627443315676) rotate(0 57.35797882080078 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#7950f2\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">the user<\/text><\/g><g transform=\"translate(381.3639084684073 85.82261819415089) rotate(0 123.21464997310977 -17.40024157983953)\" stroke=\"none\"><path fill=\"#228be6\" d=\"M -2.65,-0.19 Q -2.65,-0.19 -2.61,-1.20 -2.56,-2.20 -2.11,-3.73 -1.67,-5.26 -0.76,-6.50 0.14,-7.74 0.93,-8.58 1.72,-9.42 2.72,-10.31 3.72,-11.20 4.87,-12.16 6.02,-13.12 6.95,-13.79 7.87,-14.45 8.76,-15.10 9.65,-15.75 10.52,-16.38 11.38,-17.02 12.73,-18.01 14.08,-19.01 14.99,-19.61 15.90,-20.22 17.01,-20.94 18.11,-21.67 19.19,-22.19 20.27,-22.71 21.47,-23.28 22.66,-23.84 23.73,-24.25 24.79,-24.65 26.29,-25.18 27.79,-25.70 29.12,-26.23 30.45,-26.76 32.14,-27.29 33.82,-27.81 35.18,-28.09 36.54,-28.38 38.08,-28.47 39.61,-28.55 40.76,-28.57 41.91,-28.59 43.43,-28.61 44.95,-28.62 46.68,-28.59 48.41,-28.56 49.51,-28.53 50.62,-28.49 52.96,-28.28 55.30,-28.07 56.40,-27.84 57.51,-27.61 59.72,-27.19 61.94,-26.78 63.64,-26.51 65.34,-26.24 66.39,-26.09 67.44,-25.94 68.99,-25.72 70.54,-25.50 72.20,-25.27 73.86,-25.03 75.49,-24.80 77.13,-24.56 79.21,-24.11 81.29,-23.67 83.12,-23.29 84.94,-22.91 86.69,-22.56 88.44,-22.22 89.97,-21.96 91.50,-21.70 92.99,-21.68 94.49,-21.66 95.55,-21.68 96.61,-21.70 98.07,-21.71 99.52,-21.71 100.97,-22.21 102.43,-22.70 104.13,-23.59 105.84,-24.47 107.96,-25.50 110.09,-26.52 111.80,-27.38 113.50,-28.23 114.80,-28.96 116.11,-29.68 117.10,-30.25 118.10,-30.82 119.12,-31.55 120.15,-32.29 121.35,-32.44 122.54,-32.60 122.71,-33.82 122.87,-35.04 123.85,-34.20 124.82,-33.36 125.71,-32.59 126.60,-31.82 128.02,-30.75 129.45,-29.67 130.77,-28.77 132.10,-27.86 133.72,-26.90 135.34,-25.94 136.64,-25.35 137.94,-24.76 139.18,-24.25 140.42,-23.74 141.99,-23.20 143.57,-22.65 144.74,-22.31 145.90,-21.96 147.10,-21.75 148.30,-21.54 149.56,-21.45 150.81,-21.36 152.19,-21.36 153.56,-21.36 155.04,-21.38 156.51,-21.39 157.59,-21.39 158.67,-21.40 160.62,-21.35 162.56,-21.30 163.90,-21.30 165.24,-21.30 166.53,-21.31 167.83,-21.31 169.11,-21.31 170.40,-21.32 171.80,-21.31 173.19,-21.31 174.84,-21.29 176.48,-21.28 178.18,-21.26 179.87,-21.25 181.52,-21.24 183.17,-21.23 184.52,-21.17 185.86,-21.11 187.15,-21.00 188.44,-20.89 189.52,-20.77 190.59,-20.65 193.08,-20.26 195.57,-19.86 197.97,-19.55 200.38,-19.24 201.72,-19.05 203.07,-18.86 204.98,-18.63 206.88,-18.40 208.50,-18.30 210.12,-18.19 211.71,-18.06 213.31,-17.93 214.37,-17.82 215.43,-17.72 217.41,-17.41 219.39,-17.11 221.70,-16.73 224.00,-16.35 225.36,-15.98 226.71,-15.62 227.82,-15.29 228.92,-14.96 230.70,-14.35 232.47,-13.75 233.83,-13.18 235.18,-12.60 236.22,-12.20 237.25,-11.79 238.33,-11.26 239.42,-10.72 241.01,-9.80 242.61,-8.87 243.71,-8.19 244.80,-7.51 247.33,-5.23 249.85,-2.95 249.93,-2.39 250.01,-1.84 249.91,-1.29 249.81,-0.74 249.53,-0.25 249.26,0.23 248.85,0.60 248.43,0.98 247.92,1.20 247.41,1.42 246.85,1.47 246.30,1.52 245.75,1.39 245.21,1.26 244.74,0.96 244.26,0.66 243.91,0.23 243.56,-0.19 243.36,-0.72 243.17,-1.24 243.15,-1.80 243.13,-2.36 243.29,-2.89 243.45,-3.43 243.78,-3.89 244.10,-4.34 244.55,-4.67 245.00,-5.00 245.54,-5.17 246.07,-5.33 246.63,-5.32 247.19,-5.31 247.71,-5.12 248.24,-4.93 248.68,-4.58 249.11,-4.23 249.42,-3.77 249.72,-3.30 249.86,-2.75 250.00,-2.21 249.96,-1.66 249.91,-1.10 249.70,-0.58 249.48,-0.07 249.11,0.34 248.74,0.76 248.25,1.03 247.77,1.31 247.22,1.42 246.67,1.53 246.12,1.46 245.56,1.39 245.06,1.14 244.56,0.89 244.16,0.50 243.76,0.11 243.51,-0.38 243.26,-0.88 243.26,-0.88 243.26,-0.88 241.97,-1.49 240.67,-2.10 239.64,-2.84 238.61,-3.59 237.63,-4.24 236.64,-4.89 235.13,-5.69 233.62,-6.49 232.54,-7.05 231.45,-7.62 230.17,-8.20 228.89,-8.77 227.05,-9.36 225.21,-9.94 224.17,-10.21 223.13,-10.48 220.82,-10.79 218.52,-11.10 216.66,-11.37 214.81,-11.64 213.11,-11.82 211.41,-11.99 209.84,-12.22 208.28,-12.44 207.22,-12.52 206.16,-12.60 204.28,-12.88 202.40,-13.17 201.03,-13.30 199.66,-13.43 197.23,-13.65 194.79,-13.87 193.27,-13.99 191.74,-14.11 189.89,-14.31 188.03,-14.51 186.95,-14.55 185.86,-14.60 184.52,-14.54 183.17,-14.48 181.52,-14.47 179.87,-14.46 178.18,-14.45 176.48,-14.43 174.84,-14.42 173.19,-14.40 171.80,-14.40 170.40,-14.39 169.11,-14.39 167.83,-14.40 166.53,-14.40 165.24,-14.40 163.90,-14.40 162.56,-14.41 160.62,-14.36 158.67,-14.31 157.59,-14.31 156.51,-14.32 155.02,-14.34 153.53,-14.35 152.02,-14.39 150.50,-14.43 149.03,-14.58 147.56,-14.72 146.35,-14.95 145.14,-15.17 143.96,-15.51 142.78,-15.84 141.41,-16.28 140.05,-16.73 138.39,-17.32 136.74,-17.92 135.22,-18.60 133.71,-19.28 132.13,-20.08 130.54,-20.88 129.51,-21.42 128.47,-21.97 127.11,-22.84 125.76,-23.72 123.87,-24.95 121.99,-26.19 120.68,-27.28 119.37,-28.37 118.47,-29.22 117.56,-30.06 116.96,-30.96 116.35,-31.86 116.21,-33.31 116.07,-34.75 116.45,-35.79 116.84,-36.83 118.80,-37.57 120.76,-38.30 121.94,-37.86 123.12,-37.41 124.07,-36.48 125.02,-35.56 125.62,-34.48 126.22,-33.40 126.24,-31.91 126.26,-30.43 125.82,-29.37 125.38,-28.31 124.30,-27.33 123.22,-26.36 122.26,-25.76 121.30,-25.16 120.18,-24.59 119.05,-24.01 117.69,-23.31 116.32,-22.61 114.62,-21.75 112.92,-20.90 110.93,-19.82 108.94,-18.73 107.89,-18.12 106.83,-17.50 105.01,-16.63 103.19,-15.76 102.16,-15.45 101.12,-15.15 99.60,-15.08 98.08,-15.02 96.78,-15.04 95.49,-15.06 94.35,-15.10 93.21,-15.14 91.76,-15.27 90.32,-15.40 88.79,-15.69 87.27,-15.99 85.36,-16.35 83.45,-16.72 81.77,-17.08 80.08,-17.44 78.17,-17.82 76.25,-18.19 74.63,-18.45 73.00,-18.70 71.29,-18.95 69.59,-19.21 68.12,-19.47 66.66,-19.72 65.51,-19.85 64.36,-19.98 62.68,-20.28 61.01,-20.57 59.57,-20.72 58.13,-20.87 56.36,-21.19 54.59,-21.51 52.61,-21.58 50.62,-21.65 49.51,-21.61 48.41,-21.58 46.68,-21.55 44.96,-21.52 43.46,-21.53 41.96,-21.53 40.88,-21.53 39.80,-21.52 38.22,-21.38 36.63,-21.25 35.19,-20.88 33.75,-20.52 32.38,-20.01 31.00,-19.50 29.48,-18.96 27.95,-18.43 26.68,-18.02 25.40,-17.60 24.29,-17.10 23.17,-16.59 22.00,-15.93 20.82,-15.27 19.51,-14.38 18.20,-13.48 16.81,-12.47 15.41,-11.46 14.13,-10.62 12.84,-9.79 11.84,-9.16 10.84,-8.53 9.56,-7.61 8.28,-6.70 7.14,-5.87 6.01,-5.04 5.14,-4.25 4.28,-3.47 3.57,-2.61 2.86,-1.75 2.75,-0.77 2.65,0.19 2.59,0.51 2.53,0.82 2.39,1.12 2.26,1.41 2.06,1.66 1.85,1.91 1.60,2.10 1.34,2.30 1.05,2.42 0.75,2.55 0.44,2.61 0.12,2.66 -0.19,2.63 -0.51,2.61 -0.82,2.51 -1.12,2.41 -1.40,2.24 -1.67,2.07 -1.89,1.84 -2.12,1.61 -2.28,1.33 -2.44,1.05 -2.53,0.75 -2.62,0.44 -2.64,0.12 -2.65,-0.19 -2.65,-0.19 L -2.65,-0.19 Z\"\/><\/g><g transform=\"translate(486.06204032869573 94.03826857217109) rotate(0 172.39590454101562 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#868e96\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">.feed.post\/3lzy2ji4nms2z<\/text><\/g><g transform=\"translate(10 95.89981024447161) rotate(0 32.40998077392578 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#868e96\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">at:\/\/<\/text><\/g><g transform=\"translate(356.68060629433603 94.003195703041) rotate(0 7.853996276855469 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#868e96\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">\/<\/text><\/g><g transform=\"translate(371.1305968965171 94.15507371104513) rotate(0 57.189979553222656 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#228be6\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">app.bsky<\/text><\/g><g transform=\"translate(74.6448923167045 95.1575737596163) rotate(0 141.28793334960938 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#7950f2\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">did:web:iam.ruuuuu.de<\/text><\/g><g transform=\"translate(85.46012783036349 90.90971884389364) rotate(0 133.9296875 -11.7109375)\" stroke=\"none\"><path fill=\"#6741d9\" d=\"M -2.62,0 Q -2.62,0 -2.64,-1.14 -2.66,-2.29 -2.74,-3.64 -2.81,-5.00 -2.76,-6.21 -2.70,-7.43 -1.73,-8.90 -0.75,-10.37 0.07,-11.12 0.89,-11.87 2.22,-12.58 3.54,-13.28 4.57,-13.61 5.61,-13.94 6.95,-14.35 8.29,-14.76 10.01,-15.24 11.73,-15.71 13.20,-15.95 14.67,-16.19 16.08,-16.48 17.48,-16.76 18.63,-16.95 19.78,-17.14 21.04,-17.22 22.30,-17.29 23.68,-17.29 25.07,-17.29 26.51,-17.26 27.95,-17.23 30.06,-17.26 32.17,-17.28 34.01,-17.16 35.85,-17.05 37.32,-17.02 38.78,-17.00 39.93,-17.02 41.09,-17.04 42.26,-17.05 43.44,-17.07 45.59,-17.11 47.74,-17.15 49.25,-17.10 50.77,-17.06 51.94,-16.98 53.10,-16.90 55.21,-16.77 57.31,-16.63 58.82,-16.40 60.33,-16.17 62.36,-16.10 64.39,-16.03 65.52,-16.02 66.66,-16.01 67.83,-16.01 69.00,-16.01 70.99,-16.04 72.98,-16.07 74.08,-16.08 75.17,-16.08 76.56,-16.05 77.94,-16.02 79.06,-16.03 80.18,-16.04 82.15,-16.07 84.11,-16.10 85.84,-16.14 87.57,-16.18 88.98,-16.14 90.39,-16.09 91.52,-16.09 92.65,-16.10 94.48,-16.13 96.31,-16.16 97.59,-16.21 98.86,-16.26 100.32,-16.58 101.78,-16.91 102.65,-17.70 103.52,-18.49 104.57,-19.31 105.62,-20.13 106.62,-21.09 107.62,-22.04 106.84,-21.14 106.05,-20.24 105.99,-21.35 105.94,-22.45 106.53,-21.36 107.12,-20.26 108.20,-20.31 109.28,-20.35 110.44,-21.34 111.60,-22.33 112.35,-21.27 113.09,-20.21 113.94,-19.53 114.80,-18.85 115.90,-18.14 117.00,-17.43 118.15,-16.96 119.29,-16.48 120.55,-16.13 121.81,-15.78 123.01,-15.63 124.21,-15.48 125.56,-15.43 126.90,-15.38 127.98,-15.38 129.05,-15.37 130.54,-15.37 132.03,-15.37 133.10,-15.37 134.17,-15.37 135.57,-15.35 136.97,-15.33 138.29,-15.32 139.60,-15.31 140.95,-15.31 142.30,-15.30 144.45,-15.82 146.61,-16.35 148.12,-16.80 149.62,-17.24 151.41,-17.72 153.21,-18.19 154.95,-18.70 156.70,-19.22 158.64,-19.70 160.58,-20.18 162.35,-20.38 164.12,-20.58 165.78,-20.82 167.43,-21.07 168.82,-21.23 170.20,-21.40 172.64,-21.53 175.09,-21.67 176.71,-21.79 178.32,-21.91 179.62,-22.10 180.92,-22.28 183.15,-22.22 185.38,-22.16 187.07,-22.29 188.77,-22.41 190.61,-22.46 192.45,-22.50 194.09,-22.55 195.72,-22.59 197.27,-22.62 198.82,-22.66 200.33,-22.68 201.85,-22.71 203.34,-22.73 204.84,-22.75 206.33,-22.77 207.83,-22.79 209.31,-22.80 210.80,-22.82 212.48,-22.80 214.15,-22.78 216.11,-22.70 218.07,-22.62 219.75,-22.62 221.44,-22.62 222.84,-22.66 224.24,-22.70 225.69,-22.73 227.14,-22.76 228.97,-22.71 230.80,-22.67 232.11,-22.72 233.42,-22.76 234.50,-22.82 235.59,-22.88 237.07,-22.79 238.54,-22.70 239.72,-22.47 240.90,-22.25 242.48,-21.81 244.05,-21.38 245.28,-20.91 246.50,-20.45 247.52,-20.02 248.55,-19.58 249.57,-19.11 250.60,-18.63 251.75,-18.12 252.89,-17.61 254.30,-16.80 255.71,-15.99 257.15,-15.17 258.58,-14.35 260.23,-13.21 261.88,-12.07 263.35,-10.91 264.82,-9.76 265.97,-8.83 267.13,-7.91 268.11,-7.03 269.09,-6.15 270.14,-3.56 271.18,-0.97 271.09,-0.44 271.01,0.09 270.76,0.56 270.51,1.04 270.12,1.41 269.73,1.78 269.25,2.01 268.76,2.24 268.22,2.30 267.69,2.36 267.16,2.25 266.64,2.13 266.17,1.86 265.71,1.58 265.36,1.17 265.01,0.76 264.81,0.27 264.61,-0.22 264.58,-0.76 264.55,-1.30 264.69,-1.82 264.83,-2.34 265.13,-2.78 265.43,-3.23 265.86,-3.56 266.28,-3.88 266.79,-4.06 267.30,-4.23 267.84,-4.23 268.38,-4.24 268.89,-4.07 269.40,-3.90 269.83,-3.57 270.26,-3.25 270.56,-2.80 270.87,-2.36 271.01,-1.84 271.16,-1.33 271.13,-0.79 271.10,-0.25 270.91,0.24 270.71,0.74 270.36,1.15 270.02,1.56 269.56,1.84 269.10,2.12 268.57,2.24 268.05,2.36 267.51,2.30 266.98,2.25 266.49,2.02 266.00,1.80 265.61,1.43 265.22,1.06 264.96,0.59 264.71,0.11 264.62,-0.41 264.53,-0.94 264.53,-0.94 264.53,-0.94 264.49,-1.18 264.46,-1.41 263.67,-2.22 262.89,-3.02 261.77,-3.97 260.65,-4.92 259.41,-5.91 258.17,-6.90 256.76,-7.88 255.36,-8.87 253.79,-9.79 252.22,-10.71 251.05,-11.43 249.88,-12.16 248.87,-12.69 247.86,-13.23 246.77,-13.84 245.68,-14.46 244.45,-15.19 243.22,-15.93 242.11,-16.46 240.99,-16.99 239.58,-17.48 238.17,-17.97 236.88,-18.09 235.59,-18.21 234.50,-18.26 233.42,-18.32 232.11,-18.37 230.80,-18.41 228.97,-18.37 227.14,-18.33 225.69,-18.35 224.24,-18.38 222.84,-18.42 221.44,-18.46 219.75,-18.46 218.07,-18.46 216.11,-18.38 214.15,-18.31 212.48,-18.29 210.80,-18.27 209.32,-18.28 207.83,-18.29 206.34,-18.31 204.85,-18.32 203.35,-18.34 201.86,-18.36 200.36,-18.38 198.85,-18.39 197.32,-18.40 195.79,-18.41 194.20,-18.40 192.60,-18.39 190.87,-18.30 189.14,-18.22 187.33,-18.04 185.53,-17.86 183.53,-17.65 181.54,-17.44 180.14,-17.28 178.74,-17.12 177.23,-16.97 175.72,-16.83 173.31,-16.32 170.89,-15.81 169.76,-15.67 168.63,-15.52 166.86,-15.03 165.09,-14.53 163.71,-14.23 162.32,-13.92 160.35,-13.34 158.38,-12.77 156.64,-12.22 154.90,-11.68 153.46,-11.29 152.01,-10.91 150.15,-10.31 148.29,-9.71 147.24,-9.39 146.20,-9.08 144.25,-8.63 142.31,-8.18 140.95,-8.18 139.60,-8.17 138.29,-8.16 136.97,-8.15 135.57,-8.13 134.17,-8.11 133.10,-8.11 132.03,-8.11 130.53,-8.11 129.03,-8.12 127.91,-8.12 126.79,-8.13 125.51,-8.16 124.23,-8.19 123.16,-8.34 122.10,-8.50 121.03,-8.59 119.96,-8.69 118.80,-8.97 117.65,-9.24 116.44,-9.68 115.22,-10.12 113.86,-10.83 112.50,-11.53 111.51,-12.18 110.52,-12.82 109.45,-13.63 108.38,-14.45 107.46,-15.41 106.54,-16.36 105.74,-17.47 104.95,-18.58 104.65,-19.64 104.34,-20.70 104.36,-21.91 104.39,-23.13 104.77,-24.25 105.15,-25.37 106.12,-25.92 107.09,-26.48 108.70,-26.57 110.32,-26.66 111.29,-25.82 112.25,-24.98 112.66,-23.58 113.08,-22.19 113.04,-21.09 113.00,-19.99 112.79,-18.95 112.58,-17.90 111.55,-16.79 110.52,-15.68 109.21,-14.63 107.90,-13.57 106.91,-12.79 105.92,-12.02 104.95,-11.44 103.97,-10.86 102.50,-10.46 101.03,-10.05 99.94,-10.09 98.86,-10.13 97.59,-10.17 96.31,-10.22 94.48,-10.25 92.65,-10.28 91.52,-10.29 90.39,-10.29 88.98,-10.24 87.57,-10.20 85.84,-10.24 84.11,-10.28 82.15,-10.31 80.18,-10.35 79.06,-10.35 77.94,-10.36 76.56,-10.33 75.17,-10.30 74.07,-10.31 72.97,-10.31 70.97,-10.35 68.97,-10.39 67.78,-10.40 66.59,-10.41 65.41,-10.43 64.22,-10.45 63.03,-10.50 61.85,-10.55 60.76,-10.65 59.66,-10.76 57.16,-11.03 54.67,-11.31 52.72,-11.50 50.77,-11.68 49.25,-11.64 47.74,-11.60 45.59,-11.64 43.44,-11.68 42.26,-11.69 41.09,-11.71 39.94,-11.73 38.78,-11.75 37.32,-11.72 35.85,-11.70 34.02,-11.58 32.18,-11.46 30.09,-11.47 28.00,-11.48 26.60,-11.43 25.20,-11.37 23.93,-11.32 22.66,-11.26 20.82,-11.07 18.98,-10.89 17.48,-10.43 15.98,-9.98 14.63,-9.62 13.28,-9.26 11.96,-8.92 10.65,-8.57 9.09,-8.10 7.54,-7.64 6.08,-7.17 4.61,-6.71 3.71,-5.85 2.81,-5.00 2.74,-3.64 2.66,-2.29 2.64,-1.14 2.62,0 2.58,0.31 2.54,0.62 2.43,0.92 2.32,1.22 2.14,1.48 1.96,1.74 1.72,1.95 1.49,2.16 1.21,2.30 0.93,2.45 0.62,2.53 0.31,2.60 -0.00,2.60 -0.31,2.60 -0.62,2.53 -0.93,2.45 -1.21,2.30 -1.49,2.16 -1.72,1.95 -1.96,1.74 -2.14,1.48 -2.32,1.22 -2.43,0.92 -2.54,0.62 -2.58,0.31 -2.62,-0.00 -2.62,-0.00 L -2.62,0 Z\"\/><\/g><\/svg><\/span><\/p>\n<p><strong>Think of <code>at:\/\/<\/code> links with DIDs as \u201cpermalinks\u201d.<\/strong> Any application <em>storing<\/em> <code>at:\/\/<\/code> URIs should store them in this canonical form so that logical links between our pieces of JSON don\u2019t break when we change our handles or change our hosting.<\/p>\n<p>Now that you know how to resolve a handle to a DID, you want to do two things:<\/p>\n<ol>\n<li>Verify that whoever owns this DID actually goes by that handle.<\/li>\n<li>Find the server that hosts all the data for this DID.<\/li>\n<\/ol>\n<p>You can do both of these things by fetching a piece of JSON called the <em>DID Document<\/em>. You can think of it as sort of a \u201cpassport\u201d for a given DID.<\/p>\n<p>How you do that depends on what kind of DID it is.<\/p>\n<hr\/>\n<h3 id=\"from-identities-to-hosting\"><a target=\"_blank\" target=\"_self\" class=\"linked-heading scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"#from-identities-to-hosting\">From Identities to Hosting<\/a><\/h3>\n<p>Currently, there are two kinds of DIDs, known as <em>DID methods<\/em>, supported by the AT protocol: <code>did:web<\/code> (a <a target=\"_blank\" target=\"_blank\" class=\" scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"https:\/\/w3c-ccg.github.io\/did-method-web\/\">W3C draft<\/a>) and <code>did:plc<\/code> (<a target=\"_blank\" target=\"_blank\" class=\" scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"https:\/\/github.com\/did-method-plc\/did-method-plc\">specified<\/a> by Bluesky).<\/p>\n<p>Let\u2019s compare them.<\/p>\n<h4 id=\"didweb\"><a target=\"_blank\" target=\"_self\" class=\"linked-heading scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"#didweb\"><code>did:web<\/code><\/a><\/h4>\n<p>The <code>ruuuuu.de<\/code> handle claims to be owned by <code>did:web:iam.ruuuuu.de<\/code>:<\/p>\n<p><span style=\"filter:var(--svg-filter);display:inline-block\" alt=\"ruuuuu.de points at did:web:iam.ruuuuu.de\"><?xml version=\"1.0\" standalone=\"no\"????><\/p>\n<p><svg style=\"max-width: 450px; width: 100%; height: auto;\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewbox=\"0 0 403.78274038483505 146.0923676561706\" width=\"807.5654807696701\" height=\"292.1847353123412\"><!-- svg-source:excalidraw --><defs\/><g transform=\"translate(75.23901143105832 10.49212766904293) rotate(0 32.40998077392578 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#868e96\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">at:\/\/<\/text><\/g><g transform=\"translate(10 99.8988870211806) rotate(0 32.40998077392578 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#868e96\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">at:\/\/<\/text><\/g><g transform=\"translate(72.14151366488659 101.09236765617061) rotate(0 141.28793334960938 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#7950f2\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">did:web:iam.ruuuuu.de<\/text><\/g><g transform=\"translate(267.44696147539435 10) rotate(0 19.36199188232422 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#868e96\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">\/&#8230;<\/text><\/g><g transform=\"translate(355.0587566201866 99.80260117289026) rotate(0 19.36199188232422 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#868e96\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">\/&#8230;<\/text><\/g><g transform=\"translate(140.15734124776282 10.292859934187618) rotate(0 63.95197296142578 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#7950f2\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">ruuuuu.de<\/text><\/g><g stroke-linecap=\"round\"><g transform=\"translate(191.48154417005935 56.430036990881945) rotate(0 0.4574792503608478 18.199362630477253)\"><path d=\"M0.88 -0.25 C1.16 6.15, 1.06 31.28, 1.14 37.24 M-0.12 -1.43 C0.06 4.74, 0.15 29.27, 0.31 35.57\" stroke=\"#7950f2\" stroke-width=\"2\" fill=\"none\"\/><\/g><g transform=\"translate(191.48154417005935 56.430036990881945) rotate(0 0.4574792503608478 18.199362630477253)\"><path d=\"M-6.53 18.89 C-3.36 23.6, -4.34 26.7, 1.07 35.16 M-6.36 18.02 C-4.57 25.62, -1.37 31.41, 0.32 35.04\" stroke=\"#7950f2\" stroke-width=\"2\" fill=\"none\"\/><\/g><g transform=\"translate(191.48154417005935 56.430036990881945) rotate(0 0.4574792503608478 18.199362630477253)\"><path d=\"M5.92 18.72 C5.88 23.56, 1.7 26.71, 1.07 35.16 M6.09 17.85 C3.29 25.41, 1.91 31.25, 0.32 35.04\" stroke=\"#7950f2\" stroke-width=\"2\" fill=\"none\"\/><\/g><\/g><mask\/><\/svg><\/span><\/p>\n<p>To check this claim, let\u2019s find the DID Document for <code>did:web:iam.ruuuuu.de<\/code>. The <a target=\"_blank\" target=\"_blank\" class=\" scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"https:\/\/w3c-ccg.github.io\/did-method-web\/\"><code>did:web<\/code> method<\/a> is a specification that specifies an <a target=\"_blank\" target=\"_blank\" class=\" scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"https:\/\/w3c-ccg.github.io\/did-method-web\/#read-resolve\">algorithm<\/a> for that.<\/p>\n<p>In short, you cut off the <code>did:web:<\/code> from the DID, append <code>\/.well-known\/did.json<\/code> to the end, and run an HTTPS GET request:<\/p>\n<figure data-rehype-pretty-code-figure=\"\" wp_automatic_readability=\"16\">\n<pre style=\"background-color:var(--code-bg);color:#D6D9E0\" tabindex=\"0\" data-language=\"sh\" data-theme=\"Overnight\"><code data-language=\"sh\" data-theme=\"Overnight\" style=\"display:grid\"><span data-line=\"\"><span style=\"color:#8EACE3\">$<\/span><span style=\"color:#C792EA\"> curl<\/span><span style=\"color:#C792EA\"> https:\/\/iam.ruuuuu.de\/.well-known\/did.json<\/span><span style=\"color:#C792EA\"> |<\/span><span style=\"color:#8EACE3\"> jq<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#CED2D6\">{<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">  \"@context\"<\/span><span style=\"color:#8EACE3\">:<\/span><span style=\"color:#CED2D6\"> [<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">    \"https:\/\/www.w3.org\/ns\/did\/v1\"<\/span><span style=\"color:#8EACE3\">,<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">    \"https:\/\/w3id.org\/security\/multikey\/v1\"<\/span><span style=\"color:#8EACE3\">,<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">    \"https:\/\/w3id.org\/security\/suites\/secp256k1-2019\/v1\"<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#CED2D6\">  ],<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">  \"id\"<\/span><span style=\"color:#8EACE3\">:<\/span><span style=\"color:#C792EA\"> \"<\/span><span style=\"color:#ECC48D\">did:web:iam.ruuuuu.de<\/span><span style=\"color:#C792EA\">\",<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">  \"alsoKnownAs\"<\/span><span style=\"color:#8EACE3\">:<\/span><span style=\"color:#CED2D6\"> [<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">    \"at:\/\/ruuuuu.de\"<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#CED2D6\">  ],<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">  \"verificationMethod\"<\/span><span style=\"color:#8EACE3\">:<\/span><span style=\"color:#CED2D6\"> [<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#CED2D6\">    {<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">      \"id\"<\/span><span style=\"color:#8EACE3\">:<\/span><span style=\"color:#C792EA\"> \"<\/span><span style=\"color:#ECC48D\">did:web:iam.ruuuuu.de#atproto<\/span><span style=\"color:#C792EA\">\",<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">      \"type\"<\/span><span style=\"color:#8EACE3\">:<\/span><span style=\"color:#C792EA\"> \"<\/span><span style=\"color:#ECC48D\">Multikey<\/span><span style=\"color:#C792EA\">\",<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">      \"controller\"<\/span><span style=\"color:#8EACE3\">:<\/span><span style=\"color:#C792EA\"> \"<\/span><span style=\"color:#ECC48D\">did:web:iam.ruuuuu.de<\/span><span style=\"color:#C792EA\">\",<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">      \"publicKeyMultibase\"<\/span><span style=\"color:#8EACE3\">:<\/span><span style=\"color:#C792EA\"> \"<\/span><span style=\"color:#ECC48D\">zQ3shWHtz9QMJevcGBcffZBBqBfPo55jJQaVDuEG7ZwerALGk<\/span><span style=\"color:#C792EA\">\"<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#CED2D6\">    }<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#CED2D6\">  ],<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">  \"service\"<\/span><span style=\"color:#8EACE3\">:<\/span><span style=\"color:#CED2D6\"> [<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#CED2D6\">    {<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">      \"id\"<\/span><span style=\"color:#8EACE3\">:<\/span><span style=\"color:#C792EA\"> \"<\/span><span style=\"color:#ECC48D\">#atproto_pds<\/span><span style=\"color:#C792EA\">\",<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">      \"type\"<\/span><span style=\"color:#8EACE3\">:<\/span><span style=\"color:#C792EA\"> \"<\/span><span style=\"color:#ECC48D\">AtprotoPersonalDataServer<\/span><span style=\"color:#C792EA\">\",<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">      \"serviceEndpoint\"<\/span><span style=\"color:#8EACE3\">:<\/span><span style=\"color:#C792EA\"> \"<\/span><span style=\"color:#ECC48D\">https:\/\/blacksky.app<\/span><span style=\"color:#C792EA\">\"<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#CED2D6\">    }<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#CED2D6\">  ]<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#CED2D6\">}<\/span><\/span><\/code><\/pre>\n<\/figure>\n<p>This DID Document looks sleep-inducing but it tells us three important things:<\/p>\n<ul>\n<li><strong>How to refer to them.<\/strong> The <code>alsoKnownAs<\/code> field confirms that whoever controls <code>did:web:iam.ruuuuu.de<\/code> indeed wants to use <code>@ruuuuu.de<\/code> as a handle. \u2705<\/li>\n<li><strong>How to verify the integrity of their data.<\/strong> The <code>publicKeyMultibase<\/code> field tells us the public key with which all changes to their data are signed.<\/li>\n<li><strong>Where their data is stored.<\/strong> The <code>serviceEndpoint<\/code> field tells us the actual server with their data. Rudy\u2019s data is currently hosted at <code>https:\/\/blacksky.app<\/code>.<\/li>\n<\/ul>\n<p>A DID Document really <em>is<\/em> like an internet passport for an identity: here\u2019s their handle, here\u2019s their signature, and here\u2019s their location. It connects a handle to a hosting while letting the identity owner change <em>either<\/em> the handle <em>or<\/em> the hosting.<\/p>\n<p><span style=\"filter:var(--svg-filter);display:inline-block\" alt=\"did:web:iam.ruuuuu.de is bidirectionally connected to the swappable @ruuuuu.de handle, and points to swappable blacksky.app hosting\"><?xml version=\"1.0\" standalone=\"no\"????><\/p>\n<p><svg style=\"max-width: 450px; width: 100%; height: auto;\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewbox=\"0 0 457.61706642137506 503.22839841437144\" width=\"915.2341328427501\" height=\"1006.4567968287429\"><!-- svg-source:excalidraw --><defs\/><g transform=\"translate(75.435253423002 244.9507781971929) rotate(0 141.28793334960938 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#7950f2\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">did:web:iam.ruuuuu.de<\/text><\/g><g transform=\"translate(151.60254680965227 391.3541500568999) rotate(0 82.92196655273438 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">blacksky.app<\/text><\/g><g transform=\"translate(149.5014701332002 74.30692504753279) rotate(0 75.40261893761453 17.464019532254042)\"><text x=\"0\" y=\"24.617281932665158\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"27.94243125160631px\" fill=\"#7950f2\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">@ruuuuu.de<\/text><\/g><g stroke-linecap=\"round\"><g transform=\"translate(223.5269012754834 119.47626536936332) rotate(0 -0.9383722221446078 59.36543039326443)\"><path d=\"M0.63 0.09 C-0.29 19.77, -2.71 96.39, -3.5 116.55 M-2.46 -2.34 C-2.66 17.77, 1.35 99.14, 2.03 118.99\" stroke=\"#6741d9\" stroke-width=\"2\" fill=\"none\"\/><\/g><g transform=\"translate(223.5269012754834 119.47626536936332) rotate(0 -0.9383722221446078 59.36543039326443)\"><path d=\"M8.41 22.71 C4.03 13.42, 4.37 7.94, 0.33 1.32 M8.06 24.86 C6.63 19.65, 4.91 14.28, 0.48 0.33\" stroke=\"#6741d9\" stroke-width=\"2\" fill=\"none\"\/><\/g><g transform=\"translate(223.5269012754834 119.47626536936332) rotate(0 -0.9383722221446078 59.36543039326443)\"><path d=\"M-8.69 22.1 C-6.67 13, 0.07 7.75, 0.33 1.32 M-9.03 24.25 C-6.88 19.18, -5.02 13.94, 0.48 0.33\" stroke=\"#6741d9\" stroke-width=\"2\" fill=\"none\"\/><\/g><g transform=\"translate(223.5269012754834 119.47626536936332) rotate(0 -0.9383722221446078 59.36543039326443)\"><path d=\"M-7.44 94.72 C-5.62 102.95, 1.18 115.02, 1.72 120.23 M-7.78 96.88 C-5.89 101.49, -4 105.95, 1.88 119.24\" stroke=\"#6741d9\" stroke-width=\"2\" fill=\"none\"\/><\/g><g transform=\"translate(223.5269012754834 119.47626536936332) rotate(0 -0.9383722221446078 59.36543039326443)\"><path d=\"M9.65 94.01 C5.07 102.54, 5.46 114.88, 1.72 120.23 M9.3 96.16 C7.62 100.92, 5.93 105.52, 1.88 119.24\" stroke=\"#6741d9\" stroke-width=\"2\" fill=\"none\"\/><\/g><\/g><mask\/><g transform=\"translate(21.415300963217305 20.781412310127962) rotate(0 90.5606091720565 12.538858845899313)\"><text x=\"0\" y=\"17.67477542917971\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"20.062174153438946px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">handle (swappable)<\/text><\/g><g transform=\"translate(255.25279157200202 459.8527230548657) rotate(0 90.8301866196598 11.852831541802743)\"><text x=\"0\" y=\"16.70775134132511\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"18.964530466884348px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">hosting (swappable)<\/text><\/g><g stroke-linecap=\"round\" transform=\"translate(10 10) rotate(0 216.96939798218773 77.26585604552133)\"><path d=\"M2.04 0.04 C115.75 -1.87, 228.03 -2.52, 433.13 -0.73 M432.49 3.78 C433.72 63.25, 431.68 126.15, 434.96 156.71 M434.47 153.73 C288.21 156.74, 146.69 156.07, -1.32 154.08 M1.57 158.14 C-0.96 95.21, -4.33 38.92, -0.87 1.88\" stroke=\"#1e1e1e\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\"\/><\/g><g stroke-linecap=\"round\" transform=\"translate(10.930999939770118 327.0258694295853) rotate(0 218.34303324080247 83.10126449239306)\"><path d=\"M1.31 -0.99 C162.07 -2.36, 321.56 -2.05, 437.21 -0.17 M433 -1.97 C435.87 50.23, 435.82 99.44, 438.42 163.33 M437.04 167.15 C276.07 165.13, 115.79 165.11, -1.31 164.35 M-0.88 162.58 C-2.85 106.16, -4.93 54.73, -1.98 3.92\" stroke=\"#1e1e1e\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\"\/><\/g><g stroke-linecap=\"round\"><g transform=\"translate(225.49225868805297 289.24225653537223) rotate(0 1.1658573777858692 48.139846563784886)\"><path d=\"M-2.48 -3.96 C3.05 20.12, 0.61 43.53, 4.21 96.04 M1.68 -0.78 C0.77 25.88, -1 51.27, 3.11 96.31\" stroke=\"#6741d9\" stroke-width=\"2\" fill=\"none\"\/><\/g><g transform=\"translate(225.49225868805297 289.24225653537223) rotate(0 1.1658573777858692 48.139846563784886)\"><path d=\"M-8.17 71.43 C-3.66 78.1, -2.99 84.43, 4.04 96.19 M-6.09 73.02 C-3.91 79.7, -2.43 85.69, 3.49 96.32\" stroke=\"#6741d9\" stroke-width=\"2\" fill=\"none\"\/><\/g><g transform=\"translate(225.49225868805297 289.24225653537223) rotate(0 1.1658573777858692 48.139846563784886)\"><path d=\"M8.9 70.33 C9.78 77.23, 6.81 83.79, 4.04 96.19 M10.98 71.93 C8.61 78.74, 5.55 85.02, 3.49 96.32\" stroke=\"#6741d9\" stroke-width=\"2\" fill=\"none\"\/><\/g><\/g><mask\/><g transform=\"translate(185.29272658366608 192.60789339925532) rotate(0 10.854095458984375 9.337157556834654)\"><text x=\"0\" y=\"13.161657292114118\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"14.939452090935434px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">did<\/text><\/g><g transform=\"translate(247.8504105561551 355.76363423974954) rotate(0 56.73396301269531 9.337157556834654)\"><text x=\"0\" y=\"13.161657292114118\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"14.939452090935434px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">serviceEndpoint<\/text><\/g><g stroke-opacity=\"0.8\" fill-opacity=\"0.8\" transform=\"translate(239.19740095874295 139.5862672733324) rotate(0 45.536555783690346 9.345888896835959)\"><text x=\"0\" y=\"13.17396498897997\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"14.953422234937536px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">alsoKnownAs<\/text><\/g><\/svg><\/span><\/p>\n<p>Users who interact with <code>@ruuuuu.de<\/code> on different apps in the atmosphere don\u2019t need to know or care about his DID <em>or<\/em> about his current hosting (and whether it moves). From their perspective, his current handle is the only relevant identifier. As for developers, they\u2019ll refer to him by DID, which conveniently never changes.<\/p>\n<p>All of this sounds great, but there is one big downside to the <code>did:web<\/code> identity. If <code>did:web:iam.ruuuuu.de<\/code> ever loses control of the <code>iam.ruuuuu.de<\/code> domain, he will lose control over his DID Document, and thus over his entire identity.<\/p>\n<p>Let\u2019s have a look at an alternative to <code>did:web<\/code> that avoids this problem.<\/p>\n<h4 id=\"didplc\"><a target=\"_blank\" target=\"_self\" class=\"linked-heading scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"#didplc\"><code>did:plc<\/code><\/a><\/h4>\n<p>We already know the <code>danabra.mov<\/code> handle claims to be owned by the <code>did:plc:fpruhuo22xkm5o7ttr2ktxdo<\/code> identity (actually, that\u2019s me!)<\/p>\n<p><span style=\"filter:var(--svg-filter);display:inline-block\" alt=\"\"><?xml version=\"1.0\" standalone=\"no\"????><\/p>\n<p><svg style=\"max-width: 450px; width: 100%; height: auto;\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewbox=\"0 0 604.3916306925712 152.29345326784187\" width=\"1208.7832613851424\" height=\"304.58690653568374\"><!-- svg-source:excalidraw --><defs\/><g transform=\"translate(127.65595739800483 10.199267734855312) rotate(0 32.40998077392578 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#868e96\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">at:\/\/<\/text><\/g><g transform=\"translate(10 107.22598213647916) rotate(0 32.40998077392578 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#868e96\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">at:\/\/<\/text><\/g><g transform=\"translate(77.18849687948023 107.29345326784187) rotate(0 238.27987670898438 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#be4bdb\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">did:plc:fpruhuo22xkm5o7ttr2ktxdo<\/text><\/g><g transform=\"translate(555.6676469279228 103.79446148765874) rotate(0 19.36199188232422 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#868e96\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">\/&#8230;<\/text><\/g><g transform=\"translate(192.07819346470933 10) rotate(0 81.87196350097656 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#be4bdb\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">danabra.mov<\/text><\/g><g stroke-linecap=\"round\"><g transform=\"translate(257.80954609590844 52.94637102860088) rotate(0 -0.4996832868473575 20.03146835490611)\"><path d=\"M-0.74 -0.6 C-1.13 6.09, -1.97 33.36, -2.05 40.16 M1.07 1.71 C1.02 8.6, 0.64 35.1, 0.11 41.75\" stroke=\"#be4bdb\" stroke-width=\"1\" fill=\"none\"\/><\/g><g transform=\"translate(257.80954609590844 52.94637102860088) rotate(0 -0.4996832868473575 20.03146835490611)\"><path d=\"M-6.94 20.91 C-3.81 28.51, -1.71 36.77, 1.96 40.07 M-5.33 23.53 C-4.91 27.88, -2.14 32.79, 1.06 42.03\" stroke=\"#be4bdb\" stroke-width=\"1\" fill=\"none\"\/><\/g><g transform=\"translate(257.80954609590844 52.94637102860088) rotate(0 -0.4996832868473575 20.03146835490611)\"><path d=\"M6.75 21.48 C5.45 28.81, 3.12 36.88, 1.96 40.07 M8.37 24.1 C5.38 28.43, 4.75 33.19, 1.06 42.03\" stroke=\"#be4bdb\" stroke-width=\"1\" fill=\"none\"\/><\/g><\/g><mask\/><g transform=\"translate(355.99007346395956 10.18969538392048) rotate(0 19.36199188232422 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#868e96\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">\/&#8230;<\/text><\/g><\/svg><\/span><\/p>\n<p>To check this claim, let\u2019s find the DID Document for <code>did:plc:fpruhuo22xkm5o7ttr2ktxdo<\/code>.<\/p>\n<p>The <a target=\"_blank\" target=\"_blank\" class=\" scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"https:\/\/github.com\/did-method-plc\/did-method-plc\"><code>did:plc<\/code> method<\/a> is a specification that specifies an <a target=\"_blank\" target=\"_blank\" class=\" scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"https:\/\/github.com\/did-method-plc\/did-method-plc?tab=readme-ov-file#did-resolution\">algorithm<\/a> for that.<\/p>\n<p>Essentially, you need to hit the <a target=\"_blank\" target=\"_blank\" class=\" scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"https:\/\/plc.directory\"><code>https:\/\/plc.directory<\/code><\/a> service with a <code>GET<\/code>:<\/p>\n<figure data-rehype-pretty-code-figure=\"\" wp_automatic_readability=\"16\">\n<pre style=\"background-color:var(--code-bg);color:#D6D9E0\" tabindex=\"0\" data-language=\"sh\" data-theme=\"Overnight\"><code data-language=\"sh\" data-theme=\"Overnight\" style=\"display:grid\"><span data-line=\"\"><span style=\"color:#8EACE3\">$<\/span><span style=\"color:#C792EA\"> curl<\/span><span style=\"color:#C792EA\"> https:\/\/plc.directory\/did:plc:fpruhuo22xkm5o7ttr2ktxdo<\/span><span style=\"color:#C792EA\"> |<\/span><span style=\"color:#8EACE3\"> jq<\/span><\/span>\n<span data-line=\"\"> <\/span>\n<span data-line=\"\"><span style=\"color:#CED2D6\">{<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">  \"@context\"<\/span><span style=\"color:#8EACE3\">:<\/span><span style=\"color:#CED2D6\"> [<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">    \"https:\/\/www.w3.org\/ns\/did\/v1\"<\/span><span style=\"color:#8EACE3\">,<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">    \"https:\/\/w3id.org\/security\/multikey\/v1\"<\/span><span style=\"color:#8EACE3\">,<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">    \"https:\/\/w3id.org\/security\/suites\/secp256k1-2019\/v1\"<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#CED2D6\">  ],<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">  \"id\"<\/span><span style=\"color:#8EACE3\">:<\/span><span style=\"color:#C792EA\"> \"<\/span><span style=\"color:#ECC48D\">did:plc:fpruhuo22xkm5o7ttr2ktxdo<\/span><span style=\"color:#C792EA\">\",<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">  \"alsoKnownAs\"<\/span><span style=\"color:#8EACE3\">:<\/span><span style=\"color:#CED2D6\"> [<\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#ECC48D\">at:\/\/danabra.mov<\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#CED2D6\">],<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">  \"verificationMethod\"<\/span><span style=\"color:#8EACE3\">:<\/span><span style=\"color:#CED2D6\"> [<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#CED2D6\">    {<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">      \"id\"<\/span><span style=\"color:#8EACE3\">:<\/span><span style=\"color:#C792EA\"> \"<\/span><span style=\"color:#ECC48D\">did:plc:fpruhuo22xkm5o7ttr2ktxdo#atproto<\/span><span style=\"color:#C792EA\">\",<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">      \"type\"<\/span><span style=\"color:#8EACE3\">:<\/span><span style=\"color:#C792EA\"> \"<\/span><span style=\"color:#ECC48D\">Multikey<\/span><span style=\"color:#C792EA\">\",<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">      \"controller\"<\/span><span style=\"color:#8EACE3\">:<\/span><span style=\"color:#C792EA\"> \"<\/span><span style=\"color:#ECC48D\">did:plc:fpruhuo22xkm5o7ttr2ktxdo<\/span><span style=\"color:#C792EA\">\",<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">      \"publicKeyMultibase\"<\/span><span style=\"color:#8EACE3\">:<\/span><span style=\"color:#C792EA\"> \"<\/span><span style=\"color:#ECC48D\">zQ3shopLMtAvvVrSsmWPE2pstFWY4xhGFBjkdRuETieUBozgo<\/span><span style=\"color:#C792EA\">\"<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#CED2D6\">    }<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#CED2D6\">  ],<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">  \"service\"<\/span><span style=\"color:#8EACE3\">:<\/span><span style=\"color:#CED2D6\"> [<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#CED2D6\">    {<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">      \"id\"<\/span><span style=\"color:#8EACE3\">:<\/span><span style=\"color:#C792EA\"> \"<\/span><span style=\"color:#ECC48D\">#atproto_pds<\/span><span style=\"color:#C792EA\">\",<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">      \"type\"<\/span><span style=\"color:#8EACE3\">:<\/span><span style=\"color:#C792EA\"> \"<\/span><span style=\"color:#ECC48D\">AtprotoPersonalDataServer<\/span><span style=\"color:#C792EA\">\",<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#8EACE3\">      \"serviceEndpoint\"<\/span><span style=\"color:#8EACE3\">:<\/span><span style=\"color:#C792EA\"> \"<\/span><span style=\"color:#ECC48D\">https:\/\/morel.us-east.host.bsky.network<\/span><span style=\"color:#C792EA\">\"<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#CED2D6\">    }<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#CED2D6\">  ]<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#CED2D6\">}<\/span><\/span><\/code><\/pre>\n<\/figure>\n<p>The DID Document itself works exactly the same way. It specifies:<\/p>\n<ul>\n<li><strong>How to refer to me.<\/strong> The <code>alsoKnownAs<\/code> field confirms that whoever controls <code>did:plc:fpruhuo22xkm5o7ttr2ktxdo<\/code> uses <code>@danabra.mov<\/code> as a handle. \u2705<\/li>\n<li><strong>How to verify the integrity of my data.<\/strong> The <code>publicKeyMultibase<\/code> field tells us the public key with which all changes to my data are signed.<\/li>\n<li><strong>Where my data is stored.<\/strong> The <code>serviceEndpoint<\/code> field tells us the actual server with my data. It\u2019s currently at <code>https:\/\/morel.us-east.host.bsky.network<\/code>.<\/li>\n<\/ul>\n<p>Let\u2019s visualize this:<\/p>\n<p><span style=\"filter:var(--svg-filter);display:inline-block\" alt=\"did:plc:fpruhuo22xkm5o7ttr2ktxdo is bidirectionally connected with the swappable @danabra.mov handle, and points at swappable morel.us-east.host.bsky.network hosting\"><?xml version=\"1.0\" standalone=\"no\"????><\/p>\n<p><svg style=\"max-width: 450px; width: 100%; height: auto;\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewbox=\"0 0 496.55975341796875 503.22839841437144\" width=\"993.1195068359375\" height=\"1006.4567968287429\"><!-- svg-source:excalidraw --><defs\/><g transform=\"translate(10 247.12272922487136) rotate(0 238.27987670898438 17.5)\"><text x=\"0\" y=\"24.668\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"28px\" fill=\"#be4bdb\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">did:plc:fpruhuo22xkm5o7ttr2ktxdo<\/text><\/g><g transform=\"translate(75.72216484801538 404.6572853658249) rotate(0 177.87950917423586 14.343277021703443)\"><text x=\"0\" y=\"20.218283289793156\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"22.94924323472549px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">morel.us-east.host.bsky.network<\/text><\/g><g transform=\"translate(155.72833473598075 75.82628657535406) rotate(0 93.27763366699219 17.464019532254042)\"><text x=\"0\" y=\"24.617281932665158\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"27.94243125160631px\" fill=\"#be4bdb\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">@danabra.mov<\/text><\/g><g stroke-linecap=\"round\"><g transform=\"translate(240.23472287951154 121.6640319594876) rotate(0 0.9435019037955499 59.709888324233816)\"><path d=\"M-1.31 -2.43 C-0.52 18.2, 2.06 101.12, 2.39 121.43 M3.18 2.42 C3.85 22.5, 1.26 97.5, 0.43 117.51\" stroke=\"#be4bdb\" stroke-width=\"2\" fill=\"none\"\/><\/g><g transform=\"translate(240.23472287951154 121.6640319594876) rotate(0 0.9435019037955499 59.709888324233816)\"><path d=\"M6.25 21.14 C7.6 14.84, 4.14 11.46, -2.48 -2.6 M8.63 21.38 C4.68 12.91, 2.25 4.1, -1.65 -3.27\" stroke=\"#be4bdb\" stroke-width=\"2\" fill=\"none\"\/><\/g><g transform=\"translate(240.23472287951154 121.6640319594876) rotate(0 0.9435019037955499 59.709888324233816)\"><path d=\"M-10.85 21.68 C-5.78 15.34, -5.53 11.85, -2.48 -2.6 M-8.46 21.92 C-6.53 13.21, -3.08 4.22, -1.65 -3.27\" stroke=\"#be4bdb\" stroke-width=\"2\" fill=\"none\"\/><\/g><g transform=\"translate(240.23472287951154 121.6640319594876) rotate(0 0.9435019037955499 59.709888324233816)\"><path d=\"M-9 94.09 C-4.36 98.06, -4.13 104.88, -0.74 117.34 M-6.61 94.33 C-4.61 101.98, -1.19 109.35, 0.09 116.67\" stroke=\"#be4bdb\" stroke-width=\"2\" fill=\"none\"\/><\/g><g transform=\"translate(240.23472287951154 121.6640319594876) rotate(0 0.9435019037955499 59.709888324233816)\"><path d=\"M8.09 94.71 C9.03 98.47, 5.55 105.15, -0.74 117.34 M10.48 94.95 C6.6 102.43, 4.13 109.59, 0.09 116.67\" stroke=\"#be4bdb\" stroke-width=\"2\" fill=\"none\"\/><\/g><\/g><mask\/><g transform=\"translate(46.714900744929764 20.781412310127962) rotate(0 90.5606091720565 12.538858845899313)\"><text x=\"0\" y=\"17.67477542917971\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"20.062174153438946px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">handle (swappable)<\/text><\/g><g transform=\"translate(280.5523913537145 459.8527230548657) rotate(0 90.8301866196598 11.852831541802743)\"><text x=\"0\" y=\"16.70775134132511\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"18.964530466884348px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">hosting (swappable)<\/text><\/g><g stroke-linecap=\"round\" transform=\"translate(35.29959978171246 10) rotate(0 216.96939798218773 77.26585604552133)\"><path d=\"M-0.88 0 C93.35 -4.38, 184.9 -2.28, 434.42 0.61 M434.29 2.87 C432.89 55.05, 432.43 112.41, 433.56 151.69 M435.26 156.38 C325.71 157.49, 212.69 158.45, 0.88 154.37 M0.12 157.12 C3.76 91.88, -2.12 31.94, -0.06 -0.63\" stroke=\"#1e1e1e\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\"\/><\/g><g stroke-linecap=\"round\" transform=\"translate(36.23059972148258 327.0258694295853) rotate(0 218.34303324080247 83.10126449239306)\"><path d=\"M0 0.8 C137.73 1.72, 278.72 2.37, 437.29 1.32 M439.56 -2.91 C435.14 56.5, 436.08 119.36, 433.84 164.34 M438.52 167.94 C271.86 167.79, 107.71 169.95, -0.16 168.08 M2.59 168.87 C-4.13 119.02, -3.39 78.21, -0.63 3.24\" stroke=\"#1e1e1e\" stroke-width=\"2.5\" fill=\"none\" stroke-dasharray=\"8 10\"\/><\/g><g stroke-linecap=\"round\"><g transform=\"translate(246.00135796202085 293.77178846214974) rotate(0 -0.7708713597658061 51.108103815570075)\"><path d=\"M1.59 -2.35 C-1.8 39.78, -1.09 77.2, 1.07 104.62 M-1.45 -0.69 C-1.96 29.96, -0.92 58.93, -2.47 103.78\" stroke=\"#be4bdb\" stroke-width=\"2\" fill=\"none\"\/><\/g><g transform=\"translate(246.00135796202085 293.77178846214974) rotate(0 -0.7708713597658061 51.108103815570075)\"><path d=\"M-9.71 78.93 C-7.79 89.79, -4.17 98.3, -1.17 104.98 M-11.23 79.76 C-8.95 86.92, -5.84 93.31, -2.94 104.56\" stroke=\"#be4bdb\" stroke-width=\"2\" fill=\"none\"\/><\/g><g transform=\"translate(246.00135796202085 293.77178846214974) rotate(0 -0.7708713597658061 51.108103815570075)\"><path d=\"M7.39 79.31 C2.95 90.03, 0.22 98.4, -1.17 104.98 M5.87 80.13 C3.1 87.31, 1.17 93.59, -2.94 104.56\" stroke=\"#be4bdb\" stroke-width=\"2\" fill=\"none\"\/><\/g><\/g><mask\/><g transform=\"translate(210.00747193586722 191.96491679041037) rotate(0 10.854095458984375 9.337157556834654)\"><text x=\"0\" y=\"13.161657292114118\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"14.939452090935434px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">did<\/text><\/g><g transform=\"translate(256.5670260475963 345.9010269345822) rotate(0 56.73396301269531 9.337157556834654)\"><text x=\"0\" y=\"13.161657292114118\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"14.939452090935434px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">serviceEndpoint<\/text><\/g><g stroke-opacity=\"0.8\" fill-opacity=\"0.8\" transform=\"translate(264.4970007404554 139.5862672733324) rotate(0 45.536555783690346 9.345888896835959)\"><text x=\"0\" y=\"13.17396498897997\" font-family=\"Excalifont, Xiaolai, sans-serif, Segoe UI Emoji\" font-size=\"14.953422234937536px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">alsoKnownAs<\/text><\/g><\/svg><\/span><\/p>\n<p>Although my handle is <code>@danabra.mov<\/code>, the actual server storing my data is currently <code>https:\/\/morel.us-east.host.bsky.network<\/code>. I\u2019m happy to keep hosting it there but I\u2019m thinking of moving it to a host I control in the future. I can change both my handle and my hosting without disruption to my social apps.<\/p>\n<p>Unlike Rudy, who has a <code>did:web<\/code> identity, I stuck with <code>did:plc<\/code> (which is the default one when you create an account on Bluesky) so that I\u2019m not irrecovably tying myself to any web domain. \u201cPLC\u201d officially stands for a \u201cPublic Ledger of Credentials\u201d\u2014essentially, it is like an npm registry but for DID Documents. (Fun fact: originally PLC meant \u201cplaceholder\u201d but they\u2019ve decided <a target=\"_blank\" target=\"_blank\" class=\" scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"https:\/\/www.youtube.com\/watch?v=m9AVUAUDC2A\">it\u2019s a good tradeoff.<\/a>)<\/p>\n<p>The upside of a <code>did:plc<\/code> identity is that I can\u2019t lose my identity if I forget to renew a domain, or if something bad happens at the top level to my TLD.<\/p>\n<p>The downside of a <code>did:plc<\/code> identity is that whoever operates the PLC registry has some degree of control over my identity. They can\u2019t outright <em>change<\/em> it because every version is recursively signed with the hash of the previous version, every past version is queryable, and the hash of the initial version <em>is<\/em> the DID itself.<\/p>\n<p>However, in theory, whoever operates the PLC registry <a target=\"_blank\" target=\"_blank\" class=\" scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"https:\/\/github.com\/did-method-plc\/did-method-plc?tab=readme-ov-file#plc-server-trust-model\">could<\/a> deny my requests to update the DID Document, or refuse to serve some information about it. Bluesky is currently moving PLC to <a target=\"_blank\" target=\"_blank\" class=\" scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"https:\/\/docs.bsky.app\/blog\/plc-directory-org\">an independent legal entity in Switzerland<\/a> to address some of these concerns. The AT community is also <a target=\"_blank\" target=\"_blank\" class=\" scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"https:\/\/updates.microcosm.blue\/3lz7nwvh4zc2u\">thinking<\/a> and <a target=\"_blank\" target=\"_blank\" class=\" scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"https:\/\/plc.wtf\/\">experimenting<\/a>.<\/p>\n<hr\/>\n<h3 id=\"from-hosting-to-json\"><a target=\"_blank\" target=\"_self\" class=\"linked-heading scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"#from-hosting-to-json\">From Hosting to JSON<\/a><\/h3>\n<p>So far, you\u2019ve learned how to:<\/p>\n<ul>\n<li>Resolve a handle to a DID.<\/li>\n<li>Grab the DID Document for that DID.<\/li>\n<\/ul>\n<p>That actually tells you enough to get the JSON by its <code>at:\/\/<\/code> URI!<\/p>\n<p>Each DID Document includes the <code>serviceEndpoint<\/code> which is the actual hosting. <em>That\u2019s<\/em> the service you can hit by HTTPS to grab any JSON record it stores.<\/p>\n<p>For example, the <code>@ruuuuu.de<\/code> handle resolves to <code>did:web:iam.ruuuuu.de<\/code>, and its DID Document has a <code>serviceEndpoint<\/code> pointing at <code>https:\/\/blacksky.app<\/code>.<\/p>\n<p>To get the <span style=\"word-break:break-word\"><a target=\"_blank\" target=\"_blank\" class=\" scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"https:\/\/pdsls.dev\/at:\/\/ruuuuu.de\/app.bsky.feed.post\/3lzy2ji4nms2z\"><code>at:\/\/ruuuuu.de\/app.bsky.feed.post\/3lzy2ji4nms2z<\/code><\/a><\/span> record, hit the <code>https:\/\/blacksky.app<\/code> server with the <a target=\"_blank\" target=\"_blank\" class=\" scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"https:\/\/docs.bsky.app\/docs\/api\/com-atproto-repo-get-record\"><code>com.atproto.repo.getRecord<\/code><\/a> endpoint, passing different parts of the <code>at:\/\/<\/code> URI as parameters:<\/p>\n<figure data-rehype-pretty-code-figure=\"\" wp_automatic_readability=\"3\">\n<pre style=\"background-color:var(--code-bg);color:#D6D9E0\" tabindex=\"0\" data-language=\"sh\" data-theme=\"Overnight\"><code data-language=\"sh\" data-theme=\"Overnight\" style=\"display:grid\"><span data-line=\"\"><span style=\"color:#8EACE3\">$<\/span><span style=\"color:#C792EA\"> curl<\/span><span style=\"color:#C792EA\"> \"<\/span><span style=\"color:#ECC48D\">https:\/\/blacksky.app\/xrpc\/com.atproto.repo.getRecord?<\/span><span style=\"color:#FFA7C4\">\\<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#ECC48D\">repo=ruuuuu.de&amp;collection=app.bsky.feed.post&amp;rkey=3lzy2ji4nms2z<\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#C792EA\"> |<\/span><span style=\"color:#8EACE3\"> jq<\/span><\/span><\/code><\/pre>\n<\/figure>\n<p>And there it is:<\/p>\n<figure data-rehype-pretty-code-figure=\"\" wp_automatic_readability=\"10\">\n<pre style=\"background-color:var(--code-bg);color:#D6D9E0\" tabindex=\"0\" data-language=\"json\" data-theme=\"Overnight\"><code data-language=\"json\" data-theme=\"Overnight\" style=\"display:grid\"><span data-line=\"\"><span style=\"color:#CED2D6\">{<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#C792EA\">  \"uri\"<\/span><span style=\"color:#CED2D6\">: <\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#ECC48D\">at:\/\/did:web:iam.ruuuuu.de\/app.bsky.feed.post\/3lzy2ji4nms2z<\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#CED2D6\">,<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#C792EA\">  \"cid\"<\/span><span style=\"color:#CED2D6\">: <\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#ECC48D\">bafyreiae4ehmkk4rtajs5ncagjhrsv6rj3v6fggphlbpyfco4dzddp42nu<\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#CED2D6\">,<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#C792EA\">  \"value\"<\/span><span style=\"color:#CED2D6\">: {<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#C792EA\">    \"text\"<\/span><span style=\"color:#CED2D6\">: <\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#ECC48D\">posting from did:web, like a boss<\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#CED2D6\">,<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#C792EA\">    \"$type\"<\/span><span style=\"color:#CED2D6\">: <\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#ECC48D\">app.bsky.feed.post<\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#CED2D6\">,<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#C792EA\">    \"langs\"<\/span><span style=\"color:#CED2D6\">: <\/span><span style=\"color:#C792EA\">[<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#C792EA\">      \"<\/span><span style=\"color:#ECC48D\">en<\/span><span style=\"color:#C792EA\">\"<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#C792EA\">    ]<\/span><span style=\"color:#CED2D6\">,<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#C792EA\">    \"createdAt\"<\/span><span style=\"color:#CED2D6\">: <\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#ECC48D\">2025-09-29T12:53:23.048Z<\/span><span style=\"color:#C792EA\">\"<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#CED2D6\">  }<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#CED2D6\">}<\/span><\/span><\/code><\/pre>\n<\/figure>\n<p>Now let\u2019s get <span style=\"word-break:break-word\"><a target=\"_blank\" target=\"_blank\" class=\" scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"https:\/\/pdsls.dev\/at:\/\/danabra.mov\/sh.tangled.feed.star\/3m23ddgjpgn22\"><code>at:\/\/danabra.mov\/sh.tangled.feed.star\/3m23ddgjpgn22<\/code><\/a><\/span>:<\/p>\n<ul>\n<li>The <code>@danabra.mov<\/code> handle resolves to <code>did:plc:fpruhuo22xkm5o7ttr2ktxdo<\/code>.<\/li>\n<li>The DID Document for <code>did:plc:fpruhuo22xkm5o7ttr2ktxdo<\/code> points at <code>https:\/\/morel.us-east.host.bsky.network<\/code> as the current hosting.<\/li>\n<\/ul>\n<p>Let\u2019s hit it:<\/p>\n<figure data-rehype-pretty-code-figure=\"\" wp_automatic_readability=\"3\">\n<pre style=\"background-color:var(--code-bg);color:#D6D9E0\" tabindex=\"0\" data-language=\"sh\" data-theme=\"Overnight\"><code data-language=\"sh\" data-theme=\"Overnight\" style=\"display:grid\"><span data-line=\"\"><span style=\"color:#8EACE3\">$<\/span><span style=\"color:#C792EA\"> curl<\/span><span style=\"color:#C792EA\"> \"<\/span><span style=\"color:#ECC48D\">https:\/\/morel.us-east.host.bsky.network\/xrpc\/com.atproto.repo.getRecord?<\/span><span style=\"color:#FFA7C4\">\\<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#ECC48D\">repo=danabra.mov&amp;collection=sh.tangled.feed.star&amp;rkey=3m23ddgjpgn22<\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#C792EA\"> |<\/span><span style=\"color:#8EACE3\"> jq<\/span><\/span><\/code><\/pre>\n<\/figure>\n<p>And there you have it:<\/p>\n<figure data-rehype-pretty-code-figure=\"\" wp_automatic_readability=\"9\">\n<pre style=\"background-color:var(--code-bg);color:#D6D9E0\" tabindex=\"0\" data-language=\"json\" data-theme=\"Overnight\"><code data-language=\"json\" data-theme=\"Overnight\" style=\"display:grid\"><span data-line=\"\"><span style=\"color:#CED2D6\">{<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#C792EA\">  \"uri\"<\/span><span style=\"color:#CED2D6\">: <\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#ECC48D\">at:\/\/did:plc:fpruhuo22xkm5o7ttr2ktxdo\/sh.tangled.feed.star\/3m23ddgjpgn22<\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#CED2D6\">,<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#C792EA\">  \"cid\"<\/span><span style=\"color:#CED2D6\">: <\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#ECC48D\">bafyreiaghm4ep5eeqx6yf55z43ge65qswwis7aiwc67rt7ni54jj6pg6fa<\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#CED2D6\">,<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#C792EA\">  \"value\"<\/span><span style=\"color:#CED2D6\">: {<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#C792EA\">    \"$type\"<\/span><span style=\"color:#CED2D6\">: <\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#ECC48D\">sh.tangled.feed.star<\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#CED2D6\">,<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#C792EA\">    \"subject\"<\/span><span style=\"color:#CED2D6\">: <\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#ECC48D\">at:\/\/did:plc:dzmqinfp7efnofbqg5npjmth\/sh.tangled.repo\/3m232u6xrq222<\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#CED2D6\">,<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#C792EA\">    \"createdAt\"<\/span><span style=\"color:#CED2D6\">: <\/span><span style=\"color:#C792EA\">\"<\/span><span style=\"color:#ECC48D\">2025-09-30T20:09:02Z<\/span><span style=\"color:#C792EA\">\"<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#CED2D6\">  }<\/span><\/span>\n<span data-line=\"\"><span style=\"color:#CED2D6\">}<\/span><\/span><\/code><\/pre>\n<\/figure>\n<p>And that\u2019s how you resolve an <code>at:\/\/<\/code> URI.<\/p>\n<p><em>Exercise: In the record above, the <code>subject<\/code> is a link to another record. Figure out the handle of its owner and the contents of that record. Use <a target=\"_blank\" target=\"_blank\" class=\" scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"https:\/\/pdsls.dev\/\">pdsls<\/a> to check your answer.<\/em><\/p>\n<hr\/>\n<h3 id=\"in-conclusion\"><a target=\"_blank\" target=\"_self\" class=\"linked-heading scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"#in-conclusion\">In Conclusion<\/a><\/h3>\n<p>To resolve an arbitrary <code>at:\/\/<\/code> URI, you need to follow three steps:<\/p>\n<ol>\n<li>Resolve the handle to an identity (using DNS and\/or HTTPS).<\/li>\n<li>Resolve that identity to a hosting (using the DID Document).<\/li>\n<li>Request the JSON from that hosting (by hitting it with <code>getRecord<\/code>).<\/li>\n<\/ol>\n<p>If you\u2019re building a client app or a small project, an <a target=\"_blank\" target=\"_blank\" class=\" scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"https:\/\/sdk.blue\/\">SDK<\/a> will handle all of this for you. However, for good performance, you\u2019ll want to hit a resolution cache instead of doing DNS\/HTTPS lookups on every request. <a target=\"_blank\" target=\"_blank\" class=\" scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"https:\/\/quickdid.smokesignal.tools\/\">QuickDID<\/a> is one such cache. You can also check out the <a target=\"_blank\" target=\"_blank\" class=\" scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"https:\/\/tangled.org\/@pdsls.dev\/pdsls\/blob\/main\/src\/utils\/api.ts\">pdsls source<\/a> to see how exactly it handles resolution.<\/p>\n<p>In practice, a lot of apps don\u2019t end up needing to resolve <code>at:\/\/<\/code> URIs or load JSON records because they <em>receive<\/em> data from the network <a target=\"_blank\" target=\"_blank\" class=\" scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"https:\/\/pdsls.dev\/jetstream?instance=wss%3A%2F%2Fjetstream1.us-east.bsky.network%2Fsubscribe\">via a websocket<\/a> and aggregate it in a local database. If that\u2019s your approach, you\u2019ll still use the <code>at:\/\/<\/code> URIs as unique identifiers for user-created data, but the data itself will get pushed to you rather than pulled by you. Still, it\u2019s useful to know that you <em>can<\/em> fetch it on demand.<\/p>\n<p>The AT protocol is fundamentally an abstraction over HTTP, DNS, and JSON. But by standardizing how these pieces fit together\u2014putting the user in the authority position, separating identity from hosting, and making data portable\u2014it turns the web into a place where <a target=\"_blank\" class=\" scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"https:\/\/overreacted.io\/open-social\/\">your content belongs to you<\/a>, not to the apps that display it.<\/p>\n<p>There\u2019s more to explore in the atmosphere, but now you know where it\u2019s <code>at:\/\/<\/code>.<\/p>\n<hr\/>\n<p><a target=\"_blank\" target=\"_blank\" class=\" scale-100 active:scale-100\" style=\"opacity:1;transition:transform 0.2s ease-in-out, opacity 0.2s 0.4s linear\" href=\"https:\/\/tangled.org\/@danabra.mov\/overreacted\/blob\/main\/public\/where-its-at\/index.md?code=true\">Fork on Tangled<\/a><\/p>\n<\/div>\n\n<br \/><a href=\"https:\/\/overreacted.io\/where-its-at\/\">\u5143\u306e\u8a18\u4e8b\u3092\u78ba\u8a8d\u3059\u308b <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"You might have heard about the AT protocol (if not, read this!) Together, all servers speaking the AT protocol [&hellip;]","protected":false},"author":1,"featured_media":8135,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2],"tags":[],"class_list":["post-8134","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hatena-blog"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Where It&#039;s at:\/\/ \u2014 overreacted - \u30dd\u30b1\u30b3\u30f3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/overreacted.io\/where-its-at\/\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Where It&#039;s at:\/\/ \u2014 overreacted - \u30dd\u30b1\u30b3\u30f3\" \/>\n<meta property=\"og:description\" content=\"You might have heard about the AT protocol (if not, read this!) Together, all servers speaking the AT protocol [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/overreacted.io\/where-its-at\/\" \/>\n<meta property=\"og:site_name\" content=\"\u30dd\u30b1\u30b3\u30f3\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-04T16:27:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/10\/1759595220_opengraph-image.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"info@pokecon.jp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u57f7\u7b46\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"info@pokecon.jp\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593\" \/>\n\t<meta name=\"twitter:data2\" content=\"15\u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/overreacted.io\\\/where-its-at\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/8134\\\/\"},\"author\":{\"name\":\"info@pokecon.jp\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\"},\"headline\":\"Where It&#8217;s at:\\\/\\\/ \u2014 overreacted\",\"datePublished\":\"2025-10-04T16:27:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/8134\\\/\"},\"wordCount\":2382,\"image\":{\"@id\":\"https:\\\/\\\/overreacted.io\\\/where-its-at\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/1759595220_opengraph-image.png\",\"articleSection\":[\"\u306f\u3066\u306a\u30d6\u30ed\u30b0\"],\"inLanguage\":\"ja\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/8134\\\/\",\"url\":\"https:\\\/\\\/overreacted.io\\\/where-its-at\\\/\",\"name\":\"Where It's at:\\\/\\\/ \u2014 overreacted - \u30dd\u30b1\u30b3\u30f3\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/overreacted.io\\\/where-its-at\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/overreacted.io\\\/where-its-at\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/1759595220_opengraph-image.png\",\"datePublished\":\"2025-10-04T16:27:00+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/overreacted.io\\\/where-its-at\\\/#breadcrumb\"},\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/overreacted.io\\\/where-its-at\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/overreacted.io\\\/where-its-at\\\/#primaryimage\",\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/1759595220_opengraph-image.png\",\"contentUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/10\\\/1759595220_opengraph-image.png\",\"width\":1200,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/overreacted.io\\\/where-its-at\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u30db\u30fc\u30e0\",\"item\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Where It&#8217;s at:\\\/\\\/ \u2014 overreacted\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#website\",\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/\",\"name\":\"\u30dd\u30b1\u30b3\u30f3\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ja\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\",\"name\":\"info@pokecon.jp\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"caption\":\"info@pokecon.jp\"},\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/author\\\/infopokecon-jp\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Where It's at:\/\/ \u2014 overreacted - \u30dd\u30b1\u30b3\u30f3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/overreacted.io\/where-its-at\/","og_locale":"ja_JP","og_type":"article","og_title":"Where It's at:\/\/ \u2014 overreacted - \u30dd\u30b1\u30b3\u30f3","og_description":"You might have heard about the AT protocol (if not, read this!) Together, all servers speaking the AT protocol [&hellip;]","og_url":"https:\/\/overreacted.io\/where-its-at\/","og_site_name":"\u30dd\u30b1\u30b3\u30f3","article_published_time":"2025-10-04T16:27:00+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/10\/1759595220_opengraph-image.png","type":"image\/png"}],"author":"info@pokecon.jp","twitter_card":"summary_large_image","twitter_misc":{"\u57f7\u7b46\u8005":"info@pokecon.jp","\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593":"15\u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/overreacted.io\/where-its-at\/#article","isPartOf":{"@id":"https:\/\/pokecon.jp\/job\/8134\/"},"author":{"name":"info@pokecon.jp","@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997"},"headline":"Where It&#8217;s at:\/\/ \u2014 overreacted","datePublished":"2025-10-04T16:27:00+00:00","mainEntityOfPage":{"@id":"https:\/\/pokecon.jp\/job\/8134\/"},"wordCount":2382,"image":{"@id":"https:\/\/overreacted.io\/where-its-at\/#primaryimage"},"thumbnailUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/10\/1759595220_opengraph-image.png","articleSection":["\u306f\u3066\u306a\u30d6\u30ed\u30b0"],"inLanguage":"ja"},{"@type":"WebPage","@id":"https:\/\/pokecon.jp\/job\/8134\/","url":"https:\/\/overreacted.io\/where-its-at\/","name":"Where It's at:\/\/ \u2014 overreacted - \u30dd\u30b1\u30b3\u30f3","isPartOf":{"@id":"https:\/\/pokecon.jp\/job\/#website"},"primaryImageOfPage":{"@id":"https:\/\/overreacted.io\/where-its-at\/#primaryimage"},"image":{"@id":"https:\/\/overreacted.io\/where-its-at\/#primaryimage"},"thumbnailUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/10\/1759595220_opengraph-image.png","datePublished":"2025-10-04T16:27:00+00:00","author":{"@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997"},"breadcrumb":{"@id":"https:\/\/overreacted.io\/where-its-at\/#breadcrumb"},"inLanguage":"ja","potentialAction":[{"@type":"ReadAction","target":["https:\/\/overreacted.io\/where-its-at\/"]}]},{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/overreacted.io\/where-its-at\/#primaryimage","url":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/10\/1759595220_opengraph-image.png","contentUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/10\/1759595220_opengraph-image.png","width":1200,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/overreacted.io\/where-its-at\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u30db\u30fc\u30e0","item":"https:\/\/pokecon.jp\/job\/"},{"@type":"ListItem","position":2,"name":"Where It&#8217;s at:\/\/ \u2014 overreacted"}]},{"@type":"WebSite","@id":"https:\/\/pokecon.jp\/job\/#website","url":"https:\/\/pokecon.jp\/job\/","name":"\u30dd\u30b1\u30b3\u30f3","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/pokecon.jp\/job\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ja"},{"@type":"Person","@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997","name":"info@pokecon.jp","image":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","caption":"info@pokecon.jp"},"url":"https:\/\/pokecon.jp\/job\/author\/infopokecon-jp\/"}]}},"_links":{"self":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/8134","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/comments?post=8134"}],"version-history":[{"count":1,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/8134\/revisions"}],"predecessor-version":[{"id":8136,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/8134\/revisions\/8136"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/media\/8135"}],"wp:attachment":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/media?parent=8134"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/categories?post=8134"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/tags?post=8134"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}