Skip to content

feat: block QUIC by default — faster initial page/video loads in full tunnel mode#805

Merged
therealaleph merged 1 commit intotherealaleph:mainfrom
yyoyoian-pixel:feat/block-quic-ui-default
May 6, 2026
Merged

feat: block QUIC by default — faster initial page/video loads in full tunnel mode#805
therealaleph merged 1 commit intotherealaleph:mainfrom
yyoyoian-pixel:feat/block-quic-ui-default

Conversation

@yyoyoian-pixel
Copy link
Copy Markdown
Contributor

@yyoyoian-pixel yyoyoian-pixel commented May 6, 2026

Summary

  • Default block_quic to true (was false). QUIC over the TCP-based tunnel causes TCP-over-TCP meltdown (<1 Mbps). Browsers detect the silent UDP/443 drop and fall back to TCP/HTTPS within seconds — significantly improving initial page and YouTube video load times in full tunnel mode.
  • Android UI: "Block QUIC" toggle in Advanced settings.
  • Desktop UI: "Block QUIC (UDP/443)" checkbox (was config-only since Feature Request: Option to Block QUIC (UDP Port 443) to Prevent UDP-over-TCP Degradation #213).
  • Android serialization: always emit block_quic to JSON so the Rust default can't silently override the user's choice.

Why this matters for full tunnel mode

Without block_quic, browsers attempt QUIC (HTTP/3) first on every new connection. In full tunnel mode, QUIC datagrams travel over the TCP-based tunnel — TCP-over-TCP meltdown caps throughput at <1 Mbps. The browser eventually falls back to TCP/HTTPS, but only after wasting 5-10s on failed QUIC attempts. This is most visible as:

  • YouTube: initial video delay while the player waits for QUIC to fail before switching to TCP
  • Heavy pages: extra seconds per domain as each QUIC attempt times out

With block_quic: true, the UDP/443 packets are silently dropped, the browser detects this in ~1-2s and goes straight to TCP/HTTPS — no meltdown, no wasted time.

Closes #793.

Test plan

  • cargo check clean
  • Block QUIC checkbox in desktop UI with hover tooltip
  • Block QUIC toggle in Android Advanced UI
  • Android emits block_quic in JSON config
  • Rust default true via default_block_quic()
  • Tested on Pixel 6 Pro — YouTube and page loads noticeably faster

🤖 Generated with Claude Code

QUIC over the TCP-based tunnel causes TCP-over-TCP meltdown — users
see <1 Mbps where HTTPS/TCP would do >50. The existing `block_quic`
config option was off by default and had no UI on either platform,
so most users suffered QUIC degradation without knowing why.

Changes:
- Default `block_quic` to `true` (was `false`). Browsers detect the
  silent UDP/443 drop and fall back to TCP/HTTPS within seconds.
- Add "Block QUIC" toggle in Android Advanced UI.
- Add "Block QUIC (UDP/443)" checkbox in desktop UI (was config-only,
  issue therealaleph#213).
- Android: always emit `block_quic` in JSON so the Rust default
  doesn't silently override the user's choice.

Closes therealaleph#793.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@github-actions github-actions Bot added the type: feature feat: PR — auto-applied by release-drafter label May 6, 2026
@yyoyoian-pixel yyoyoian-pixel changed the title feat: block QUIC by default + UI toggle (Android & desktop) feat: block QUIC by default — faster initial page/video loads in full tunnel mode May 6, 2026
@w0l4i
Copy link
Copy Markdown

w0l4i commented May 6, 2026

Great , tnx for adding this option i really appreciate it 🙏❤️

@therealaleph
Copy link
Copy Markdown
Owner

@yyoyoian-pixel — sound default flip. Block QUIC by default avoids the TCP-over-TCP meltdown that Full mode was inheriting from QUIC datagrams over the TCP-based tunnel, and Chrome / Firefox both fall back to TCP/HTTPS within seconds when UDP/443 is dropped, so the user-visible cost is the brief retry while the user-visible win is reliable Full mode page loads. Always-emit-block_quic on Android serialization is the right call given the lesson from #763 (silent default mismatches between Android and Rust).

Merging — will ship in v1.9.15.


[reply via Anthropic Claude | reviewed by @therealaleph]

@therealaleph therealaleph merged commit 5a07709 into therealaleph:main May 6, 2026
2 checks passed
therealaleph added a commit that referenced this pull request May 6, 2026
…Actions full tunnel docs

Wraps four already-merged PRs into a release:
- PR #799 (@dazzling-no-more): HTTP/2 multiplexing on the relay leg with idempotency-safe h1 fallback. ALPN-negotiates h2; one TCP/TLS connection multiplexes ~100 streams instead of the pool. Slow Apps Script calls no longer head-of-line-block the queue on the same socket. force_http1 kill switch in config. 180→197 tests (+17).
- PR #805 (@yyoyoian-pixel): block_quic default true. QUIC over the TCP-based tunnel was TCP-over-TCP meltdown; browsers fall back to TCP/HTTPS within seconds when UDP/443 is dropped. Adds Android + desktop UI toggles.
- PR #819 (@brightening-eyes): enabled accesskit on eframe so screen readers (NVDA/JAWS/VoiceOver/Orca) can navigate the desktop UI. Closes #750.
- PR #783 (@euvel): GitHub Actions Full tunnel docs + workflow YAML files for users who can't buy a VPS. cloudflared Quick / ngrok / cloudflared Named.

Strategically: h2 multiplexing is the architectural fix for #781 / #773 perceived-slowness regression — it makes the pool tuning machinery much less load-bearing. force_http1 kill switch is there if anything goes sideways in the wild.

Tests: 197 lib + 35 tunnel-node green. UI release-mode build green.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type: feature feat: PR — auto-applied by release-drafter

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Feat : Quic block in ui

3 participants