FastAPI Best Practices

February 20, 2026 ยท View on GitHub

License: MIT Skills

FastAPI done right. Async/sync endpoint selection, Depends() for dependency injection, Pydantic v2 models, lifespan context managers, BackgroundTasks, APIRouter, Annotated types, and production project structure.

AI coding assistants make every endpoint async, use global variables instead of Depends(), generate Pydantic v1 decorators, and put all routes in a single file. This plugin enforces the patterns that make FastAPI production-ready.

Install

Cursor / Claude Code / Windsurf

npx skills add ofershap/fastapi-best-practices

Or copy skills/ into your .cursor/skills/ or .claude/skills/ directory.

What's Included

TypeNameDescription
Skillfastapi-best-practices10 rules for async patterns, Depends(), Pydantic v2, lifespan, APIRouter, and more
Rulebest-practicesAlways-on behavioral rule that enforces current FastAPI patterns
Command/auditScan your codebase for FastAPI anti-patterns

What Agents Get Wrong

What the agent writesWhat FastAPI best practice is
async def for everythingasync def for I/O, def for CPU-bound
Global db variableDepends(get_db) dependency injection
@validator, class Configfield_validator, ConfigDict (Pydantic v2)
@app.on_event("startup")lifespan context manager
All routes in main.pyAPIRouter with organized modules
asyncio.create_task()BackgroundTasks for fire-and-forget work
return {"error": "not found"}response_model + status.HTTP_404_NOT_FOUND

If this helped your workflow, a star helps others find it.

Author

Made by ofershap

LinkedIn GitHub

License

MIT