---
title: "ADR-015: HTTP/3 feature flag"
manual: "nr-vault"
version: "1.0"
permalink: "https://docs.typo3.org/permalink/netresearch/nr-vault:adr-015-http3-feature-flag@1.0"
source: "Developer/Adr/ADR-015-Http3FeatureFlag.rst"
rendered: "2026-09-18T07:37:50+00:00"
---

# ADR-015: HTTP/3 feature flag {#adr-015-http-3-feature-flag}

**Table of contents**

-   [Status](https://docs.typo3.org/permalink/netresearch/nr-vault:status@1.0)
-   [Date](https://docs.typo3.org/permalink/netresearch/nr-vault:date@1.0)
-   [Context](https://docs.typo3.org/permalink/netresearch/nr-vault:context@1.0)
-   [Decision](https://docs.typo3.org/permalink/netresearch/nr-vault:decision@1.0)
-   [Consequences](https://docs.typo3.org/permalink/netresearch/nr-vault:consequences@1.0)
-   [Alternatives considered](https://docs.typo3.org/permalink/netresearch/nr-vault:alternatives-considered@1.0)
-   [Related decisions](https://docs.typo3.org/permalink/netresearch/nr-vault:related-decisions@1.0)

## Status {#status}

Accepted

## Date {#date}

2026-01-12

## Context {#context}

HTTP/3 support is uneven across ecosystems and can be experimental in client
libraries. For our target installations, correctness and operability matter
more than "having HTTP/3".

We want to benefit from HTTP/3 where it works, without destabilizing the
platform.

## Decision {#decision}

-   MVP requires stable HTTP/1.1 and HTTP/2 support
-   HTTP/3 is optional and controlled by:

    -   feature flag per service or global
    -   runtime capability detection
    -   mandatory fallback to HTTP/2/1.1
-   No business-critical functionality depends on HTTP/3 availability

## Consequences {#consequences}

### Positive {#positive}

-   Avoids shipping unstable transport as a dependency
-   Keeps rollout safe; reduces support burden

### Negative {#negative}

-   Some expected performance gains will not be guaranteed everywhere

## Alternatives considered {#alternatives-considered}

### Make HTTP/3 the default transport {#make-http-3-the-default-transport}

Use HTTP/3 as the default transport mode.

**Rejected**: too risky, too unstable, too environment-dependent.

## Related decisions {#related-decisions}

-   [ADR-012: SecureHttpClient API and transports](https://docs.typo3.org/permalink/netresearch/nr-vault:adr-012-secure-http-transports@1.0) \- Transport abstraction
-   [ADR-013: Rust FFI preload-only mode](https://docs.typo3.org/permalink/netresearch/nr-vault:adr-013-rust-ffi-preload@1.0) \- Rust transport using reqwest with HTTP/3 support
