Skip to content

Latest commit

 

History

19 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 

Repository files navigation

HTTP QUERY (RFC 10008) — ecosystem adoption

Day 0 = RFC publication 2026-06-16. Last refreshed 2026-08-21 (day +66). ★ Stars are approximate (fetched ~2026-08-21).

Tracking is split by role: servers (inbound), clients (outbound), edge (proxies/caches), and specs/docs/tooling. The same monorepo can appear in more than one table when server and client surfaces differ (e.g. Spring Framework). Stack names link to the project home when available.


Servers & frameworks (inbound)

Stacks that accept or route QUERY.

Stack Lang Status ★ Stars PR / issue Days after RFC Notes
Go (net/http) Go ⚠️ Likely accept 136,042 Issue #80058 — open · PR #80134 — open +2 issue · PR +8 · likely accept +65 Raw method strings work; MethodQuery proposal formally moved to likely accept (+65); side question open on auto-accepting future RFC methods
Node.js (core) JS / C++ ✅ Shipped 119,149 v21.7.2 release (llhttp 9.2.0) −804 Earliest shipper (parse/route QUERY)
Deno Rust / TS ⚠️ Open 108,273 Issue #36186 — open +34 Feature request; Deno.serve may accept method string; idle since +36
FastAPI Python ❓ Nothing 101,741 none found n/a No dedicated RFC 10008 tracking found
Bun Zig / TS ✅ Works (generic) 95,555 Issue #34839 — closed +34 Bun.serve + body verified; not full RFC semantics
Gin Go ⚠️ PR open 89,094 PR #4806 — open +59 First-class router.QUERY support; community PR, active review (+65)
Django Python ❓ Nothing 88,619 none found n/a No dedicated RFC 10008 tracking found
NestJS TypeScript ✅ Released 76,417 PR #17162 — merged · v11.2.0 +3 · merged & released +59 QUERY routing in core + Express/Fastify platforms; e2e tests #17310 merged; OpenAPI module PR separate (see Specs)
CPython (http.server) Python / C ⚠️ Open 74,546 Issue #153309 — open · PR #155786 — open +22 · new PR +59 Stdlib HTTP support / method constant; original PR #153310 closed unmerged, picked up fresh by a new contributor (+59)
Flask Python ✅ Merged 72,136 Issue #6065 — closed completed · PR #6133 — merged +7 · merged +56 app.query() route decorator merged after two earlier attempts closed; Werkzeug test-client Client.query() merged too (#3219, +44); flask-cors QUERY-by-default PR open (#413, +62); unreleased (latest Flask 3.1.3)
Express JavaScript ✅ Works 69,385 Issue #5615 — closed completed −787 Works on QUERY-capable Node
Spring MVC / WebFlux Java ✅ Merged 60,205 PR #34993 — closed, applied by maintainer −378 · revived +15–17 · merged +65 RequestMethod.QUERY / @RequestMapping support merged and "scheduled for the next milestone" (snapshots available) — ends a 14-month saga; convenience @QueryMapping / @QueryExchange / DSL follow-up #37185 closed (+66): enhancements considered "one by one" as adoption shows
Rails Ruby ✅ Merged (8.2) 58,703 PR #57973merged (forum) ~+6 → PR +17 · merged +59 Merged to main by rails core, milestone 8.2.0
PHP (CLI server) PHP / C ✅ Merged 40,304 PR #22615 — merged +20 · merged +22 Built-in dev server accepts QUERY (was 501)
Fiber Go ✅ Released (v3) 40,070 PR #4436 — merged · #4456 completion · #4459 cache body keys +2 · merged +9 Early full adopter: routing, completion follow-up and QUERY cache body-key hashing all merged to main (v3); v3.4.0 tagged +16
ASP.NET Core C# ⚠️ Preview 38,390 PR #65714 — shipped in 11 Preview 4 · Issue #68331 — open −35 Server + OpenAPI operation type; original issue #61089 closed completed (+49); Map/attribute-routing follow-up filed +55
Fastify JavaScript ✅ Released 37,025 PR #6832 — merged · closes #6807 +5 · merged +30 · release +44 First-class QUERY routing; shipped in v5.11.0; empty-body fix #6929 open (+54)
Laravel (routing) PHP ⚠️ Merged for L14 34,876 PR #60655 — merged to master; #60810 closed +20 Route::query() on master → ships with Laravel 14; client helper separate (13.x)
Hono TypeScript ✅ Released 31,753 PR #5070 — merged · v4.13.0 +16 · release +48 First-class app.query() routing; QUERY-aware ETag (#5111), CORS (#5115) and cache (#5119) all in v4.13.0; zod-openapi middleware QUERY support merged (middleware#2086, +58)
Axum Rust ✅ Merged (main) 26,919 Issue #3799 — closed completed · PR #3801merged 0 / +1 · merged +48 QUERY routing merged to main (+48); still not in a release (latest 0.8.9); ecosystem: axum-test QUERY support merged (#211, +65)
Vapor Swift ⚠️ Approved, held 26,191 PR #3489 — open, approved +42 · approved +43 Router QUERY methods; merge held until swift-http-types 1.7.0 ships (latest is still 1.6.0 at +66)
fasthttp Go ⚠️ PR open 23,439 PR #2358 — open +60 High-performance server + client lib; QUERY method support
Phoenix Elixir ⚠️ PR open 23,130 PR #6737 — open +9 · active +60 Router QUERY support; the Plug layer underneath already merged it (see Plug row)
Tornado Python ❌ Closed unmerged 22,180 PR #3697 — closed +42 Opened and closed the same day without merge
GoFr Go ⚠️ Approved 20,982 PR #3760 — open · Issue #3756 — open +38 App.QUERY routes + client Query; approved pending a docs update; last touched +56
SvelteKit TypeScript ✅ Merged (v3) 20,751 PR #16782 — merged (version-3) +58 QUERY handlers in +server.js; ships with SvelteKit 3
aiohttp (server) Python ✅ Released 16,527 Issue #13160 — closed · PR #13174 — merged +30 · merged +34 C parser recognizes QUERY; shipped in 3.14.2 (+34); METH_QUERY + idempotent classification merged for 3.15 (#13301, +48; backport +56; 3.15 not yet out)
Yii2 PHP ⚠️ PR open 14,299 Issue #21062 — open · PR #21063 — open +59 · PR +61 Framework QUERY support; QUERY method constant PR in yiisoft/http too (#71, +59)
Slim PHP ⚠️ PR open 12,280 PR #3461 — open (4.x) +43 · maintainer review +54 query() route method; maintainers agreed to adopt (+54), targeting a 4.16.0 minor; interface-vs-docblock API question open
gqlgen Go ⚠️ Open 10,750 Issue #4295 — open +66 First GraphQL server library tracking QUERY (natural fit for GraphQL-over-HTTP reads)
Frappe Python ✅ Merged 10,607 PR #41135 — merged +35 Merged to develop
Django Ninja Python ⚠️ PR open 9,170 PR #1754 — open +57 @api.query() operation support; Django itself still tracks nothing
Tomcat Java ✅ Committed (12.x) 8,233 PR #1026 — closed unmerged; reimplemented by committer +15 Landed by hand "based on PR #1026… with a few minor variations"; Tomcat 12 only (needs Servlet API change)
Armeria Java ✅ Merged 5,133 PR #6861 — merged +31 · merged +48 Server + client surfaces
Jetty Java ⚠️ Open 4,092 PR #15316 — open +5 Targeted at Jetty 13.0.x (not 12.x); no discussion since +29, but touched again +65
Kemal Crystal ✅ Merged 3,905 Issue #762 — open · PR #769merged +13 · merged +59 QUERY routing merged to master by the maintainer; Crystal stdlib client PR separate (see Clients)
Helidon Java ⚠️ PR open 3,811 PR #12178 — open +29 · active +65 Oracle's microservices framework; WebServer + WebClient QUERY support
Undertow Java ❓ Nothing 3,758 none found n/a Servlet container (Spring Boot option); no RFC tracking found
Plug Elixir ✅ Merged 3,013 PR #1319 — merged +9 Among the earliest post-RFC merges; the HTTP layer under Phoenix (whose router PR is still open)
Servant Haskell ⚠️ PR open 1,965 PR #1907 — open +57 Type-level QUERY verb; upstream http-types still lacks the constant (only a small fork merged it, Vlix#34, +64)
Koa (@koa/bodyparser) JavaScript ⚠️ PR open 1,325 PR #177 — open +58 Parse QUERY request bodies; routing already works on QUERY-capable Node (http.METHODS)
Vert.x Web Java ⚠️ In review 1,151 PR #2921 — open +21 In the maintainers' review queue; caching-impact explanation requested (+66)
Hanami Ruby ⚠️ PR open 361 PR #307 — open +64 Conditional QUERY support in the router; follows Rails' merge
Jakarta Servlet Java (spec) ✅ Completed 325 Issue #1068 — closed completed · #1069 +9 · closed ≤+34 Spec-level container contract; cited by the Tomcat 12 work
W3C LWS Spec ✅ Merged, contested 30 PR #179 — merged · Issue #205 — open +10 · merged ≈+34 QUERY for Search / Type Index; GET/POST fallback must resolve before CR; fallback issue quiet since +34

Clients (outbound)

Stacks that send QUERY.

Stack Lang Status ★ Stars PR / issue Days after RFC Notes
Go (net/http) Go ⚠️ Likely accept 136,042 Issue #80058 · PR #80134 · Issue #80488closed completed +2 · +8 · fix +64 NewRequest("QUERY", …) works; MethodQuery likely accept (+65); §2.5 redirect fix (CL 803520) landed (+64)
Deno (fetch) Rust / TS ⚠️ Open 108,273 Issue #36186 — open +34 Feature request; method string may already work
Bun (fetch / node:http) Zig / TS ✅ Works (generic) 95,555 Issue #34839 — closed +34 Client + body verified
CPython (http.client) Python / C ⚠️ Open 74,546 Issue #153309 — open · PR #155786 — open +22 · new PR +59 Stdlib client / method constant; replacement PR after #153310 closed (+59)
Spring RestClient / WebClient Java ✅ Merged 60,205 Framework-wide PR #34993 — applied (+65) −378 → merged +65 Core QUERY support merged with the server work (next milestone); @QueryExchange / client DSL shortcuts deferred (#37185 closed +66)
requests Python ❌ Declined 54,247 Issue #7558 — closed not planned · PR #7577 — closed unmerged +18 / +24 No first-class requests.query()
Cypress JavaScript ✅ Released 50,977 PR #34459merged · in v15.20.0 +47 · merged +48 · release +49 cy.request() / cy.intercept() QUERY support; 2023-era issue #28282 closed completed; follow-up #34576 merged +57
curl C ✅ Generic 42,654 none needed n/a -X QUERY works today
Laravel Http::query() PHP ✅ Merged 34,876 PR #60663 — merged +17 Client helper on 13.x (routing separate, L14)
Symfony HttpClient PHP ✅ Merged (8.2) 31,132 PR #64874 — merged +25 · merged +58 CachingHttpClient QUERY support (body-aware) on the 8.2 branch; arbitrary methods already worked; docs issue open (symfony-docs#22642, +58)
Guzzle PHP ✅ Works + redirects 23,458 Issue #3699 — closed · PR #3702 — merged +8 Method string + redirect middleware fixed for QUERY
JDK HttpClient (java.net.http) Java ⚠️ Minor internal semantics changes outstanding 23,255 JDK-8276958 n/a Java 11+; HttpRequest.newBuilder().method("QUERY", body) — arbitrary methods with body; JBS ticket untouched since Jan 2025
Crystal (HTTP::Client) Crystal ⚠️ PR open 20,380 PR #17265 — open +64 Stdlib client query method; pairs with Kemal's merged server support
.NET HttpClient (System.Net.Http) C# ⚠️ API approved 18,222 Issue #113522 — open, API approved · #132092 — open · #130671 — closed duplicate −459 proposal · approved +56 QueryAsync surface passed .NET API review (+56); JSON extension methods split out to #132092 (+55); arbitrary methods already work via HttpRequestMessage
aiohttp (client) Python ✅ Released 16,527 Issue #13160 · PR #13174 — merged +30 · +34 Shared parser fix benefits client + server; shipped in 3.14.2; METH_QUERY + idempotent treatment merged for 3.15 (+48)
hyper Rust ✅ Via http 16,282 inherits hyperium/http#798 0 Low-level client/server; http::Method::QUERY, released in http v1.5.0 (+43)
httpx Python ❓ Unmaintained 15,426 none found n/a Arbitrary methods usually work, but the project is unmaintained — no release since 2024. pydantic's httpx2 fork (below) is its QUERY-capable successor; see issue #4
reqwest Rust ❌ Declined 11,784 Issue #3056 — closed not planned 0 High-level async (on hyper); uses http crate methods
resty Go ✅ Merged 11,759 PR #1187 — merged +35 · merged +38 Merged to the v3 branch
OpenFeign Java ✅ Merged 9,797 PR #3454 — merged +11 · merged +42 Declarative Java client; QUERY in the method template
JMeter Java ⚠️ Open 9,516 Issue #6743 — open +42 HTTP sampler method list; to-triage, no PR yet
Node.js / undici JavaScript ✅ Shipped 7,669 Issue #5454 · PR #5459 — merged +11 / +13 · npm 8.6.0 at +16 Node's fetch implementation; body-aware cache key work
ofetch TypeScript ⚠️ Two PRs open 5,350 PR #611 — open · PR #623 — open · Issue #610 — open +30 · second PR +61 QUERY as payload-bearing method; a second, competing PR appeared (+61) with neither reviewed; sibling ocache PR closed unmerged (#31, +63)
req Go ✅ Merged 4,854 PR #508 — merged +35 · merged +44 Query / MustQuery helpers
urllib3 Python ❓ Nothing 4,050 none found n/a Underpins many Python clients
ureq Rust ⚠️ Open 2,172 Issue #1177 — open +6 (Jun 22) Blocking client; request for ureq::query / Agent::query; idle
Apache HttpClient 5 Java ✅ In 5.7-alpha1 1,535 PR #840 — merged · PR #852merged +15 method · cache +36 · alpha +52 Method/redirect support released in 5.7-alpha1 (Maven Central, +52); body-keyed HTTP cache (#852) missed the alpha1 cut — next release
Rust http crate Rust ✅ Released 1,375 PR #798 — merged · closes #743 0 · release +43 Method::QUERY; safe + idempotent. v1.5.0 unblocked axum + hyper downstream
retrofit.dart Dart ✅ Merged 1,183 Issue #922 — closed completed · PR #926merged +34 · merged +58 Generator QUERY support merged by the maintainer (+58); duplicate PRs #924/#925 closed; a dedicated Dart QUERY SDK (http_query) also exists — see Purpose-built projects
httpx2 Python ✅ Released 967 PR #1055 — merged · v2.6.0 +28 pydantic's maintained fork / successor of httpx and the natural migration path for httpx users who need QUERY — already ~a quarter of httpx's downloads and climbing (pypistats); QUERY merged & released same day in v2.6.0
isahc Rust ❓ Nothing 788 none found n/a libcurl-backed; custom methods typically work
attohttpc Rust ❓ Nothing 294 none found n/a Lightweight blocking; no RFC tracking found
Inrupt solid-client (JS) TypeScript ❓ Nothing 244 none found n/a Solid data client; needed once pods speak QUERY
libwww-perl Perl ⚠️ Bug open 211 Issue #530 — open +35 LWP::UserAgent downgrades QUERY→GET on 302, contrary to RFC 10008 §2.5
Inrupt solid-client-authn (JS) TypeScript ❓ Nothing 77 none found n/a Authenticated fetch wrapper
Inrupt solid-client (Java) Java ❓ Nothing 17 none found n/a Java Solid client

Edge, proxies & caches

Infrastructure in front of apps. Body-aware caching and method allow-lists matter most (RFC 10008 §2.7).

Stack Lang Status ★ Stars PR / issue Days after RFC Notes
Caddy Go ❓ Nothing 75,070 none found n/a No RFC 10008 tracking found. Built on Go's net/http, so raw QUERY requests likely pass through untouched today, but nothing in Caddy's repo/forum addresses QUERY explicitly; closed, pre-RFC #5166 shows unrecognized methods historically fell back rather than returning 501
Traefik Go ⚠️ Community PR 64,528 Issue #13544 — open · PR #13667 — open +34 · reply +41 · PR +55 Maintainers invited contribution; community PR (QUERY in metrics labeling) moved to "review" status (+58)
Kong Lua / Nginx ⚠️ No response 44,016 Discussion #14944 — open +34 Proxy, plugins, body-keyed Proxy Cache; retries list missing QUERY. Still zero comments at +66
nginx C ⚠️ Open 31,463 PR #1488 — open · (#1511 closed) +6 Recognition only; body cache key TBD; idle since +9
Envoy C++ ⚠️ Awaiting final review 28,808 Issue #46404 — open · PR #46496 — open +41 / +46 · LGTM +56 HTTP/1 + /2 + /3, gated by envoy.reloadable_features.http1_allow_query_method (default on); senior LGTM (+56), nits addressed (+57); second maintainer pinged for review (+65)
Cloudflare workerd C++ ⚠️ Open 8,618 Issue #6849 — open +14 Body-keyed QUERY caching (Cache API); idle since +18
HAProxy C ❓ Nothing 6,796 none found n/a No public RFC 10008 tracking found
Apache httpd C ❓ Nothing 4,051 none found n/a Passthrough / proxy path; discuss on dev@httpd
Varnish C ❓ Nothing 4,048 none found n/a Cache key for QUERY body untracked
Squid C++ ❓ Nothing 3,070 none found n/a No public RFC 10008 tracking found
APISIX (lua-resty-radixtree) Lua ⚠️ PR open 282 PR #159 — open +56 · active +66 The route-matching library under Apache APISIX; QUERY in the method bitmap
Managed CDNs (CloudFront, Fastly, Akamai, ALB, …) ❓ Opaque vendor docs / changelogs n/a Hard to track via GitHub; verify per product

Specs, docs & tooling

Stack Lang Status ★ Stars PR / issue Days after RFC Notes
OpenAPI Spec ✅ Spec-level 31,165 3.2.0 announcement −266 Documents QUERY operations (client + server codegen)
MDN Docs ⚠️ Open 10,948 PR #44568 — open · Issue #44665 — open +8 / +22 QUERY method + Accept-Query docs; PR idle since +41
WHATWG HTML Spec ⚠️ Open 9,358 Issue #12594 — open +1 <form method="query">
Swashbuckle.AspNetCore C# ⚠️ PR open 5,498 PR #4092 — open +48 QUERY in SwaggerGen operation map + SwaggerUI SubmitMethod ("Try it out"); no review since +48
Browsers / fetch() Spec ✅ Works, unofficial 2,250 Issue #1938 — open +14 Client surface in browsers; Mozilla #1430 open · WebKit position re-requested (#709 — open, +61) after #692 was closed unresolved
NestJS Swagger TypeScript ⚠️ PR open 1,887 PR #4007 — open +28 · active +65 OpenAPI module catch-up for NestJS's released QUERY routing
zod-to-openapi TypeScript ⚠️ Open 1,611 Issue #393 — open +57 OpenAPI 3.2 QUERY operations from Zod schemas
OWASP Noir Crystal ✅ Merged 1,375 Issue #2232 — closed completed · PR #2563 — merged +9 · merged +60 Endpoint-discovery / attack-surface tool now detects QUERY routes in scanned code
RFC 10008 Spec ✅ Published datatracker · HTTP WG 0 IESG approval Nov 20, 2025 = −208; query-method

Purpose-built QUERY projects & interop testing

Greenfield projects written for QUERY, rather than existing stacks adding it. Tracked separately because star counts here measure novelty, not ecosystem penetration. Contributed via jeswr/http-query-adoption#3 and #4, which were redirected to this repo.

Project Lang Kind ★ Stars Source Days after RFC Notes
Ayder C Adopter 96 PR #10 — merged +31 · merged +43 HTTP-native durable event log / message bus. interop/spring-query/ emits side-by-side receipts for QUERY-with-JSON-body direct vs. routed through Envoy, plus a Spring-side matching contract
rfc10008-interop Interop suite 0 repo +31 Evidence-first matrix: portable checks emitting machine-readable receipts (PASS / FAIL / NOT_SUPPORTED / NOT_APPLICABLE / UNVERIFIED / OBSERVED) over ETag, conditional revalidation, Content-Location, semantic query identity, method override, CORS preflight and cache observability. Records evidence rather than pass/fail verdicts
query-suite-example JS (Workers) Reference impl 0 repo +20 Cloudflare Workers QUERY suite; one of the two implementations currently covered by the interop matrix
query-go-sdk Go SDK 0 repo +23 · v0.2.1 +49 Dependency-free client + server SDK; §2.5-conformant redirect handling; v0.2.1 (+49) fixes media-type matching
http-query Rust SDK 0 crates.io · repo +35 · v0.2.0 +49 Client + server SDK on reqwest + axum; published to crates.io; v0.2.0 (+49) adds §2.5 redirect handling
http_query Dart SDK 0 pub.dev · repo +49 Client + server SDK on package:http; published to pub.dev; 0.2.0 (+49) adds §2.5 redirect handling

Only two independent implementations are covered by the interop matrix so far, so it is not yet a conformance signal for the stacks in the tables above.


Cross-cutting: redirect semantics (§2.5)

A recurring failure class, independent of language: clients that treat QUERY like POST on 301/302 and silently downgrade it to GET, discarding the query body.

Stack Status Tracking
Guzzle ✅ Fixed PR #3702 — merged (+8)
Go (net/http) ✅ Fixed Issue #80488 — closed completed (+64) · CL 803520 landed
libwww-perl ⚠️ Open Issue #530 (+35)
Apache HttpClient 5 ✅ Released part of PR #840 (+15); in 5.7-alpha1 (+52)

Worth checking explicitly in any stack marked "✅ Generic" above — arbitrary-method support does not imply correct redirect handling.


Related trackers

About

HTTP QUERY (RFC 10008) — ecosystem adoption

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors