[Atp] atmoq: ATProto over Media over QUIC Transport

Eli Mallon <eli@stream.place> Wed, 15 July 2026 04:17 UTC

Return-Path: <eli@stream.place>
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 04D3E116F9D61 for <atp@mail2.ietf.org>; Tue, 14 Jul 2026 21:17:32 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ietf.org; s=ietf1; t=1784089052; bh=0FSiFhZl3VPwikfR5DzfGPzAC6IMRfvc+RCssZ04PW0=; h=From:Date:Subject:To; b=c6e8SZmo9iygv8gTOZafPlFCxFkatJu4cgRHTA12e4GYpDYJjGv3mEl5bMvB2akCj /Sx2GeGDKAuyKaGtHswjIQOeB4tmHoAmJCbcjuMld2v0XOkStKnyC5xxwGnvW4mCaJ CBUFAjOOV+8AQBeaX8iwGBWxeTEgR21aN4qQETQU=
X-Virus-Scanned: amavisd-new at ietf.org
X-Spam-Flag: NO
X-Spam-Score: -1.889
X-Spam-Level:
X-Spam-Status: No, score=-1.889 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_KAM_HTML_FONT_INVALID=0.01] autolearn=ham autolearn_force=no
Authentication-Results: mail2.ietf.org (amavisd-new); dkim=pass (2048-bit key) header.d=stream-place.20251104.gappssmtp.com
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 Bg7IfFLXcU-l for <atp@mail2.ietf.org>; Tue, 14 Jul 2026 21:17:31 -0700 (PDT)
Received: from mail-pf1-x42b.google.com (mail-pf1-x42b.google.com [IPv6:2607:f8b0:4864:20::42b]) (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 269E8116F9D56 for <atp@ietf.org>; Tue, 14 Jul 2026 21:17:31 -0700 (PDT)
Received: by mail-pf1-x42b.google.com with SMTP id d2e1a72fcca58-84862b0d5f8so1526147b3a.3 for <atp@ietf.org>; Tue, 14 Jul 2026 21:17:31 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; t=1784089050; cv=none; d=google.com; s=arc-20260327; b=ZpPvT/1ErGNPdIRx63hLIEzyWsAVe2HBgMegZPpq1qRFvKUWCRyhIzj9DlrLIRAlht LHai35rL6AiOvwGoho3RXET+U4CJWJEIkluvv3PqqLrc5s6w4GSPnDoaCojSRpSkaGL1 DKWWR/wbuvjuJPukYDyK7eUS0Z0oFcY7d6zC9Rm1EBnBtsSjY2YwdI/MEhpgddt5L4VL CwVC7IZ6/rJUKZ6iaYw720Urzy/jDJpEAv/ImcUEb2NZh0FMs9da2xDXTyk9RYZIji9k woHoc+umsbEji1sOu4EgzzGBm0AmbzTaTGjyaWTh5Z/JG1ApGVpkDwA2O9NsrguA9Ne6 Z2aQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=0FSiFhZl3VPwikfR5DzfGPzAC6IMRfvc+RCssZ04PW0=; fh=Ey4raUt1O8w4kZJlRV+d2BKKjWnLGEvIFibDo3ZjRYI=; b=ARPiBCghYqdoI18o7rWR6FGRQ4OYhRT9e4+VDSCsdz4QmFsOfZ10T/qEndB4rqv76M cEYHYcbeb2jRmJErWKd1xb7SiWvsHKarV0McYVd7v4LSXKqYfknkJ0Dr6dfYk5rW0Zc6 /esInB0REouQXD+1hOxkhr+BDdt2ebdgWW4tU59Sweq2bfoBwX663xgrpSERaUswzA1C ZJzfizaHDq05RhKk7J/6w2mkEwJ6fxvOb1KQ5pqeKAlbK8osrr7wOSH8JAemj/hMjb5j R93y5EKi1newkBFl3flqPIyoLcfIu1vcMoH/7gPOaqo2mJYdhHYl29aIrCZ2j10X++BR GgLw==; darn=ietf.org
ARC-Authentication-Results: i=1; mx.google.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=stream-place.20251104.gappssmtp.com; s=20251104; t=1784089050; x=1784693850; darn=ietf.org; h=content-type:to:subject:message-id:date:from:mime-version:from:to :cc:subject:date:message-id:reply-to:content-type; bh=0FSiFhZl3VPwikfR5DzfGPzAC6IMRfvc+RCssZ04PW0=; b=dSTFLzZeOZEs5MJtYTnZDAUidXQcVRb5ppPoM1zVnxtJg1c0KAF3x3Ec+gtNd7qgUu lhVZ9q631UE4A9Agv6ytpTskLGW6fpsh0LIT82tCjHFjd+8aJbed8cVAw9rn7xenYaqw VT0uuKTXZ0yOloC/WFFn3FMrk6U9wCxlzgcCC6QKuc0RuRiHsv+v6WoaG5KwNK3jmxX/ 3HQqIbQsY8ev2WLO+JFHLgpZRxhvD6X+8EXiRVb1IAMvEC6SEaWcEwrMtn0fC/Ym5/GT p1uziOloYED+oxPVuYOSWDG5AWBTzchZeA+8XZQk5GapZBjT4jQ8E6RHvNqwtaMSm7Ty GlLQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784089050; x=1784693850; h=content-type:to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=0FSiFhZl3VPwikfR5DzfGPzAC6IMRfvc+RCssZ04PW0=; b=IdkP6z2f8QglzK1LU2o9L1+qH80BleJ07f6Lbp42W5hCBz3lVZLJLPQoj5Km5mMLvC UXhN1a08ZzNr5i2HLX6Sx4tEZHQwMnxTFKJChRkB6JtSWBxJGOC4BFO0wy5i5Uiy7L7I zd70dMMYT/baU5tU4xKeJO1fEtzobQZ8ujUkn20o7EF7NZe/4v/thqddcxd6hZRPJicF IsYFDZYp/4/UP/3qW0MxQtptl7K/ujzyTOSEk5SSLkcUty217djG0XtDp5ZsoY1pF/po V3W1b6ix4V84wI934ipokl4hbWDdpV09eg44wzkfWwTpwsN6km+xQ3UUQ3m5XA2ZpvVT yn6Q==
X-Gm-Message-State: AOJu0YxJ40UwVKWGu34SKiHU2vNLlE8+WFg3Fxd2mnTN0rXh7a+NyAMv 5ZdpvmaB7PDdnc/MmE/IZ3vIk/HPIyFDVjrsSLh5REzkpxv73kyXid0sBzcKKvDSFzCIq5/Echg AI06aswkw9k5PFQXcn+v1vH62ab0RFtthP8HBTFnmAaHcxtr+y05l48g=
X-Gm-Gg: AfdE7cnQho3e3UDqvHzwkMw+MiatdKSDEq1/NWv5pwdhy9Ak8/N2XORjZP/jy4Dshpf GjW0FgO84kWUxVZvpPQ1KMt20ZzQACkluutVm9UqAVKikkh3YEpfWhY/+B5gfvcv5a+Y/FikxMY RmIbaxyjhMJEYlgcewZxGzgt62akbevWJT+GkXVa+QrO9V2UFIHRfNN0ZXwpLBPc0VJp+sakizH 78arh9Rhay/T/eU905IIWMTyqYbY4pM7bTgKXEpxuni1tN1axbDN7UJds8z2xdu0VGtLIiZ9Kw/ vhKwdptA/BBVNKEFzmx056C4xUsA4quid2vH0kl3Z1zZeonOjyTg4nrypw==
X-Received: by 2002:a05:6a00:451c:b0:848:812b:848a with SMTP id d2e1a72fcca58-84889629ac6mr14977117b3a.33.1784089050034; Tue, 14 Jul 2026 21:17:30 -0700 (PDT)
MIME-Version: 1.0
From: Eli Mallon <eli@stream.place>
Date: Tue, 14 Jul 2026 21:17:17 -0700
X-Gm-Features: AUfX_mzEiwFnVMVU4XjxF8rJl8sGdte0c27R6I1U8XMdkBvvXtSM4S5GrTSvPd8
Message-ID: <CAJ_8DJ4nxZTQQ-gcM8doFMQjVA_AtsvfL1aiBUk=+NxMqK7kOA@mail.gmail.com>
To: atp@ietf.org
Content-Type: multipart/alternative; boundary="0000000000001344f606569e9adc"
Message-ID-Hash: 46Q3ELZH3ZGYNW6DFPXNHWFMKKFY7IXD
X-Message-ID-Hash: 46Q3ELZH3ZGYNW6DFPXNHWFMKKFY7IXD
X-MailFrom: eli@stream.place
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
X-Mailman-Version: 3.3.9rc6
Precedence: list
Subject: [Atp] atmoq: ATProto over Media over QUIC Transport
List-Id: Authenticated Transfer <atp.ietf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/atp/byiE6I59R66dfxO74chBp54ctfo>
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>

Hi all,

My name is Eli Mallon, I'm the creator of Streamplace
<https://stream.place/>; livestreaming and VOD on the AT Protocol. (If
Bluesky is working on Twitter on atproto, we're working on Twitch and
YouTube.) Very excited for our first WG meeting next week!

In March, Suhas Nandakumar and Cullen Fluffy Jennings submitted
draft-nandakumar-atproto-atom-00
<https://datatracker.ietf.org/doc/draft-nandakumar-atproto-atom/>: a spec
to relay atproto data over Media over QUIC Transport (and thus
WebTransport) instead of the current implementations that use WebSockets.
Streamplace's work sits right at the intersection of media and atproto, so
this felt perfectly targeted at us!

The idea is exciting for a few reasons. On a basic level, MOQT is a
lower-latency and higher-throughput protocol than WebSocket, providing us a
solid protocol-level option when we get to the point where sending the
entire global atproto firehose over a single WebSocket becomes unrealistic.

But to me the headline is this: atproto relaying over MOQT means atproto
firehose data could be broadcast over generic MoQ relays, piggybacking on
the substantial effort that is going into the next generation of
low-latency global media distribution. Currently, fan-out for atproto
relays is handled with services like Bluesky's rainbow
<https://github.com/bluesky-social/indigo/tree/main/cmd/rainbow>; custom
atproto-aware software purpose-built for fanout. A MOQT implementation
would instead allow us to instead use off-the-shelf MoQ relays like the big
public one that Cloudflare operates <https://developers.cloudflare.com/moq/> or
the global networks being built out by Cisco and Akamai.

We've recently completed an initial implementation of the spec called atmoq
<https://github.com/streamplace/atmoq>, which includes a Rust server (that
sits in front of an upstream WebSocket relay) and Rust, Go, and TypeScript
client implementations. The implementation diverges from the spec in some
ways — not everything in the atproto universe *quite* cleanly mapped onto
MOQT primitives — but overall the system works quite well. My presentation
next week will go into detail, but some brief highlights:

* Tested and working with the public atproto relays at Cloudflare and
moq.dev.
* In addition to the "everything" track that provides all the data, each
separate user is made available as a their own track, facilitating use
cases where you only care about syncing a small number of users.
* Tested and working in-browser.

We're operating a public atmoq relay at streamplace.network, please feel
free to try it out. Happy to answer any questions; otherwise looking
forward to presenting next week.

Thank you!
Eli