# What changed in uvicorn

> 34 changes in uvicorn 0.46 to 0.54 from its official release notes, upgrade guides and advisories: 2 breaking, 1 deprecations, 1 security, 9 new APIs and options. Each one cited. Sources checked 2026-10-20. HTML: https://unstale.sh/pypi/uvicorn/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## uvicorn 0.54

### New APIs and options

- Applications can send resource hints over HTTP/2 before the final response; each supplied link becomes a separate Link header. (0.54.0) — [release notes](https://github.com/Kludex/uvicorn/releases/tag/0.54.0)
- Applications can send metadata after an HTTP/2 response body; clients must send TE: trailers, and multiple trailer messages are combined before the response completes. (0.54.0) — [release notes](https://github.com/Kludex/uvicorn/releases/tag/0.54.0)

## uvicorn 0.53

### Security

- The default allowed forwarded-proxy IPs now include IPv6 loopback ::1. (0.53.0) — [release notes](https://github.com/Kludex/uvicorn/releases/tag/0.53.0)

### New APIs and options

- Adds experimental HTTP/2 support via zttp, enabled with --http zttp --http2; supports TLS ALPN and cleartext prior knowledge. (0.53.0) — [release notes](https://github.com/Kludex/uvicorn/releases/tag/0.53.0)
- Adds zuvloop as an explicitly selectable event loop on CPython 3.14 or newer. (0.53.0) — [release notes](https://github.com/Kludex/uvicorn/releases/tag/0.53.0)

### Fixes and other changes

- Parses comma-separated Connection: close tokens case-insensitively across HTTP implementations. (0.53.0) — [release notes](https://github.com/Kludex/uvicorn/releases/tag/0.53.0)
- Cancels the HTTP keep-alive timer when a connection becomes a WebSocket, keeping upgraded WebSockets alive. (0.53.0) — [release notes](https://github.com/Kludex/uvicorn/releases/tag/0.53.0)

## uvicorn 0.52

### New APIs and options

- Adds an experimental HTTP/1.1 implementation backed by zttp, selectable with --http zttp; it is not recommended for production traffic. (0.52.0) — [release notes](https://github.com/Kludex/uvicorn/releases/tag/0.52.0)

### Performance

- Using zttp’s combined receive path improves HTTP/1.1 request parsing performance. (0.52.3) — [release notes](https://github.com/Kludex/uvicorn/releases/tag/0.52.3)
- HTTP/1 request parsing performance is improved. (0.52.2) — [release notes](https://github.com/Kludex/uvicorn/releases/tag/0.52.2)

### Fixes and other changes

- Accepted WebSocket handshakes no longer include duplicate Date headers when using websockets-sansio. (0.52.4) — [release notes](https://github.com/Kludex/uvicorn/releases/tag/0.52.4)
- Bodyless request receives are fixed. (0.52.2) — [release notes](https://github.com/Kludex/uvicorn/releases/tag/0.52.2)
- The websockets-sansio and wsproto implementations complete the closing handshake by waiting up to 10 seconds for the client's close reply instead of resetting the connection. (0.52.1) — [release notes](https://github.com/Kludex/uvicorn/releases/tag/0.52.1)
- The websockets-sansio implementation removes duplicate Content-Type and Content-Length headers from denial responses. (0.52.1) — [release notes](https://github.com/Kludex/uvicorn/releases/tag/0.52.1)
- The websockets-sansio implementation delivers non-UTF-8 denial bodies intact. (0.52.1) — [release notes](https://github.com/Kludex/uvicorn/releases/tag/0.52.1)
- Connection loss is handled while a WebSocket write is waiting on backpressure. (0.52.1) — [release notes](https://github.com/Kludex/uvicorn/releases/tag/0.52.1)
- The websockets-sansio implementation adds missing write flow control to prevent data truncation on server-initiated closes with large in-flight payloads. (0.52.1) — [release notes](https://github.com/Kludex/uvicorn/releases/tag/0.52.1)
- Keeps non-ASCII WebSocket request headers intact with websockets 17.0, which encodes them with ISO-8859-1. (0.52.0) — [release notes](https://github.com/Kludex/uvicorn/releases/tag/0.52.0)

## uvicorn 0.51

### Breaking changes

- colorama is removed from the standard extra. (0.51.0) — [release notes](https://github.com/Kludex/uvicorn/releases/tag/0.51.0)

### Behavior and default changes

- Workers restart with overlap on SIGHUP, enabling near-zero-downtime reloads. (0.51.0) — [release notes](https://github.com/Kludex/uvicorn/releases/tag/0.51.0)

## uvicorn 0.50

### Deprecations

- The legacy websockets implementation is deprecated. (0.50.0) — [release notes](https://github.com/Kludex/uvicorn/releases/tag/0.50.0)

### Behavior and default changes

- Startup failures exit with a dedicated code, and the supervisor stops when a worker cannot boot. (0.50.0) — [release notes](https://github.com/Kludex/uvicorn/releases/tag/0.50.0)
- The `auto` choice now defaults to websockets-sansio. (0.50.0) — [release notes](https://github.com/Kludex/uvicorn/releases/tag/0.50.0)

### Fixes and other changes

- Comma-separated values in Sec-WebSocket-Protocol are now split in the websockets-sansio implementation. (0.50.1) — [release notes](https://github.com/Kludex/uvicorn/releases/tag/0.50.1)
- A fresh `asgi` scope dict is built per request. (0.50.0) — [release notes](https://github.com/Kludex/uvicorn/releases/tag/0.50.0)

## uvicorn 0.49

### Breaking changes

- Consumes duplicate forwarding headers instead of ignoring them, reversing the 0.48.0 behavior. (0.49.0) — [release notes](https://github.com/Kludex/uvicorn/releases/tag/0.49.0)

## uvicorn 0.48

### Behavior and default changes

- Defaults ssl_ciphers to None, using OpenSSL defaults. (0.48.0) — [release notes](https://github.com/Kludex/uvicorn/releases/tag/0.48.0)

### Fixes and other changes

- Ignores duplicate forwarding headers. (0.48.0) — [release notes](https://github.com/Kludex/uvicorn/releases/tag/0.48.0)

## uvicorn 0.47

### New APIs and options

- Adds ssl_context_factory for custom SSLContext configuration. (0.47.0) — [release notes](https://github.com/Kludex/uvicorn/releases/tag/0.47.0)

### Behavior and default changes

- The ASGI app is imported eagerly in the parent process. (0.47.0) — [release notes](https://github.com/Kludex/uvicorn/releases/tag/0.47.0)

### Fixes and other changes

- Treats fd=0 as a valid file descriptor when using reload or workers. (0.47.0) — [release notes](https://github.com/Kludex/uvicorn/releases/tag/0.47.0)

## uvicorn 0.46

### New APIs and options

- The wsproto implementation now supports ws_max_size, allowing developers to configure the maximum WebSocket message size with that implementation. (0.46.0) — [release notes](https://github.com/Kludex/uvicorn/releases/tag/0.46.0)
- The wsproto implementation now supports ws_ping_interval and ws_ping_timeout for configuring WebSocket ping behavior. (0.46.0) — [release notes](https://github.com/Kludex/uvicorn/releases/tag/0.46.0)
- The wsproto implementation now supports ws_ping_interval and ws_ping_timeout for configuring WebSocket ping behavior. (0.46.0) — [release notes](https://github.com/Kludex/uvicorn/releases/tag/0.46.0)
