Skip to content

PQC support

The sections below summarize third-party software support for the post-quantum algorithms Cloudflare has deployed, organized by software category. Contributions to keep the listing up-to-date are welcome.

Two classes of algorithm are tracked:

Browsers

Browsers are grouped by the underlying rendering engine and TLS stack. Browsers sharing an engine generally share the same post-quantum support, but derivative browsers can lag the upstream engine or disable post-quantum features by policy. Verify behavior in the specific browser version you care about before assuming derivative support. Cloudflare Radar's browser support check is a quick way to confirm whether a given browser negotiates post-quantum key agreement with Cloudflare.

Chromium-based (BoringSSL)

Brave

  • Key agreement: ✅ Default in Brave 1.73.86+ (Chromium 131)
  • Signatures: Not yet
  • Reference: Brave

Chrome

Chrome is not planning to add traditional X.509 post-quantum certificates to the public Chrome Root Store. Instead, Chrome is developing MTCs in the IETF PLANTS working group, currently in a feasibility study phase with Cloudflare.

Edge

  • Key agreement: ✅ Default in Edge 131+
  • Signatures: Not yet
  • Reference: Edge

Opera

  • Key agreement: ✅ Default in Opera 116+ (Chromium 131)
  • Signatures: Not yet
  • Reference: Opera

Gecko-based (Firefox / NSS)

Firefox

  • Key agreement: ✅ Default in Firefox 132+ (Desktop), 145+ (Android)
  • Signatures: Not yet
  • Reference: Firefox

For QUIC/HTTP3, Firefox 135+ (Desktop).

Tor Browser

  • Key agreement: ✅ Default in Tor Browser 15.0+
  • Signatures: Not yet
  • Reference: Tor Browser

Based on Firefox ESR with additional hardening.

WebKit-based (Safari)

Safari

  • Key agreement: ✅ Default in Safari 26+
  • Signatures: Not yet
  • Reference: Safari

System-wide in iOS 26, macOS Tahoe 26, and other Apple operating systems.

Libraries

This section splits into the foundational native libraries (written in C/C++) and the language bindings and higher-level libraries that build on top of them.

Native libraries

AWS-LC

ML-KEM-512/768/1024 and hybrids X25519MLKEM768, SecP256r1MLKEM768, SecP384r1MLKEM1024; ML-DSA-44/65/87.

BoringSSL

ML-DSA-44/65/87.

Botan C++

  • Key agreement: ✅ Default in TLS since 3.7.0
  • Signatures: ✅ 3.6.0+
  • Reference: Botan

ML-DSA-44/65/87.

GnuTLS

  • Key agreement: ✅ 3.8.9+ compiled with leancrypto 1.2.0+ (or 3.8.8–3.8.9 with liboqs 0.11.0+)
  • Signatures: ✅ 3.8.10+ — usable in TLS handshakes
  • Reference: GnuTLS

Hybrids X25519MLKEM768 and SecP256r1MLKEM768 from 3.8.8+; SecP384r1MLKEM1024 added in 3.8.9+. ML-DSA-44/65/87.

OpenSSL

  • Key agreement: ✅ Default in 3.5.0+
  • Signatures: ✅ 3.5.0+
  • Reference: OpenSSL

Hybrid X25519MLKEM768 in 3.5.0+; SecP256r1MLKEM768 and curveSM2MLKEM768 added in 3.6.0+. ML-DSA-44/65/87.

Open Quantum Safe

  • Key agreement: ✅ liboqs 0.10.0+, oqs-provider 0.7.0+
  • Signatures: ✅ liboqs 0.14.0+, oqs-provider 0.9.0+
  • Reference: Open Quantum Safe

Reference implementations, not recommended for production.

s2n-tls

  • Key agreement:
  • Signatures: Not yet
  • Reference: s2n-tls

AWS's open-source TLS implementation built on AWS-LC.

Language bindings and higher-level libraries

aws-lc-rs (Rust)

  • Key agreement:
  • Signatures: 🚧 Behind unstable feature
  • Reference: aws-lc-rs

Rust bindings around AWS-LC; underlies rustls-post-quantum's ML-DSA support. ML-KEM via aws-lc-rs::kem; ML-DSA-44/65/87 via unstable::signature.

CIRCL (Cloudflare)

Pure-Go cryptographic primitives library. ML-KEM-512/768/1024 and ML-DSA-44/65/87.

Go

  • Key agreement: ✅ Default in Go 1.24+
  • Signatures: 🚧 Internal implementation in Go 1.26; public crypto/mldsa proposed for Go 1.27
  • Reference: Go

Cloudflare's fork of Go also supports key agreement via CIRCL.

Java (OpenJDK)

  • Key agreement: ✅ Default in Java 27+ (JEP 527)
  • Signatures: 🚧 Java 24+ provides ML-DSA APIs (JEP 497) but they are not yet integrated into javax.net.ssl TLS
  • Reference: OpenJDK

Node.js

Uses bundled OpenSSL 3.5. ML-DSA-44/65/87.

RustCrypto (Rust)

Pure-Rust crates, independent of AWS-LC. ML-DSA-44/65/87.

rustls (Rust)

  • Key agreement: ✅ Enabled by default since rustls 0.23.27
  • Signatures: 🚧 Unstable
  • Reference: rustls

TLS library built on top of rustls-post-quantum.

rustls-post-quantum (Rust)

  • Key agreement:X25519MLKEM768
  • Signatures: 🚧 Unstable ML-DSA support (behind aws-lc-rs-unstable feature)
  • Reference: rustls-post-quantum

Extension crate for rustls that provides post-quantum algorithms using aws-lc-rs under the hood.

Zig

  • Key agreement: ✅ Zig 0.14.0+ (client)
  • Signatures: Not yet
  • Reference: Zig

Servers

Caddy

  • Key agreement: ✅ Default in Caddy 2.10.0+
  • Signatures: Blocked on Go crypto/mldsa
  • Reference: Caddy

NGINX

  • Key agreement: ✅ Default when compiled with OpenSSL 3.5+ (instructions)
  • Signatures: ✅ When compiled with OpenSSL 3.5+
  • Reference: NGINX

rpxy

  • Key agreement: ✅ Default in 0.9.4+
  • Signatures: Blocked on Rust PQ signature support
  • Reference: rpxy

Traefik

  • Key agreement: ✅ Default in 3.4.2+, 2.11.26+ (commit); configurable via curvePreferences in 3.5.0-rc.1+
  • Signatures: Blocked on Go crypto/mldsa
  • Reference: Traefik