LGTM2
On Wed, Oct 21, 2026 at 8:19 AM Alex Russell
<[email protected]> wrote:
Thanks Omar,
LGTM1
On Tuesday, October 20, 2026 at 6:28:37 AM UTC-7
[email protected] wrote:
Hi Alex,
The benefit is that SSM makes the multicast API usable beyond
a single LAN. Multicast that crosses network boundaries is SSM
in practice:
- RFC 8815 deprecates inter-domain ASM.
- ISP and enterprise deployments carry channels in the SSM
ranges (232/8, FF3x::/32), where routers only forward
source-specific joins (RFC 4607).
- AMT relays (RFC 7450) serve (S,G) channels.
That is the TreeDN model (RFC 9706): native multicast where
the network supports it and AMT relays everywhere else. Lenny
Giuliano's introduction:
https://community.juniper.net/blogs/lenny/2025/08/21/introduction-to-TreeDN
An ASM-only IWA can't receive those channels off its LAN. Its
only workaround is an AMT gateway written in JS over unicast
UDP, which needs a relay and gives up native delivery on
networks that support it.
Who's asking:
1. My company, Blockcast. We built that workaround, and this
intent lets us drop it on native networks.
- Our Chrome extension, Multicast Gateway (BEACON), gives
pages a small window.multicast API:
https://chromewebstore.google.com/detail/multicast-gateway-beacon/djikmiecejmojgcglkfmihhkfgekjlaj
- The sockets live in our IWA, which uses Direct Sockets and
only serves sites the user has allowed (an exact-origin
allowlist). Pages get multicast only through components the
user installed:
const sub = await window.multicast.subscribe({
group: '232.1.1.50', port: 8000,
source: '192.0.2.10', // SSM; omit for ASM
consume: 'bytes',
});
sub.addEventListener('bytes', (e) => handle(e.detail));
// one ArrayBuffer per datagram
- Each subscription is delivered natively or through an AMT
relay. The native SSM case is a direct call to
MulticastController.joinGroup(group, { sourceAddress }), which
is what this intent ships. Outside the dev trial that option
is dropped and the join silently becomes any-source, so today
our users beyond the LAN need the AMT path.
- Public demo: https://blockcast.network/live compares a live
ISS camera feed in the browser over QUIC, ROUTE, AMT and
native multicast. The AMT and native multicast choices appear
once the extension and IWA are installed.
2. The IETF MBONED community. Browser multicast drew a lot of
interest at IETF 126 in July (minutes:
https://datatracker.ietf.org/doc/minutes-126-mboned-202607211430/):
- QUICast (https://quicast.de/) showed a modified Firefox
receiving multicast natively beneath WebTransport, without an IWA.
- Aircast reported live-event deployments over multicast and
AMT, including Wimbledon.
- Chris Needham of the BBC and W3C board of directors offered
to help coordinate a browser multicast API in W3C.
3. Other signals:
- On the proposal (#80), Harald Alvestrand recommended SSM as
the only safe model beyond the local network.
- Node.js dgram already exposes the same capability
(addSourceSpecificMembership).
- Jake Holland's Multicast Receiver API explainer is SSM-only
for the same reason:
https://github.com/GrumpyOldTroll/wicg-multicast-receiver-api/blob/master/explainer.md
Outside this community, the Ready for Trial thread got no replies.
A larger discussion with W3C about multicast on the web is
still needed, including how IWAs will roll out: today the
install UX isn't great and there's no mobile support. But this
is an exciting first step, and a small one: an optional
sourceAddress on joinGroup()/leaveGroup(), mapped to
MCAST_JOIN_SOURCE_GROUP, with no new permission or prompt.
Thanks,
Omar
On Tue, Oct 20, 2026 at 1:48 AM Alex Russell
<[email protected]> wrote:
What's the developer benefit for SSM? Is anyone asking for
this?
Best,
Alex
On Monday, October 19, 2026 at 1:57:36 PM UTC-7 Reilly
Grant wrote:
IWA OWNER LGTM
This is an extension to an extension of an existing
IWA-only API. The previous justification for why
multicast would create a privacy issues for the web
platform (see also threads on net-dev@) still applies.
Reilly Grant | Software Engineer
|[email protected] |Google Chrome
<https://www.google.com/chrome>
On Wed, Oct 14, 2026 at 7:43 PM Chromestatus
<[email protected]> wrote:
*Contact emails*
[email protected]
*Explainer*
https://github.com/WICG/direct-sockets/blob/main/docs/multicast-explainer.md
*Specification*
https://wicg.github.io/direct-sockets/#dom-multicastgroupoptions-sourceaddress
*Summary*
Adds Source-Specific Multicast (SSM) support to
the Direct Sockets API, allowing Isolated Web Apps
to optionally specify a source address when
joining multicast groups to receive UDP packets
only from that source. Without a source address,
joinGroup() uses Any-Source Multicast (ASM), which
receives packets from any source sending to the
group. SSM is essential to using multicast outside
of private networks, simplifying packet routing,
and filtering traffic at the network level by
source address, which mitigates spoofing and
denial-of-service attacks.
*Blink component*
Blink>Network->Direct Sockets
<https://issues.chromium.org/issues?q=customfield1222907:%22Blink%3ENetwork-%3EDirect%20Sockets%22>
*Web Feature ID*
Missing feature
*Motivation*
RFC 8815 deprecates ASM for inter-domain use due
to security vulnerabilities and operational
complexity. Without SSM support, developers
building multicast applications in Isolated Web
Apps face several problems: Limited deployment
scenarios: Applications are restricted to
controlled private networks where all sources are
trusted, preventing use cases like internet-wide
content distribution or cross-organization IoT
systems. Application-layer filtering overhead:
Applications must receive and process all packets
sent to a multicast group before validating the
source, wasting CPU cycles and bandwidth on
potentially malicious traffic. SSM is the
IETF-recommended model for multicast across
domains (RFC 4607, RFC 8815) and is supported by
many enterprise and ISP networks. Adding SSM
support enables more secure multicast
communication beyond private network boundaries.
*Initial public proposal*
https://github.com/WICG/direct-sockets/issues/80
*TAG review*
TAG does not review Isolated Web Apps:
https://github.com/w3ctag/design-reviews/issues/842#issuecomment-2917031448
API design was reviewed on WICG/direct-sockets#80
and #81 (approved by reillyeon and GrapeGreen).
Alternatives considered there: a positional source
argument (replaced by an options dictionary) and a
source-filter-list API like IP_MSFILTER (rejected
because each call replaces the whole list).
*TAG review status*
Not applicable
*Goals for experimentation*
None
*Risks*
*Interoperability and Compatibility*
Low. sourceAddress is an optional dictionary
member: code that doesn't pass it behaves exactly
as before, and joinedGroups still returns strings
for ASM memberships. Where SSM is unavailable
(older Chrome, or the feature turned off),
sourceAddress is ignored and joinGroup() makes an
ASM join; apps can detect this because
joinedGroups then lists a string, not a
MulticastMembership. Other browsers may choose to
implement this API.
/Gecko/: No signal Mozilla's position on the
parent Direct Sockets API is negative:
https://github.com/mozilla/standards-positions/issues/431
/WebKit/: No signal The WebKit position request
for Isolated Web Apps is open without a position:
https://github.com/WebKit/standards-positions/issues/184
/Web developers/: No signals The Ready for Trial
thread got no replies.
/Other signals/: Harald Alvestrand recommended SSM
in
https://github.com/WICG/direct-sockets/issues/80:
"Basically Any-Source Multicast with a scope
larger than your local network is a high-powered
DDOS vector, not something that it's safe to build
services on, so I heartily recommend adding
support for Single-Source Multicast." Node.js
dgram has the same capability
(addSourceSpecificMembership /
dropSourceSpecificMembership).
*Ergonomics*
The API follows the OS socket API
(MCAST_JOIN_SOURCE_GROUP) and Node.js dgram. Each
(group, source) pair is its own membership,
several sources for one group are additive (RFC
4604), and a socket cannot mix ASM and SSM
memberships for the same group.
*Activation*
Receiving SSM traffic needs a network that
supports IGMPv3/MLDv2 and routes SSM, or an AMT
(RFC 7450) gateway on the host or local router
that tunnels it from a relay. Apps can't polyfill
native SSM reception; the closest substitute is
running their own AMT gateway over unicast UDP.
*Security*
SSM is part of the Direct Sockets API, and its
security and privacy self-review applies:
https://github.com/WICG/direct-sockets/blob/main/docs/security-privacy-self-review.md
SSM-specific points: - Exposure is the same as ASM
multicast: Isolated Web Apps with the
"direct-sockets-multicast" permissions policy, on
bound UDP sockets that passed the local-network
and loopback-network permission checks. Since
M150, ChromeOS users can also install IWAs that
are on Chrome's IWA allowlist; a user-installed
IWA gets that policy only if the allowlist grants
it the DIRECT_SOCKETS_MULTICAST entitlement. There
is no new permission, prompt or content setting. -
It reduces injection risk compared with ASM: the
OS and SSM routers drop datagrams from other
source addresses, so off-path hosts cannot inject
traffic (RFC 8815 §3.2.3). It is not
authentication: a host that forges the source
address can potentially still inject (RFC 4607
§7.4), so apps that need authenticity must
authenticate content, as with ASM. That also
covers the fallback to an ASM join when SSM is
unavailable (see Interoperability). - The Linux
network-service sandbox allows setsockopt
MCAST_JOIN_SOURCE_GROUP / MCAST_LEAVE_SOURCE_GROUP
(crrev.com/c/7641869
<https://crrev.com/c/7641869>). No other sandbox
change. - The network service re-checks the
renderer's arguments but missed one case, which
predates SSM: a compromised renderer of an IWA
allowed to use multicast could crash the network
service (a NOTREACHED or CHECK, i.e. denial of
service) with an empty group address.
crrev.com/c/8583003 <https://crrev.com/c/8583003>
(RestrictedUDPSocket rejects non-multicast groups
with a bad message) and crrev.com/c/8583123
<https://crrev.com/c/8583123> (network::UDPSocket
rejects invalid group addresses for all clients)
fix it and land before the flag flips. - An SSM
join sends an IGMPv3/MLDv2 report that names the
(source, group) pair on the local link, as any
native SSM receiver does.
*WebView application risks*
Does this intent deprecate or change behavior of
existing APIs, such that it has potentially high
risk for Android WebView-based applications?
No. Direct Sockets is not available in WebView.
*Debuggability*
DevTools' Network panel lists Direct Sockets UDP
sockets, and the experimental CDP events
Network.directUDPSocketJoinedMulticastGroup /
directUDPSocketLeftMulticastGroup report the
groups a socket joins and leaves. For SSM, their
IPAddress field currently carries "group@source"
(e.g. [email protected]); a follow-up will add
a separate sourceAddress parameter
(crbug.com/461262401
<https://crbug.com/461262401>).
MulticastController.joinedGroups returns
{groupAddress, sourceAddress} for SSM memberships,
and invalid input throws specific TypeError or
InvalidStateError messages.
*Will this feature be supported on all six Blink
platforms (Windows, Mac, Linux, ChromeOS, Android,
and Android WebView)?*
No
It is implemented on desktop platforms but only
available to end users where Isolated Web Apps are
supported, which is currently ChromeOS. Android
and WebView do not support Direct Sockets. Known
macOS issue: on the macOS 15 test bots, joining a
group with a second source fails with NetworkError
for a reason not yet understood
(crbug.com/443716695
<https://crbug.com/443716695>). It succeeds on
macOS 26, and single-source joins succeed on both.
*Is this feature fully tested by
web-platform-tests
<https://chromium.googlesource.com/chromium/src/+/main/docs/testing/web_platform_tests.md>?*
No
There is no SSM WPT yet (follow-up tracked in
crbug.com/461262401):
<https://crbug.com/461262401):> the spec rejects
loopback sources, so the test has to send from a
non-loopback address of the test host, which I
haven't validated on the WPT bots yet. The ASM
multicast WPT
(direct-sockets/udp_socket_multicast.https.html)
runs in Chromium's virtual/direct-sockets suite
(Timeout on Mac, crbug.com/443716695;
<https://crbug.com/443716695;> flaky on Linux,
crbug.com/570251397
<https://crbug.com/570251397>). No Chromium test
sends SSM datagrams yet either; adding one is
tracked in crbug.com/461262401
<https://crbug.com/461262401>. SSM is covered by:
- blink_unittests: MulticastControllerSsmTest.*
(validation, membership rules, IP-version
mismatch, ASM/SSM mixing) and the IDL feature-flag
tests - content_browsertests:
DirectSocketsBoundUdpBrowserTest.*SSM* -
browser_tests (installed IWA):
ChromeDirectSocketsUdpIsolatedWebAppMulticastTest.*SSM*
- net_unittests: UDPSocketTest.JoinSourceGroup*,
LeaveSourceGroup*, SSMSourceFilteringMultiNIC*
(join and leave with two sources) -
services_unittests: the bad-message and
invalid-address tests in crrev.com/c/8583003
<https://crrev.com/c/8583003> and
crrev.com/c/8583123 <https://crrev.com/c/8583123>
*DevTrial instructions*
https://github.com/WICG/direct-sockets/blob/main/docs/multicast-explainer.md#receiving-datagrams-example-source-specific-multicast
*Flag name on about://flags*
source-specific-multicast-in-direct-sockets
*Finch feature name*
SourceSpecificMulticastInDirectSockets
*Rollout plan*
Will ship enabled for all users
*Requires code in //chrome?*
False
*Tracking bug*
https://issues.chromium.org/issues/461262401
*Measurement*
The existing MulticastController use counters
(MulticastControllerJoinGroupFunction,
MulticastControllerLeaveGroupFunction,
MulticastControllerJoinedGroupsAttribute) count
ASM and SSM calls together. A new use counter,
MulticastControllerJoinGroupWithSourceAddress,
counts SSM joins and lands before the flip
(crrev.com/c/8574609 <https://crrev.com/c/8574609>).
*Availability expectation*
Available only to Isolated Web Apps, on platforms
where IWAs are supported (currently ChromeOS):
IWAs installed by an admin or in developer mode,
and user-installed IWAs that Chrome's IWA
allowlist grants the DIRECT_SOCKETS_MULTICAST
entitlement. Not available on Android or WebView.
*Adoption expectation*
Initially a small number of IWA developers
receiving multicast from known sources, for
example live streaming over SSM-enabled networks
or AMT relays.
*Estimated milestones*
Shipping on desktop 160
DevTrial on desktop 152
*Anticipated spec changes*
Open questions about a feature may be a source of
future web compat or interop issues. Please list
open issues (e.g. links to known github issues in
the project for the feature specification) whose
resolution may introduce web compat/interop risk
(e.g., changing to naming or structure of the API
in a non-backward-compatible way).
None expected. crrev.com/c/8582708
<https://crrev.com/c/8582708> (lands before the
flip) makes Chromium reject loopback sourceAddress
values, as the spec already requires. Two Chromium
behaviors are not in the spec text yet: a socket
cannot mix ASM and SSM memberships for one group,
and leaveGroup() validates its arguments like
joinGroup().
https://github.com/WICG/direct-sockets/pull/86
adds both.
*Link to entry on the Chrome Platform Status*
https://chromestatus.com/feature/6208452397498368?gate=6516721057923072
*Links to previous Intent discussions*
Intent to Prototype:
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/692dffe2.050a0220.17ec37.0673.GAE%40google.com
Ready for Trial:
https://groups.google.com/a/chromium.org/g/blink-dev/c/vMmLZVd7rQI
This intent message was generated by Chrome
Platform Status <https://chromestatus.com>.
--
You received this message because you are
subscribed to the Google Groups "blink-dev" group.
To unsubscribe from this group and stop receiving
emails from it, send an email to
[email protected].
To view this discussion visit
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/6ad03dc5.32cf16a2.aa5e8.002a.GAE%40google.com
<https://groups.google.com/a/chromium.org/d/msgid/blink-dev/6ad03dc5.32cf16a2.aa5e8.002a.GAE%40google.com?utm_medium=email&utm_source=footer>.
--
You received this message because you are subscribed to the Google
Groups "blink-dev" group.
To unsubscribe from this group and stop receiving emails from it,
send an email to [email protected].
To view this discussion visit
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/77558f26-eaab-4a14-b5f4-ad75f948f1f6n%40chromium.org
<https://groups.google.com/a/chromium.org/d/msgid/blink-dev/77558f26-eaab-4a14-b5f4-ad75f948f1f6n%40chromium.org?utm_medium=email&utm_source=footer>.
--
You received this message because you are subscribed to the Google
Groups "blink-dev" group.
To unsubscribe from this group and stop receiving emails from it, send
an email to [email protected].
To view this discussion visit
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAOMQ%2Bw_F4V%3DQmMytduzNor5TgytJS3i8P%3D_sqPHSx8HskndFqA%40mail.gmail.com
<https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAOMQ%2Bw_F4V%3DQmMytduzNor5TgytJS3i8P%3D_sqPHSx8HskndFqA%40mail.gmail.com?utm_medium=email&utm_source=footer>.