CLI Reference
Palfrey CLI uses Click with auto_envvar_prefix=PALFREY.
Command shape:
APP is usually module:attribute.
- use
--factory when the target returns an ASGI app callable.
Example command set:
from __future__ import annotations
COMMANDS = [
"palfrey myapp.main:app",
"palfrey myapp.main:app --reload --reload-dir src",
"palfrey myapp.main:app --workers 4 --host 0.0.0.0 --port 8000",
"palfrey myapp.main:app --proxy-headers --forwarded-allow-ips 10.0.0.0/8,127.0.0.1",
]
for command in COMMANDS:
print(command)
Configuration precedence
Highest to lowest:
- CLI options
PALFREY_* environment variables
- config defaults
Note:
Palfrey also mirrors UVICORN_* env vars to PALFREY_* when no Palfrey-specific value is set.
Option reference
App loading
| Option |
Type |
Default |
Notes |
APP |
arg |
required |
import target such as main:app |
--factory |
flag |
false |
treat APP as factory callable |
--app-dir |
str |
"" |
prepend path to import search |
--interface |
choice |
auto |
auto, asgi3, asgi2, wsgi |
Bind and sockets
| Option |
Type |
Default |
Notes |
--host |
str |
127.0.0.1 |
bind host |
--port |
int |
8000 |
bind port |
--uds |
str |
None |
unix domain socket path |
--fd |
int |
None |
inherited socket descriptor |
--backlog |
int |
2048 |
listen queue size |
Protocol runtime
| Option |
Type |
Default |
Notes |
--loop |
str |
auto |
none, auto, asyncio, uvloop |
--http |
str |
auto |
auto, h11, httptools, h2, h3 |
--ws |
str |
auto |
auto, none, websockets, websockets-sansio, wsproto |
--lifespan |
choice |
auto |
auto, on, off |
--h11-max-incomplete-event-size |
int |
None |
h11 buffer cap |
--http h3 notes:
- requires both
--ssl-certfile and --ssl-keyfile
- uses UDP/QUIC transport semantics
- unix socket (
--uds) and file descriptor (--fd) modes are not supported
WebSocket tuning
| Option |
Type |
Default |
Notes |
--ws-max-size |
int |
16777216 |
max websocket message bytes |
--ws-max-queue |
int |
32 |
queue size for websocket backend |
--ws-ping-interval |
float |
20.0 |
ping period seconds |
--ws-ping-timeout |
float |
20.0 |
ping timeout seconds |
--ws-per-message-deflate |
bool |
true |
compression toggle |
Reload and workers
| Option |
Type |
Default |
Notes |
--reload |
flag |
false |
enable file-watch reload mode |
--reload-dir |
repeat str |
[] |
watch roots |
--reload-include |
repeat str |
[] |
include patterns |
--reload-exclude |
repeat str |
[] |
exclude patterns |
--reload-delay |
float |
0.25 |
scan delay |
--workers |
int |
None |
worker process count |
--timeout-worker-healthcheck |
int |
5 |
worker heartbeat timeout |
--limit-max-requests |
int |
None |
recycle worker after N requests |
--limit-max-requests-jitter |
int |
0 |
additional randomized recycle offset |
Request limits and shutdown
| Option |
Type |
Default |
Notes |
--limit-concurrency |
int |
None |
max active tasks/connections |
--timeout-keep-alive |
int |
5 |
idle keep-alive timeout |
--timeout-graceful-shutdown |
int |
None |
shutdown drain timeout |
--root-path |
str |
"" |
ASGI root path override |
Logging and headers
| Option |
Type |
Default |
Notes |
--log-config |
path |
None |
.ini, .json, .yaml |
--log-level |
choice |
None |
critical, error, warning, info, debug, trace |
--access-log / --no-access-log |
flag |
true |
access log toggle |
--use-colors / --no-use-colors |
flag |
None |
terminal color control |
--header |
repeat str |
[] |
custom default response header |
--server-header / --no-server-header |
flag |
true |
default Server header |
--date-header / --no-date-header |
flag |
true |
default Date header |
Proxy and TLS
| Option |
Type |
Default |
Notes |
--proxy-headers / --no-proxy-headers |
flag |
true |
parse trusted forwarded headers |
--forwarded-allow-ips |
str |
None |
trusted proxy sources list |
--ssl-keyfile |
str |
None |
TLS private key |
--ssl-certfile |
str |
None |
TLS certificate |
--ssl-keyfile-password |
str |
None |
key password |
--ssl-version |
int |
ssl.PROTOCOL_TLS_SERVER |
TLS protocol selector |
--ssl-cert-reqs |
int |
ssl.CERT_NONE |
client cert requirement |
--ssl-ca-certs |
str |
None |
CA bundle path |
--ssl-ciphers |
str |
TLSv1 |
cipher suite policy |
Misc
| Option |
Type |
Default |
Notes |
--env-file |
path |
None |
dotenv-style env file |
--version |
flag |
n/a |
print version and exit |
Practical command recipes
API server, simple
palfrey myapp.main:app --host 0.0.0.0 --port 8000
Local development
palfrey myapp.main:app --reload --reload-dir src --log-level debug
Multi-worker deployment
palfrey myapp.main:app --workers 4 --limit-max-requests 20000 --limit-max-requests-jitter 2000
Behind reverse proxy
palfrey myapp.main:app --proxy-headers --forwarded-allow-ips 127.0.0.1
Plain-language summary
The CLI is your runtime control panel.
If startup commands are explicit and versioned, operations become predictable.