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

Sources