New to Claude Skills? Learn how to install them →

wshobson on GitHub

FastAPI Project Templates

Free

Kickstart your FastAPI applications with best practices.

by wshobson38.7k stars on wshobson/agents
1 views
Updated Jul 18, 2026
Get this skill

Free · Opens the source repo

What FastAPI Project Templates does

FastAPI Project Templates provides a structured approach to creating production-ready FastAPI applications. It emphasizes the use of asynchronous programming patterns, dependency injection, and comprehensive error handling, making it ideal for developers looking to build high-performance APIs. By following the recommended project structure, users can ensure their applications are organized and maintainable from the outset.

The skill outlines a clear project layout that separates concerns into distinct directories, such as API routes, core configurations, models, schemas, services, and repositories. This organization not only helps in maintaining clean code but also facilitates collaboration among team members. The inclusion of dependency injection simplifies the management of shared resources like database sessions and configurations, allowing for more modular and testable code.

Additionally, the skill covers the implementation of async patterns, which are crucial for building responsive applications. It guides users on how to effectively utilize async/await for route handlers, database operations, and background tasks. This focus on asynchronous programming is particularly beneficial for developers working with I/O-bound applications, where performance is critical.

For those interested in testing their FastAPI applications, the skill provides a comprehensive testing setup using pytest and async testing techniques. This ensures that users can validate their applications thoroughly before deployment, adhering to best practices in software development.

When to use it

Use this skill when starting new FastAPI projects or when implementing async REST APIs in Python.

When not to use it

This skill may not be suitable for small, simple applications where a full project structure is unnecessary.

What you can build with it

Starting a New FastAPI Project

Use this skill to quickly set up a new FastAPI project with a recommended structure and best practices.

Implementing Async APIs

Leverage the templates to build asynchronous REST APIs that handle I/O-bound operations efficiently.

Testing FastAPI Applications

Utilize the provided testing examples to ensure your FastAPI application is functioning correctly before deployment.

How to install FastAPI Project Templates

View source

1. Install with the skills CLI

npx skills add wshobson/agents/fastapi-templates --agent claude-code

2. Or install it manually

Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.

Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs

Inside SKILL.md

Written by wshobson

FastAPI Project Templates

Production-ready FastAPI project structures with async patterns, dependency injection, middleware, and best practices for building high-performance APIs.

When to Use This Skill

  • Starting new FastAPI projects from scratch
  • Implementing async REST APIs with Python
  • Building high-performance web services and microservices
  • Creating async applications with PostgreSQL, MongoDB
  • Setting up API projects with proper structure and testing

Core Concepts

1. Project Structure

Recommended Layout:

app/
├── api/                    # API routes
│   ├── v1/
│   │   ├── endpoints/
│   │   │   ├── users.py
│   │   │   ├── auth.py
│   │   │   └── items.py
│   │   └── router.py
│   └── dependencies.py     # Shared dependencies
├── core/                   # Core configuration
│   ├── config.py
│   ├── security.py
│   └── database.py
├── models/                 # Database models
│   ├── user.py
│   └── item.py
├── schemas/                # Pydantic schemas
│   ├── user.py
│   └── item.py
├── services/               # Business logic
│   ├── user_service.py
│   └── auth_service.py
├── repositories/           # Data access
│   ├── user_repository.py
│   └── item_repository.py
└── main.py                 # Application entry

2. Dependency Injection

FastAPI's built-in DI system using Depends:

  • Database session management
  • Authentication/authorization
  • Shared business logic
  • Configuration injection

3. Async Patterns

Proper async/await usage:

  • Async route handlers
  • Async database operations
  • Async background tasks
  • Async middleware

Detailed worked examples and patterns

Detailed sections (starting with ## Implementation Patterns) live in references/details.md. Read that file when the navigation summary above is insufficient.

Testing

# tests/conftest.py
import pytest
import asyncio
from httpx import AsyncClient
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
from sqlalchemy.orm import sessionmaker

from app.main import app
from app.core.database import get_db, Base

TEST_DATABASE_URL = "sqlite+aiosqlite:///:memory:"

@pytest.fixture(scope="session")
def event_loop():
    loop = asyncio.get_event_loop_policy().new_event_loop()
    yield loop
    loop.close()

@pytest.fixture
async def db_session():
    engine = create_async_engine(TEST_DATABASE_URL, echo=True)
    async with engine.begin() as conn:
        await conn.run_sync(Base.metadata.create_all)

    AsyncSessionLocal = sessionmaker(
        engine, class_=AsyncSession, expire_on_commit=False
    )

    async with AsyncSessionLocal() as session:
        yield session

@pytest.fixture
async def client(db_session):
    async def override_get_db():
        yield db_session

    app.dependency_overrides[get_db] = override_get_db

    async with AsyncClient(app=app, base_url="http://test") as client:
        yield client

# tests/test_users.py
import pytest

@pytest.mark.asyncio
async def test_create_user(client):
    response = await client.post(
        "/api/v1/users/",
        json={
            "email": "test@example.com",
            "password": "testpass123",
            "name": "Test User"
        }
    )
    assert response.status_code == 201
    data = response.json()
    assert data["email"] == "test@example.com"
    assert "id" in data

Frequently asked questions about FastAPI Project Templates

Similar skills