Examples

The examples/ directory is the quickest way to see Responder’s pieces working together. Each file is a small app you can run directly, poke with curl, and copy from when you need the same pattern in your own service.

Running an Example

From an installed environment, run an example with the Responder CLI:

$ responder run examples/helloworld.py

Then call it from another terminal:

$ curl http://127.0.0.1:5042/hello
hello, world!

When you are working from a checkout of this repository, prefix the command with uv run so the project environment is used:

$ uv run responder run examples/rest_api.py

Most examples expose interactive OpenAPI docs at /docs. Open http://127.0.0.1:5042/docs in a browser after starting one of the API examples.

Where to Start

helloworld.py

The smallest useful app: one index route, one route parameter, and no sessions. Start here if you want to see the request/response shape.

rest_api.py

A compact book catalog with Pydantic input models, response models, OpenAPI metadata, resp.created(), resp.no_content(), and resp.problem().

todo.py

The practical all-around example: typed input, filtering, bearer-token auth, named auth policies, request IDs, and richer OpenAPI examples.

atelier.py

The contract-test fixture. It is intentionally polished because the test suite validates its generated OpenAPI document and drives a generated client against it.

Focused Patterns

user.py

A smaller typed CRUD-style API for users.

shortlinks.py

Redirects, conflict responses, generated short codes, and click tracking.

webhooks.py

Raw-body signature verification before JSON validation, useful for Stripe-style webhook receivers.

fortunes.py

A local-command wrapper that turns the fortune CLI into an API and reports command failures as problem-details responses. Install the fortune command, or set FORTUNE_COMMAND to a compatible command.

lifespan.py

Startup and shutdown work with an async lifespan context manager.

sse_stream.py

Server-Sent Events with heartbeat support and a tiny browser page.

websocket_chat.py

A minimal WebSocket chat room with a shared in-memory hub.

marimo_mount.py

Mounts a marimo notebook under /notebooks/ while keeping normal Responder routes and OpenAPI docs on the parent app. Install marimo first:

$ uv pip install marimo
tarot.py

A larger read/browse/deal API with Pydantic models and repeatable example data.

Testing Examples

Several examples expose a create_api() function so tests can build a fresh app with a fake store or fake external dependency. For example, examples/fortunes.py accepts a fortune_reader callable, which lets the test suite verify the API contract without depending on the local fortune binary.

That shape is a good habit for your own apps too: keep route wiring in create_api(), pass real dependencies in production, and pass fakes in tests.