Overview
Uvicorn 0.35, released on June 28, 2025, introduces WebSocketsSansIOProtocol for more performant WebSocket handling.
Main Features
WebSocketsSansIOProtocol
The new sans-I/O protocol for WebSockets separates protocol logic from I/O operations, improving performance and testability.
python
# Run with the new WebSocket protocol
# uvicorn app:app --ws wsproto
from starlette.applications import Starlette
from starlette.websockets import WebSocket
from starlette.routing import WebSocketRoute
async def ws(websocket: WebSocket):
await websocket.accept()
data = await websocket.receive_text()
await websocket.send_text(f'Echo: {data}')
app = Starlette(routes=[WebSocketRoute('/ws', ws)])
Server improvements
The server benefits from performance improvements for HTTP/1.1 connection handling and better graceful shutdown management.
python
import uvicorn
async def app(scope, receive, send):
await send({'type': 'http.response.start',
'status': 200,
'headers': [[b'content-type', b'text/plain']]})
await send({'type': 'http.response.body',
'body': b'Hello Uvicorn 0.35'})
# uvicorn app:app --host 0.0.0.0 --port 8000
