Claude Code Plugins

Community-maintained marketplace

Feedback

ASGI server for Python web applications - Fast, production-ready server for async frameworks

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name uvicorn
description ASGI server for Python web applications - Fast, production-ready server for async frameworks
when_to_use - Running FastAPI, Starlette, Django Channels, or other ASGI applications - Development servers with hot reload - Production deployment with multiple workers - WebSocket applications - Async Python web services

Uvicorn Skill Guide

Uvicorn is a lightning-fast ASGI server implementation, using uvloop and httptools. It's the go-to server for modern Python async web frameworks.

Quick Start

Basic Usage

# Run ASGI app
uvicorn main:app

# With host/port
uvicorn main:app --host 0.0.0.0 --port 8000

# Development with auto-reload
uvicorn main:app --reload

Common Patterns

1. Simple ASGI Application

# main.py
async def app(scope, receive, send):
    assert scope['type'] == 'http'

    await send({
        'type': 'http.response.start',
        'status': 200,
        'headers': [(b'content-type', b'text/plain')],
    })
    await send({
        'type': 'http.response.body',
        'body': b'Hello, World!',
    })

2. FastAPI Application

# main.py
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
    return {"message": "Hello World"}
uvicorn main:app --reload

3. Application Factory Pattern

# main.py
from fastapi import FastAPI

def create_app():
    app = FastAPI()
    # Configure app
    return app

app = create_app()
uvicorn --factory main:create_app

4. Programmatic Server Control

import uvicorn

# Simple run
if __name__ == "__main__":
    uvicorn.run("main:app", host="0.0.0.0", port=8000, reload=True)
import asyncio
import uvicorn

async def main():
    config = uvicorn.Config("main:app", port=5000, log_level="info")
    server = uvicorn.Server(config)
    await server.serve()

if __name__ == "__main__":
    asyncio.run(main())

5. Configuration with Environment Variables

export UVICORN_HOST="0.0.0.0"
export UVICORN_PORT="8000"
export UVICORN_RELOAD="true"
uvicorn main:app

Production Deployment

Multi-Process Workers

# Use multiple worker processes
uvicorn main:app --workers 4

# Note: Can't use --reload with --workers

Gunicorn + Uvicorn

# Install gunicorn
pip install gunicorn

# Run with Gunicorn process manager
gunicorn main:app -w 4 -k uvicorn.workers.UvicornWorker

HTTPS/SSL

uvicorn main:app --ssl-keyfile=./key.pem --ssl-certfile=./cert.pem

Unix Socket

uvicorn main:app --uds /tmp/uvicorn.sock

Configuration Options

Common CLI Flags

uvicorn main:app \
  --host 0.0.0.0 \
  --port 8000 \
  --reload \
  --reload-dir ./app \
  --log-level info \
  --access-log \
  --workers 4

Key Settings

  • --host: Bind host (default: 127.0.0.1)
  • --port: Bind port (default: 8000)
  • --reload: Enable auto-reload for development
  • --workers: Number of worker processes
  • --log-level: Logging level (critical, error, warning, info, debug)
  • --access-log: Enable access logging
  • --factory: Treat app as application factory

Docker Integration

Dockerfile

FROM python:3.12-slim
WORKDIR /app

# Install dependencies
COPY requirements.txt .
RUN pip install -r requirements.txt

# Copy application
COPY . .

# Run with uvicorn
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

Docker Compose with Hot Reload

services:
  app:
    build: .
    ports:
      - "8000:8000"
    environment:
      - UVICORN_RELOAD=true
    volumes:
      - .:/app
    command: uvicorn main:app --host 0.0.0.0 --port 8000 --reload

Troubleshooting

Common Issues

  1. Port already in use: Change port or kill existing process
  2. Module not found: Check PYTHONPATH or use --app-dir
  3. Reload not working: Ensure watching correct directories with --reload-dir
  4. Worker count: Use --workers for production, avoid with --reload

Debug Mode

uvicorn main:app --reload --log-level debug

Health Checks

@app.get("/health")
async def health():
    return {"status": "healthy"}