[Atp] Re: Opening the AT URI (at://) Syntax Discussion

Orie <orie@or13.io> Wed, 08 July 2026 03:56 UTC

Return-Path: <orie@or13.io>
X-Original-To: atp@mail2.ietf.org
Delivered-To: atp@mail2.ietf.org
Received: from localhost (localhost [127.0.0.1]) by mail2.ietf.org (Postfix) with ESMTP id B8BB81129F3C7 for <atp@mail2.ietf.org>; Tue, 7 Jul 2026 20:56:47 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ietf.org; s=ietf1; t=1783483007; bh=ra3OUh3/YOngHwLVZKEKEErFN0tGjqrl0i1W6IqQZIw=; h=References:In-Reply-To:From:Date:Subject:To:Cc; b=O8N0/PC3x+VR01QiwyaQnOn0p50BxkNxjY5exASK1PJ7ZF5nGjh9OgBZCBk8Duw9X jgnKwTZwAID8LTa9QDfyZBEZBA+QGJ0s+rh9CM3FnkWw6tsEEoReTZX6fLDd1T/g97 GCoR+WniMntw+o1sdPfCYkcxxQBgoKrFiwAMEZUo=
X-Virus-Scanned: amavisd-new at ietf.org
X-Spam-Flag: NO
X-Spam-Score: -0.09
X-Spam-Level:
X-Spam-Status: No, score=-0.09 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HTML_MESSAGE=0.001, PDS_OTHER_BAD_TLD=1.999, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_KAM_HTML_FONT_INVALID=0.01] autolearn=no autolearn_force=no
Authentication-Results: mail2.ietf.org (amavisd-new); dkim=pass (2048-bit key) header.d=or13.io
Received: from mail2.ietf.org ([166.84.6.31]) by localhost (mail2.ietf.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id KQLO9H8g4Vha for <atp@mail2.ietf.org>; Tue, 7 Jul 2026 20:56:46 -0700 (PDT)
Received: from mail-vk1-xa34.google.com (mail-vk1-xa34.google.com [IPv6:2607:f8b0:4864:20::a34]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (P-256) server-digest SHA256) (No client certificate requested) by mail2.ietf.org (Postfix) with ESMTPS id 92EF41129EE8D for <atp@ietf.org>; Tue, 7 Jul 2026 20:55:13 -0700 (PDT)
Received: by mail-vk1-xa34.google.com with SMTP id 71dfb90a1353d-5bdd0779366so45021e0c.1 for <atp@ietf.org>; Tue, 07 Jul 2026 20:55:13 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; t=1783482913; cv=none; d=google.com; s=arc-20260327; b=RbxGWsft9VuwWsGfDCAbPDgA+CqF35401x+ql8BbxU/XAfehCa6cHCsZLCLj3gnbyy CxFplTzGA7DXFG4VTKVyAcubCkvm0gWo87nFbZYADo8wctSFtyvL0F4lmd/SvpR99AK7 kfEpCzJf/Rp/IQ0E3DiVH9ElQtRQ9kKm8lEU2gnRRUh6egjohpJh5wt7cmySwtJ1yQps oa6/gViCIkR0CJJRVmq9MZyvpAHGyB93D2BMW0hPpJFen3xcnXA3DEOGwkD4vMdPT2r3 1CKWyuaBxp5TeQoTN9CTV00Y2oa1ECRdNPy3StBBJLHRzJA5ol7pDPzYnX2aLHSo4js3 JuQw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=HNGZ+AViPy722/OEbu8ERW5K+uHdcdHncUYD8FWZULE=; fh=lHvZNCyJtacJ5OvvGkvVaIz0qQV+pCafwuMRBavI/gc=; b=BzEjza2y5OTnMXMtjLJs6paR+5FeJlJ0WDTU3Pbz9uXfu9gsMIaOoSapgIAorFj2LN ofno6tgEQHCHNQnx8OomInmvZbzAz4ggRtqh68HISSCvaF2kBWVzHM0/9paKi8KeQJjM iBSt0RrK3phhH1E1v4FSjW/JeXeUXum92eJ8g7JNGS+vlZLJe19Pwgz/5DJCvzm7ojSY KvTNSgdkL+MlO3R6dQyH1aq2E4HVZH4ZaomkPqzddhSb4BWdvNy5I9/FHWp7HRPkAU7T QoYfBxvmWpR+x/BAewLlffwEK4q5k47rsRGPmIlMEoqiXGHT9NVgJmCbXGE4DHwZCtVc lpXA==; darn=ietf.org
ARC-Authentication-Results: i=1; mx.google.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=or13.io; s=google; t=1783482913; x=1784087713; darn=ietf.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=HNGZ+AViPy722/OEbu8ERW5K+uHdcdHncUYD8FWZULE=; b=FeSgtcJkVSDomveg9Dox+sHBMNevS/kT6VGjg2gjuBbkCsCK/ZmE6+aSIKLu739GdD DAIOKpEhqtRVwRmV7g8sOWBh9NvFe9UgczNUn0LyrmgxfxqtP28w0u529i9PWKtO06EW tWvzMM6KMISR7FB2TdwLsHpY8lkUD79lRsy34kXmz/hxfd8+pDO6YdYo41mU2d9r6yt5 2FDzmEMt52aBCCk83kkpJJahK5A3wJpC+lnpJFlIzKeveKgmTK1dHvvY8E21vM2X8BKH cwa9cgFT7xlTZfCJs/w1XYpJFCQ9lBhbY/Un3w869bW7COrv1jMOmjWdw+YnU57ThPVB WgTg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783482913; x=1784087713; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=HNGZ+AViPy722/OEbu8ERW5K+uHdcdHncUYD8FWZULE=; b=O9NDYUWEWvbH3sOhZttMbRxKqR/6E3uzYHjGcbrCH+1UZN9lgFP3wLNFUhIBhDoA7N MS5y935kX26qUp3RnHdSNwIFTdYaZDccTIF7XBMxhXt+x32gEM9GNMK+9bDvvN4LtM/x Qqmt+v/cEvysjIc+sX4aEZfdGLnoNEG3sT47t5KQ/8bvU0rwgg6+UixduwgL8rU0Sem8 qFYMDvrlNPF3lMv3TJ6VkYYHlmmkxPmMk5/cMkhsUagZz+8ly31kfC1Bz3ZqUnYyVjwS NPPFIjYdPH5Ykqz550xZHmFz72qZ+sAL92mVkQA9s7rqmpGFBE1JlLTxfOGV9P5p7E92 plng==
X-Gm-Message-State: AOJu0YzovSx8m8IBQU9a2dy2DTGcl4ZtnRQwl/RjqEYwGgI01ZsHUBrZ Jbpd/3YUc17Ek1S3fHa/YkVgdmQ32OLiAXp1kVb2gGgQJ5zng3tZRo8nyWgWpxdS2kacTxnkT3Q C5eXY8TJ+5qogY7/CzmUI9ujdm2HgRz9ue6FavdqfaOdFxKkXfoJ909hfCQ==
X-Gm-Gg: AfdE7ckxSJctf663/RldgFExj2F+9vfBhQ60xUVEW+5z5/gP5zYCiJud9HQl4sWis/r KhvNOE+hl4q/58OFUs79/+PUfw2fuW7gBslozec6u3HkdSl8RnIFPIrYYdIaJTGxrOIoqLAkxEi sK/QpsxWNQDyiqL2YdZjxaGujBAHAm1GAMGNzlP1oQfHat+5dOzFYV4x/2DRLf2fyJmJRGZ2qdf qbxvWSbhdAmf5vW64SJitgCRMs690FaozgXuEE2C15/C1QKFUC8y9fSYr1JYV0OMGoS5KOPTMoO MIeoNaLY7jtkL7nF+rK0m9aXDBdvw9SGjpBL68CSwQ==
X-Received: by 2002:a05:6122:20a6:b0:576:c4b:460a with SMTP id 71dfb90a1353d-5bf75dce37bmr340351e0c.8.1783482912636; Tue, 07 Jul 2026 20:55:12 -0700 (PDT)
MIME-Version: 1.0
References: <CABFYohg6ZCym+OJr9W2TmHb2MLasyiU+GghST0e5VsdiGiQDEg@mail.gmail.com> <CA+9kkMD2Se=5HDufpYqzQE8eQ-qgy+BWLi=jSoiBXhh50EfoZg@mail.gmail.com> <CAFLTOV4fy-_Lu2TpZChkzD0H+=z=ETrzEzmDmJEjKDGoO-MDJQ@mail.gmail.com> <ZFNXoemdqchYhODRiO5GL2fHQbeF1Tz44jZ0kTpQA8e53qoprLC3YFnU0P5cwQ0fBDO-FBugj7RwwhrKLFZ0eTOyO-_URDfiW0SOB932ca4=@learningproof.xyz> <CA+9kkMBiVWOH8RXGSHCURFpSrihwBA8aXgrf72mTeL+Ks0KSFw@mail.gmail.com> <P87HKizHT6sBtPkAnrjydXBSy3F92VgNp0-Xb-7mBrkZ62nQ_2lfMW1y_PFKEa2-X8lIcL6GtZxqg9lNYlVgk6ncK9lA2puJfXI_yT0IXZY=@learningproof.xyz> <CAMzqgoyrHnBwufaWkPEV2pvnYNiLXcVJGE7FhfJtDbGBNYYtrQ@mail.gmail.com> <284B69BA-C33B-435B-B832-1E4313D29EB8@knotbin.com> <CAMzqgow4hwJ01rD16CwNNSJeK1jK3p_kyAmmqgXmvEq_vHv_0w@mail.gmail.com> <CAPC=aNXNeJsO2WdrC6o9qtsFSdROG-ThK9vgb_TXO1Ngg5Zc=Q@mail.gmail.com>
In-Reply-To: <CAPC=aNXNeJsO2WdrC6o9qtsFSdROG-ThK9vgb_TXO1Ngg5Zc=Q@mail.gmail.com>
From: Orie <orie@or13.io>
Date: Tue, 07 Jul 2026 22:55:02 -0500
X-Gm-Features: AVVi8CfebTjgq9GCVqupc98KfSIILQU9Db6GZGfqMwNZ0rlYlI17JKHmpXeUOYM
Message-ID: <CAMzqgoySTSLu7Bphj-hZRDG-7B67cBm89SB03yzt6F_8M4toag@mail.gmail.com>
To: ietf@jackgrigg.com
Content-Type: multipart/alternative; boundary="000000000000789060065611794d"
Message-ID-Hash: FFTXJ7IAVRO6Z4NVMA4UDDKM2O3AX5AZ
X-Message-ID-Hash: FFTXJ7IAVRO6Z4NVMA4UDDKM2O3AX5AZ
X-MailFrom: orie@or13.io
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header
CC: atp@ietf.org
X-Mailman-Version: 3.3.9rc6
Precedence: list
Subject: [Atp] Re: Opening the AT URI (at://) Syntax Discussion
List-Id: Authenticated Transfer <atp.ietf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/atp/_phl01u1CWPpmpHGHRpQuofhVMY>
List-Archive: <https://mailarchive.ietf.org/arch/browse/atp>
List-Help: <mailto:atp-request@ietf.org?subject=help>
List-Owner: <mailto:atp-owner@ietf.org>
List-Post: <mailto:atp@ietf.org>
List-Subscribe: <mailto:atp-join@ietf.org>
List-Unsubscribe: <mailto:atp-leave@ietf.org>

So if most account ids are did:plc today, you could ommit the did:plc:
prefix and insert it when absent, and have well formed URIs.

But that's not desirable because you want to support multiple did methods,
hence the need to url encode account identifiers.

But with the need to support multiple did methods, you now must contend
with the fact that every at uri might be a valid did uri with an at://
prefix... Or it might not be a valid did uri, depending on the method.

I think best solution is to make at:// uris support account identifiers
that are not limited to dids.

And so your resolution logic is not tied exclusively to did url resolvers.

Btw, what media types do these URIs dereference to? Are you sure those
media types are supported by did resolvers for the case where the resolver
supports a given method, and the the at uri is also a valid did url?

What happens if the at uri resolves to content that is different than what
the did url resolves too?



On Tue, Jul 7, 2026, 10:06 PM Jack Grigg <ietf@jackgrigg.com> wrote:

> Hi Orie,
>
> On Wed, 8 Jul 2026, 3:22 am Orie, <orie@or13.io> wrote:
>
>> Why is an account identifier needed for at uris?
>>
>> Why can't they just be like ipfs uris?
>>
>
> IPFS URIs work because they are content-addressing, in a very simple way:
> just hash the data. The side-effect of their design is they are completely
> opaque and require a globally-consistent datastore. The need for a globally
> unique cryptographically binding identifier means that the authority part
> of the URI is a long opaque string (the CID), and cannot encode any
> semantics about the data or where to find it. (The URIs support path
> segments, but those navigate *inside* the data; they do not encode info
> about the top-level data).
>
> By contrast, AT URIs leverage and expose the inherent structure of the
> atproto repository, by using the form
> at://account_id/record_type/record_id. This choice to restrict the data
> model from "all possible data" down to "ATProto repo data" has several
> benefits:
>
> - Data now only needs to be unique relative to the account ID, instead of
> globally. In particular, this means that record IDs don't need to be
> generated in a globally unique way; they only need to be unique for a given
> (account_id, record_type) tuple.
> - The account ID can serve multiple purposes: it is the globally-unique
> identifier (but over a much smaller set than "all possible data"), and (by
> the choice to use DIDs) it can also be resolvable to provide a way for
> services to learn *where* data under that account is stored. Tjis greatly
> simplifies the storage model: no need for a DHT or hard dependency on a
> single centralised storage service.
> - A service that observes an AT URI can immediately take actions based on
> its record type (e.g. ignoring all AT URIs that aren't image metadata
> records, or aren'tfrom a specific user). Then when it resolves the URIs it
> does act on, it will validate the data against the record type as usual.
> This can save significant bandwidth by avoiding fetching data you know you
> won't use.
>
> As a side-note, ATProto *does* use IPFS CIDs for "strong references" when
> there is a desire for data to be immutable in a given context. An AT URI
> only says *where* to find a given (semantic) record (like an HTTP URI).
>
> Cheers,
> Jack
>
>
>> On Tue, Jul 7, 2026, 9:07 PM Roscoe Rubin-Rottenberg <roscoe@knotbin.com>
>> wrote:
>>
>>> The fact that handles aren’t a persistent identifier (people can change
>>> their handle) makes that a non starter. I think either Brian or Daniel
>>> mentioned that they actually think the opposite should be true. Handles
>>> should be disallowed in URIs because it breaks future URIs and isn’t a
>>> persistent identifier.
>>>
>>> On Jul 7, 2026, at 10:03 PM, Orie <orie@or13.io> wrote:
>>>
>>> Is it too late to think of at uri as operating on handles? And then
>>> rewrite the well-formed uris to whatever is needed for backward compat?
>>>
>>> at://example.com/. <http://example.com/>.. (Actually  a uri) ->
>>> at://did: whatever (not a uri)
>>>
>>> Don't attempt to update URIs... And imo don't try to use DID URLs.
>>>
>>> On Tue, Jul 7, 2026, 6:06 AM bumblefudge von CASA <
>>> bumblefudge@learningproof.xyz> wrote:
>>>
>>>> Hey Ted:
>>>>
>>>> I was afraid someone would ask.  It's a bit of a mess[^1], tbh, because
>>>> the suite of changes being proposed was happening across a few interlocking
>>>> PRs and then one of the editors asked they be withdrawn so he could redo
>>>> them all in a different order[^2], and now the whole operation of making
>>>> more expressive DID URLs is at risk[^3] because of W3C timelines.  Of all
>>>> the mountains this WG could move[^4] in the interest of the having a
>>>> grown-up version of the ATURI, I would maintain that the DID Resolution
>>>> spec at W3C is by far the most realistic... it's really just getting a few
>>>> DID WG members (two of which have already chimed up on this thread) to land
>>>> something before the normative window closes at W3C.
>>>>
>>>> Thanks,
>>>> __bf
>>>>
>>>> [^1]: https://github.com/w3c/did-resolution/pulls?q=
>>>> [^2]: https://github.com/w3c/did-resolution/pull/344
>>>> [^3]: https://github.com/w3c/did-resolution/pull/346
>>>> [^4]: https://bnewbold.leaflet.pub/3mph4hzvbdc2v
>>>> ---
>>>> bumblefudge
>>>> janitor @Chain Agnostic Standards Alliance
>>>> <https://github.com/chainagnostic/CASA>
>>>> contractable via learningProof UG <https://learningproof.xyz/>
>>>> mostly berlin-based
>>>>
>>>> On Tuesday, July 7th, 2026 at 12:10 PM, Ted Hardie <ted.ietf@gmail.com>
>>>> wrote:
>>>>
>>>> Howdy,
>>>>
>>>> Can you provide a pointer to the relevant PRs?
>>>>
>>>> thanks,
>>>>
>>>> Ted
>>>>
>>>> On Tue, Jul 7, 2026 at 10:37 AM bumblefudge von CASA <
>>>> bumblefudge@learningproof.xyz> wrote:
>>>>
>>>>> I would also mention that there is a third option beyond "opening up
>>>>> the syntax" to not being a URI or conforming to the URI spec, in Ted's
>>>>> formulation: just using DID URLs, which were designed for exactly the
>>>>> usecase of a domain-independent URI with a DID as authority and
>>>>> DID-method-specific (but potentially shared across DID methods) mechanisms
>>>>> for paths and query parameters. In recent months, the DID WG has been
>>>>> considering PRs that would make these more expressive and would quite
>>>>> neatly encompass all the current information conveyed in an at://URI...
>>>>>
>>>>> ---
>>>>> bumblefudge
>>>>> janitor @Chain Agnostic Standards Alliance
>>>>> <https://github.com/chainagnostic/CASA>
>>>>> contractable via learningProof UG <https://learningproof.xyz/>
>>>>> mostly berlin-based
>>>>>
>>>>> On Friday, July 3rd, 2026 at 4:55 PM, Stephen Curran <
>>>>> swcurran@cloudcompass.ca> wrote:
>>>>>
>>>>> On Fri, Jul 3, 2026 at 4:01 AM Ted Hardie <ted.ietf@gmail.com> wrote:
>>>>> > I think you have two choices: define it as an identifier that is
>>>>> not a URI (thus opening up the syntax) or updating the syntax to one that
>>>>> meets the URI specification's requirements. If you take the latter
>>>>> approach, one way to do it might be to adjust it so that the did is not
>>>>> treated as an authority.
>>>>> >
>>>>> > at:did%3Aplc%3Avwzwgnygau7ed7b7wt5ux7y2%2F
>>>>> app.bsky.feed.post%2F3k5nobkf2w72g
>>>>> <http://app.bsky.feed.post/3k5nobkf2w72g>
>>>>>
>>>>>>
>>>>> I agree that percent-encoding would be the better (albeit much uglier)
>>>>> way, as just doing a text substitution means that the at: cannot use DID
>>>>> Methods that embed parts of URIs in the DID -- e.g. the current did:web and
>>>>> did;webvh Methods. By definition for those methods, percent-encoding is the
>>>>> only way to embed the DID identifier as proposed as the components allow
>>>>> any valid URI character. There is no character that can just replace the
>>>>> ":"s.
>>>>>
>>>>>
>>>>>
>>>> _______________________________________________
>>>> Atp mailing list -- atp@ietf.org
>>>> To unsubscribe send an email to atp-leave@ietf.org
>>>>
>>> _______________________________________________
>>> Atp mailing list -- atp@ietf.org
>>> To unsubscribe send an email to atp-leave@ietf.org
>>>
>>>
>>>
>>> _______________________________________________
>> Atp mailing list -- atp@ietf.org
>> To unsubscribe send an email to atp-leave@ietf.org
>>
>