Skip to content

CLI Reference

Scaffold a new PyMode project.

Terminal window
pymode init my-worker

Creates a project directory with pyproject.toml, src/entry.py, and .gitignore.

Start a local development server with hot reload.

Terminal window
pymode dev

The dev server runs your Python handler natively (not in WASM) for instant feedback (~35ms per request).

OptionDefaultDescription
--port <port>8787Port to listen on
--entry <file>from pyproject.tomlOverride entry point
--env <KEY=VALUE>Set environment variable
--verbosefalseLog request/response bodies

Bundle and deploy to Cloudflare Workers.

Terminal window
pymode deploy
OptionDefaultDescription
--entry <file>from pyproject.tomlOverride entry point
--env <KEY=VALUE>Set environment variable
--wizerfalseBuild Wizer snapshot for fast cold starts
--dry-runfalseBundle without deploying

Add Python package dependencies.

Terminal window
pymode add requests jinja2 markupsafe

Pure-Python packages are bundled directly. C extension packages are compiled to .wasm side modules using build-extension.py.

Remove Python package dependencies.

Terminal window
pymode remove requests

Install all dependencies from pyproject.toml.

Terminal window
pymode install
[project]
name = "my-worker"
version = "0.1.0"
[tool.pymode]
main = "src/entry.py"
# wizer = true # Enable deploy-time snapshots (~5ms cold starts)
[tool.pymode.kv_namespaces]
MY_KV = "namespace-id"
[tool.pymode.r2_buckets]
MY_R2 = "bucket-name"
[tool.pymode.d1_databases]
MY_DB = "database-id"

Local environment variables for development:

Terminal window
API_KEY=sk-test-123
DEBUG_MODE=true
DATABASE_URL=postgres://localhost:5432/mydb