// the find
benavlabs/FastAPI-boilerplate
An extendable async API using FastAPI, Pydantic V2, SQLAlchemy 2.0, PostgreSQL and Redis.
A batteries-included FastAPI starter with SQLAlchemy 2.0, server-side sessions, OAuth, API keys, Redis/Memcached caching, Taskiq background jobs, and a `bp` CLI for scaffolding Docker Compose files. Targets developers who want a production-ready Python API backend without assembling the stack themselves. Nearly 2k stars suggests real adoption.
1. The vertical-slice module layout (each feature owns its models, routes, crud, schemas) keeps concerns separated in a way that actually scales as the codebase grows. 2. The `bp` CLI generating Docker Compose variants (local/prod/nginx) from Jinja2 templates is genuinely useful — one command gets you a correctly-wired compose file instead of copying YAML between projects. 3. Caching and rate-limiting both have pluggable backends (Redis or Memcached) behind a common interface, so swapping infrastructure doesn't require rewriting call sites. 4. The uv workspace puts the developer CLI in a separate package that never ships in the production image — clean separation that most boilerplates skip.
1. No JWT support in the free tier — server-side sessions only. That's a real constraint for mobile clients or multi-instance deployments without a shared session store, and the README buries this in the paid-vs-free comparison table rather than the auth docs. 2. Test coverage is uneven: integration tests exist only for users and auth endpoints; the rate limiting, caching, and Taskiq layers have unit tests only, so you're on your own verifying those work end-to-end in your environment. 3. FastCRUD is a first-party dependency from the same author — if that project stalls or diverges, you have a non-trivial refactor ahead; the tight coupling isn't obvious until you're deep in the CRUD layer. 4. Observability (tracing, metrics, structured logs beyond basic formatters) is locked behind the paid FastroAI template, meaning a production deployment needs you to wire up something like OpenTelemetry from scratch.