Overview
If you're running an ASGI app with Uvicorn today, switching to Pounce is straightforward. The CLI syntax and configuration concepts are similar.
CLI Comparison
# Uvicorn
uvicorn myapp:app --host 0.0.0.0 --port 8000 --workers 4 --reload
# Pounce
pounce myapp:app --host 0.0.0.0 --port 8000 --workers 4 --reload
Flag Mapping
| Uvicorn Flag | Pounce Equivalent | Notes |
|---|---|---|
--host |
--host |
Same |
--port |
--port |
Same |
--workers |
--workers |
Pounce uses threads on 3.14t |
--reload |
--reload |
Built-in, no watchfiles needed |
--log-level |
--log-level |
Same levels |
--ssl-certfile |
--ssl-certfile |
Same |
--ssl-keyfile |
--ssl-keyfile |
Same |
--root-path |
--root-path |
Same |
--no-access-log |
--no-access-log |
Same |
--factory |
(automatic) | Usemyapp:create_app()syntax |
--http h11 |
(default) | h11 is the default backend |
--http httptools |
(not needed) | Built-in fast parser handles this |
--ws websockets |
pounce[ws] |
Uses wsproto instead |
--h11-max-incomplete-event-size |
ServerConfig(h11_max_incomplete_event_size=...) |
Programmatic only (no CLI flag) |
Programmatic Comparison
# Uvicorn
import uvicorn
uvicorn.run("myapp:app", host="0.0.0.0", port=8000, workers=4)
# Pounce
import pounce
pounce.run("myapp:app", host="0.0.0.0", port=8000, workers=4)
Key Differences
Worker model
Uvicorn uses processes for parallelism (fork). Pounce uses threads on Python 3.14t. This means:
- Lower memory — One copy of the app instead of N
- Shared state — Frozen config is shared, not duplicated
- No fork — No copy-on-write, no IPC overhead
Compression
Pounce includes built-in compression (zstd + gzip). Uvicorn does not — you'd typically handle this in middleware or a reverse proxy.
Server-Timing
Pounce can injectServer-Timing headers automatically (--server-timing). Uvicorn has no equivalent.
HTTP/2
Pounce supports HTTP/2 viapounce[h2]. Uvicorn does not support HTTP/2.
Migration Steps
- 1
Install Pounce
uv add bengal-pounce - 2
Replace the run command
# Before uvicorn myapp:app --host 0.0.0.0 --workers 4 # After pounce myapp:app --host 0.0.0.0 --workers 4 - 3
Update Dockerfile / systemd
Update deployment configs if applicable.
- 4
Test your application
Pounce serves standard ASGI, so any compliant app works without code changes.
Verify Migration
Migration Verification
0/4 complete
- Pounce installed (
pounce --helpworks) - Run command replaced (uvicorn → pounce)
- Dockerfile / systemd updated if applicable
- Application tested and serving correctly
See Also
- Quickstart — Getting started with Pounce
- When to Use Pounce — Architecture and deployment