Skip to main content
Feather registers these on every app. You do not write them.

Liveness versus readiness

Liveness answers “is the process alive?” If this fails, the container should be restarted. Readiness answers “can it handle requests?” If this fails, stop sending traffic but do not restart. Example: your app is running but the database is down. Liveness passes because the process is alive; readiness fails because it cannot serve requests. The load balancer stops routing to this instance while it recovers.

Response format

Returns 200 OK when healthy and 503 Service Unavailable when not.

Wiring it up

For AWS ALB, GCP and similar:
Prefer /health over a hand-written route. A container with a broken DATABASE_URL reports unhealthy instead of quietly serving 500s.
Apps scaffolded before 0.9.7 also have a routes/api/health.py giving /api/health. That route is yours, not the framework’s, and it only proves the process is listening. Point new health checks at /health.