You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[ingress client] Accept httpx-compatible clients without requiring httpx #247
Related to #231. We use httpx2 in our application and supply our own async HTTP client to Restate. We still need to install httpx and httpcore because restate.client imports httpx at module level.
Could we allow compatible async HTTP clients while keeping the existing httpx behavior?
Reproduction
Reproduced with Python 3.12.14 and restate-sdk 1.1.0 in a clean virtual environment:
Use small HttpClient and HttpResponse protocols. The client needs async post(url, *, headers, content). The response needs read-only status_code, reason_phrase, text and content fields.
Load the selected HTTP package inside create_client(). Keep httpx as the default. Keep the three existing positional arguments. Add keyword-only backend="httpx2" to select httpx2.
Keep client = ["httpx[http2]"]. Add a separate client-httpx2 = ["httpx2[http2]>=2.12,<3"] extra. Add no base dependency.
Require the selected package. Report its install command when it is missing. Do not fall back to the other package. Pass through broken imports inside an installed package.
Preserve Client.client, existing public names, requests, headers, codecs, return values and HttpError fields. Keep each client's own transport errors. Keep Python 3.10 support and leave the harness unchanged.
PR #248 implements this approach and credits Arthur's work in #231.
This is covered by #277: restate.client now imports only httpx2, and the client extra is httpx2[http2], so from restate.client import Client no longer needs httpx or httpcore. A Client can also be built over an AsyncClient you create yourself. If you need a client other than httpx2, say so and we can look at the protocol approach then.
Activity
igalshilman commentedon Nov 9, 2026
This is covered by #277:
restate.clientnow imports onlyhttpx2, and theclientextra ishttpx2[http2], sofrom restate.client import Clientno longer needshttpxorhttpcore. AClientcan also be built over anAsyncClientyou create yourself. If you need a client other than httpx2, say so and we can look at the protocol approach then.