{"id":199,"library":"fastapi","title":"FastAPI","description":"FastAPI is a modern, fast (high-performance) web framework for building APIs with Python 3.8+ based on standard Python type hints. It leverages Starlette for the web parts and Pydantic for data validation and serialization. It features automatic OpenAPI documentation (Swagger UI, ReDoc). The current version is 0.136.0, and it maintains a frequent release cadence, often with minor updates several times a month.","status":"active","version":"0.136.0","language":"python","source_language":"en","source_url":"https://github.com/fastapi/fastapi","tags":["web framework","api","async","pydantic","starlette","openapi","swagger","asyncio"],"install":[{"cmd":"pip install \"fastapi[standard]\" uvicorn","lang":"bash","label":"Basic Installation with Recommended Extras and Uvicorn"},{"cmd":"pip install fastapi uvicorn[standard]","lang":"bash","label":"Installation for Production (uvicorn[standard] includes httptools and websockets)"}],"dependencies":[{"reason":"Core data validation and settings management. FastAPI >= 0.100.0 requires Pydantic V2 (>=2.9.0 as of 0.135.2).","package":"pydantic","optional":false},{"reason":"Underlying ASGI framework. FastAPI >= 0.133.0 supports Starlette 1.0.0+.","package":"starlette","optional":false},{"reason":"ASGI server to run the application (not a direct dependency but essential for execution).","package":"uvicorn","optional":false},{"reason":"Required for parsing form data with `Request` objects.","package":"python-multipart","optional":true},{"reason":"Required for validating email fields in Pydantic models.","package":"email-validator","optional":true},{"reason":"Required for JWT-based security.","package":"python-jose","optional":true},{"reason":"Required for password hashing.","package":"passlib[bcrypt]","optional":true}],"imports":[{"symbol":"FastAPI","correct":"from fastapi import FastAPI"},{"symbol":"Depends","correct":"from fastapi import Depends"},{"symbol":"HTTPException","correct":"from fastapi import HTTPException"},{"note":"While `starlette.status` works, `fastapi.status` is the officially exposed and preferred import path.","wrong":"from starlette import status","symbol":"status","correct":"from fastapi import status"},{"symbol":"Body","correct":"from fastapi import Body"},{"symbol":"Query","correct":"from fastapi import Query"},{"symbol":"Path","correct":"from fastapi import Path"},{"note":"FastAPI re-exports common Starlette components for convenience; using `fastapi.Response` is generally preferred.","wrong":"from starlette.responses import Response","symbol":"Response","correct":"from fastapi import Response"}],"quickstart":{"code":"import uvicorn\nfrom fastapi import FastAPI\n\napp = FastAPI()\n\n@app.get(\"/\")\nasync def read_root():\n    return {\"Hello\": \"World\"}\n\n@app.get(\"/items/{item_id}\")\nasync def read_item(item_id: int, q: str | None = None):\n    return {\"item_id\": item_id, \"q\": q}\n\n# To run this app:\n# 1. Save it as main.py\n# 2. Run from your terminal: uvicorn main:app --reload\n# Then open http://127.0.0.1:8000/ or http://127.0.0.1:8000/docs","lang":"python","description":"This quickstart demonstrates a basic FastAPI application with two GET endpoints. It defines a root endpoint and an endpoint with a path parameter and an optional query parameter. The accompanying `uvicorn` command shows how to run the application for development."},"warnings":[{"fix":"Consult the official Pydantic V2 migration guide and FastAPI's Pydantic V2 migration notes. Downgrade Pydantic to `<2.0.0` if staying on an older FastAPI, or refactor models and code for Pydantic V2.","message":"FastAPI version 0.100.0 and above officially support Pydantic V2. Upgrading FastAPI may automatically upgrade Pydantic from V1 to V2, leading to significant breaking changes in model syntax, validators, and error handling. This is a major compatibility consideration.","severity":"breaking","affected_versions":"0.100.0 onwards (when upgrading from an older FastAPI + Pydantic V1 setup)"},{"fix":"Run blocking operations in a separate thread pool using `anyio.to_thread.run_sync()` or `loop.run_in_executor()`, or use async-native libraries (e.g., `asyncpg`, `databases`). For CPU-bound tasks, consider external workers.","message":"Using blocking I/O operations (e.g., synchronous database calls, heavy computations) directly within `async def` FastAPI path operations can block the entire event loop, severely degrading performance and concurrency.","severity":"gotcha","affected_versions":"All versions"},{"fix":"Install `uvicorn` and other necessary optional dependencies. For a common setup, `pip install \"fastapi[standard]\" uvicorn` is recommended, as `[standard]` includes `python-multipart` and others.","message":"To run FastAPI applications, an ASGI server like Uvicorn is required. For certain features, such as parsing form data, optional dependencies like `python-multipart` are also needed. Missing these will lead to runtime errors or incomplete functionality.","severity":"gotcha","affected_versions":"All versions"},{"fix":"Remove all usage of `@app.vibe()` from your application code. This feature was temporary and is no longer supported.","message":"The experimental `@app.vibe()` decorator, briefly introduced in v0.135.3 for 'vibe coding,' was removed just one patch version later in v0.135.4. Applications that adopted this feature during its short lifespan will fail to start on newer versions.","severity":"deprecated","affected_versions":"0.135.4 and above (for code written against 0.135.3)"}],"env_vars":null,"last_verified":"2026-05-12T10:04:00.402Z","next_check":"2026-07-16T00:00:00.000Z","problems":[{"fix":"Install Uvicorn using pip: `pip install \"uvicorn[standard]\"`","cause":"The Uvicorn ASGI server, necessary to run FastAPI applications, is not installed.","error":"ModuleNotFoundError: No module named 'uvicorn'"},{"fix":"Ensure your Pydantic version aligns with your FastAPI version. If using FastAPI >= 0.100.0, upgrade Pydantic to V2 (`pip install \"pydantic>=2\"`) and migrate your models. If staying on an older FastAPI, explicitly pin Pydantic to V1 (`pip install \"pydantic<2\"`).","cause":"This error or similar (e.g., `NameError: name 'Field' is not defined` when using `pydantic.Field` for V2) often indicates a clash between FastAPI's expected Pydantic version (V2 for FastAPI >= 0.100.0) and an older Pydantic V1 syntax in your models, or vice-versa.","error":"TypeError: 'PydanticV1BaseModel' object is not subscriptable"},{"fix":"Review the client's request payload and the Pydantic model definition for the route. Ensure data types, required fields, and any constraints (e.g., min_length, regex) match. The `detail` field in the error response provides specific validation errors.","cause":"The client sent data that does not match the Pydantic model defined in the path operation function's parameters, or fails its validation rules.","error":"fastapi.exceptions.HTTPException: 422 Unprocessable Entity"},{"fix":"Ensure your FastAPI application is always run with an ASGI server like Uvicorn, which properly manages the event loop. If calling async functions outside a path operation, ensure it's within an `async def` function that is itself awaited, or use `asyncio.run()` for top-level execution where appropriate.","cause":"Attempting to run asynchronous code (e.g., an `async def` function or `await`) in a synchronous context, or without an active `asyncio` event loop. This often happens when calling async FastAPI components from a non-async part of the code.","error":"RuntimeError: There is no current event loop in this thread."},{"fix":"Ensure your API request body includes all required fields with the correct data types, matching your Pydantic models.","cause":"This is a Pydantic validation error indicating that a required field (e.g., 'name') was not provided in the request body, or its type was incorrect.","error":"{'detail': [{'loc': ['body', 'name'], 'msg': 'field required', 'type': 'value_error.missing'}]}"}],"ecosystem":"pypi","meta_description":null,"install_score":100,"install_tag":"verified","quickstart_score":70,"quickstart_tag":"verified","pypi_latest":null,"install_checks":{"last_tested":"2026-05-12","tag":"verified","tag_description":"installs cleanly on critical runtimes, fast import, recently tested","results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"all","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.55,"mem_mb":16.6,"disk_size":"80.3M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"standard","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.57,"mem_mb":16.6,"disk_size":"80.2M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"standard","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.57,"mem_mb":16.7,"disk_size":"80.4M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.14,"mem_mb":16,"disk_size":"31.8M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"standard","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.15,"mem_mb":16,"disk_size":"49.5M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"all","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.16,"mem_mb":16.6,"disk_size":"83M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"standard","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.17,"mem_mb":16.6,"disk_size":"83M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"standard","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.16,"mem_mb":16.7,"disk_size":"83M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.84,"mem_mb":16,"disk_size":"31M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"standard","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.89,"mem_mb":16,"disk_size":"53M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"all","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":2.56,"mem_mb":17.9,"disk_size":"88.1M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"standard","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":2.54,"mem_mb":17.9,"disk_size":"87.9M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"standard","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":2.31,"mem_mb":17.9,"disk_size":"88.2M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.48,"mem_mb":17.2,"disk_size":"34.8M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"standard","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.35,"mem_mb":17.3,"disk_size":"53.7M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"all","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":2,"mem_mb":17.9,"disk_size":"91M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"standard","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.97,"mem_mb":17.9,"disk_size":"91M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"standard","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":2.06,"mem_mb":17.9,"disk_size":"91M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.15,"mem_mb":17.2,"disk_size":"34M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"standard","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.21,"mem_mb":17.3,"disk_size":"57M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"all","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":2.09,"mem_mb":17.7,"disk_size":"80.7M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"standard","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":2.11,"mem_mb":17.7,"disk_size":"80.6M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"standard","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.98,"mem_mb":17.7,"disk_size":"80.8M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.41,"mem_mb":17,"disk_size":"26.3M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"standard","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.35,"mem_mb":17.1,"disk_size":"47.2M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"all","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":2.07,"mem_mb":17.7,"disk_size":"85M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"standard","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":2.26,"mem_mb":17.7,"disk_size":"84M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"standard","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":2.09,"mem_mb":17.7,"disk_size":"85M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.48,"mem_mb":17,"disk_size":"26M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"standard","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.38,"mem_mb":17.1,"disk_size":"52M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"all","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.7,"mem_mb":16.8,"disk_size":"80.3M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"standard","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.72,"mem_mb":16.8,"disk_size":"80.2M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"standard","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.62,"mem_mb":16.8,"disk_size":"80.5M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.05,"mem_mb":16.1,"disk_size":"26.0M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"standard","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.99,"mem_mb":16.1,"disk_size":"46.8M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"all","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.79,"mem_mb":16.8,"disk_size":"84M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"standard","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.8,"mem_mb":16.8,"disk_size":"84M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"standard","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.71,"mem_mb":16.8,"disk_size":"84M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.07,"mem_mb":16.1,"disk_size":"26M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"standard","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.01,"mem_mb":16.1,"disk_size":"51M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"all","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.53,"mem_mb":16.7,"disk_size":"83.0M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"standard","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.51,"mem_mb":16.6,"disk_size":"78.8M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"standard","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.54,"mem_mb":16.5,"disk_size":"78.9M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.09,"mem_mb":16,"disk_size":"31.1M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"standard","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.11,"mem_mb":16,"disk_size":"48.6M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"all","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.32,"mem_mb":16.7,"disk_size":"82M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"standard","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.32,"mem_mb":16.6,"disk_size":"81M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"standard","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.39,"mem_mb":16.5,"disk_size":"82M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.97,"mem_mb":16,"disk_size":"31M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"standard","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.09,"mem_mb":16,"disk_size":"52M"}]},"quickstart_checks":{"last_tested":"2026-04-23","tag":"verified","tag_description":"quickstart runs on critical runtimes, recently tested","results":[{"runtime":"python:3.10-alpine","exit_code":0},{"runtime":"python:3.10-slim","exit_code":0},{"runtime":"python:3.11-alpine","exit_code":0},{"runtime":"python:3.11-slim","exit_code":0},{"runtime":"python:3.12-alpine","exit_code":0},{"runtime":"python:3.12-slim","exit_code":0},{"runtime":"python:3.13-alpine","exit_code":0},{"runtime":"python:3.13-slim","exit_code":0},{"runtime":"python:3.9-alpine","exit_code":1},{"runtime":"python:3.9-slim","exit_code":1}]}}