Migrating to Responder 6.0

Responder 6.0 is a small, deliberate major release. It adds no new features: it removes the deprecation shims introduced during 5.x and flips a handful of defaults to the more-correct behavior. The (req, resp) core, dependency injection, typed I/O, auth, and uploads are all unchanged.

Every change below was announced with a DeprecationWarning (or an opt-in knob) in a 5.x release, so you can fix your code on 5.x first and upgrade to 6.0 with no surprises. Run your test suite with -W error::DeprecationWarning to surface everything that needs attention.

Deprecation policy

A behavior that changes in a major release is first deprecated in a minor: it keeps working but emits a DeprecationWarning (or is gated behind an opt-in flag) for at least one minor-release cycle before the major flips it.

Breaking changes

Change

Staged in

What to do

req.method returns a plain uppercase str (the case-insensitive HTTPMethod shim is removed)

5.0

Compare against uppercase literals: req.method == "GET".

Dependency providers must name their request parameter req/request (or annotate it Request); the single-unnamed-parameter shim is removed

5.0

Rename the parameter, or annotate it Request.

await req.media("files") returns streaming UploadFile objects instead of a fully-buffered bytes-dict

5.6

Use File() markers (async def h(req, resp, *, f: UploadFile = File(...))), or read .filename / await f.read() off the returned UploadFile.

JSON serialization defaults to ensure_ascii=False (raw UTF-8)

5.6

No action for most apps. If you depend on \uXXXX escaping (or on exact ETag values over non-ASCII bodies), pass API(json_ensure_ascii=True).

Vary: Accept is sent by default on content-negotiated responses

5.1

No action (this is shared-cache-correct). To opt out, don’t set it / strip the header in middleware.

Minor invariant fix

Route.__hash__ no longer includes before_request, so two routes that compare equal now hash equal. This only affects code that put Route objects in a set or dict keyed by identity-with-before_request, which is not a public pattern.

Not changing

The (req, resp) handler signature, the Query(...)-in-default marker form, docstring-YAML OpenAPI overrides, and the permissive default allowed_hosts=["*"] all stay as they are.