<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>319818</bug_id>
          
          <creation_ts>2026-07-20 09:41:55 -0700</creation_ts>
          <short_desc>[WebTransport] Flow control never refills</short_desc>
          <delta_ts>2026-10-18 20:46:32 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Page Loading</component>
          <version>Safari 26</version>
          <rep_platform>Mac (Apple Silicon)</rep_platform>
          <op_sys>macOS 26</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>kixelated</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>achristensen</cc>
    
    <cc>ankshit_jain</cc>
    
    <cc>beidson</cc>
    
    <cc>elijahdisch</cc>
    
    <cc>floatdrop</cc>
    
    <cc>rgovostes+wk</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>2232001</commentid>
    <comment_count>0</comment_count>
    <who name="">kixelated</who>
    <bug_when>2026-07-20 09:41:55 -0700</bug_when>
    <thetext>I&apos;m using WebTransport for MoQ: https://moq.dev/watch/

After a short period of time, the WebTransport connection on Safari will deadlock because it hits flow control limits. I&apos;ve reproduced the issue, it happens when Safari receives 16MB (MAX_DATA) or 7600 streams (MAX_STREAMS), whichever happens first. It seems like Safari never frees up flow control even when streams are FIN or RESET.

This is not using WebTransport flow control; just QUIC flow control.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2232234</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2026-07-20 18:52:46 -0700</bug_when>
    <thetext>&lt;rdar://problem/182764239&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2241856</commentid>
    <comment_count>2</comment_count>
      <attachid>481114</attachid>
    <who name="Ryan Govostes">rgovostes+wk</who>
    <bug_when>2026-08-19 11:24:35 -0700</bug_when>
    <thetext>Created attachment 481114
repro example

I hit the same issue, also while trying to render a MoQ video stream. I&apos;m attaching a minimal repro case (~150 lines backend, ~100 lines frontend), generated by Claude Fable 5.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2243832</commentid>
    <comment_count>3</comment_count>
    <who name="">elijahdisch</who>
    <bug_when>2026-08-26 04:32:35 -0700</bug_when>
    <thetext>Reproducible on Firefox 154 on iOS 26.6.1, presumably due to embedded WKWebView.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2265902</commentid>
    <comment_count>4</comment_count>
    <who name="">floatdrop</who>
    <bug_when>2026-10-18 20:46:32 -0700</bug_when>
    <thetext>We reproduce this with a different MoQ server, so it doesn&apos;t look specific to moq.dev&apos;s relay: ours is moq-go (Go, on quic-go with webtransport-go, MoQT
draft-22), and the page uses WebTransport directly.

Setup: the relay opens one unidirectional stream per MoQ group towards the browser (at the time, one per 20 ms audio frame, about 50 streams/s). The page
reads every stream to its FIN.

Safari 27 on macOS 26.7.1 (25G241):

- A session stops receiving after 98 server-initiated unidirectional streams. Safari never sends further MAX_STREAMS (uni) for that session, although the
page has read every one of those streams to its FIN. From then on the relay&apos;s qlog shows it blocked on stream credit (STREAMS_BLOCKED).
- In a qlog of an earlier call, Safari did send some MAX_STREAMS updates, but they covered only about half of the streams the page had finished. It never
sent MAX_DATA beyond the initial 16 MiB, so the connection also runs out of data credit after 16 MiB.
- QUIC DATAGRAMs keep arriving after the stall (24,970 of 24,970, 23.8 MiB), as expected since they aren&apos;t flow-controlled.
- A new WebTransport session opened after the stall receives normally. Each session got a QUIC connection (and client port) of its own, starting with fresh
credit.

Chrome and Yandex Browser against the same relay return stream and data credit as streams finish, and never stall.

Our workaround for WebKit: audio is sent as datagrams, and video is received on dedicated WebTransport sessions that are replaced every 60 s, or after 80
streams or 12 MiB, before they run out of credit.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>481114</attachid>
            <date>2026-08-19 11:24:35 -0700</date>
            <delta_ts>2026-08-19 11:24:35 -0700</delta_ts>
            <desc>repro example</desc>
            <filename>repro-webkit-319818.tar.gz</filename>
            <type>application/octet-stream</type>
            <size>5157</size>
            <attacher name="Ryan Govostes">rgovostes+wk</attacher>
            
              <data encoding="base64">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
BZz7GJX7uRf3x/JYHstjuaP8H77GLpsAWgAA
</data>

          </attachment>
      

    </bug>

</bugzilla>