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.
Stacks that accept or route QUERY.
| Stack | Lang | Status | ★ Stars | PR / issue | Days after RFC | Notes |
|---|---|---|---|---|---|---|
| Go (net/http) | Go | 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 | 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 | 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 | 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 #57973 — merged (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# | 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 | 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 #3801 — merged | 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 | 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 | 23,439 | PR #2358 — open | +60 | High-performance server + client lib; QUERY method support | |
| Phoenix | Elixir | 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 | 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 | 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 | 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 | 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 | 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 | 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 #769 — merged | +13 · merged +59 | QUERY routing merged to master by the maintainer; Crystal stdlib client PR separate (see Clients) |
| Helidon | Java | 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 | 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 | 1,325 | PR #177 — open | +58 | Parse QUERY request bodies; routing already works on QUERY-capable Node (http.METHODS) |
|
| Vert.x Web | Java | 1,151 | PR #2921 — open | +21 | In the maintainers' review queue; caching-impact explanation requested (+66) | |
| Hanami | Ruby | 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 |
Stacks that send QUERY.
| Stack | Lang | Status | ★ Stars | PR / issue | Days after RFC | Notes |
|---|---|---|---|---|---|---|
| Go (net/http) | Go | 136,042 | Issue #80058 · PR #80134 · Issue #80488 — closed completed | +2 · +8 · fix +64 | NewRequest("QUERY", …) works; MethodQuery likely accept (+65); §2.5 redirect fix (CL 803520) landed (+64) |
|
Deno (fetch) |
Rust / TS | 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 | 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 #34459 — merged · 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 | 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 | 20,380 | PR #17265 — open | +64 | Stdlib client query method; pairs with Kemal's merged server support |
|
.NET HttpClient (System.Net.Http) |
C# | 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 | 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 | 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 | 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 #852 — merged | +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 #926 — merged | +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 | 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 |
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 | 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 | 44,016 | Discussion #14944 — open | +34 | Proxy, plugins, body-keyed Proxy Cache; retries list missing QUERY. Still zero comments at +66 | |
| nginx | C | 31,463 | PR #1488 — open · (#1511 closed) | +6 | Recognition only; body cache key TBD; idle since +9 | |
| Envoy | C++ | 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++ | 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 | 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 |
| 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 | 10,948 | PR #44568 — open · Issue #44665 — open | +8 / +22 | QUERY method + Accept-Query docs; PR idle since +41 |
|
| WHATWG HTML | Spec | 9,358 | Issue #12594 — open | +1 | <form method="query"> |
|
| Swashbuckle.AspNetCore | C# | 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 | 1,887 | PR #4007 — open | +28 · active +65 | OpenAPI module catch-up for NestJS's released QUERY routing | |
| zod-to-openapi | TypeScript | 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 |
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.
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 | 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.
- jeswr/http-query-adoption — retired & archived (+48); content assimilated into the tables above. The owner closed #3 / #4 redirecting contributors here
- Digest-based QUERY cache negotiation: httpwg/http-extensions#3469 — closed completed (+13)