// the find
strawberry-graphql/strawberry
A GraphQL library for Python that leverages type annotations 🍓
Strawberry is a Python GraphQL server library that uses dataclasses and type annotations as the schema definition. It's the cleanest way to write a GraphQL API in Python today — your Python types are your schema, no separate SDL file needed. Aimed at teams already using FastAPI, Django, or Starlette who want GraphQL without a separate schema language.
- Type annotations are the schema — you write normal Python dataclasses and Strawberry derives the GraphQL types, which means mypy can actually check your API contract end-to-end
- First-class async support throughout, including subscriptions over WebSocket, which puts it ahead of Graphene for async-heavy FastAPI or Starlette apps
- Built-in DataLoader support with a clean async API handles the N+1 problem without bolting on a separate package
- Apollo Federation support is real and actively tested via a dedicated federation-compatibility CI workflow, not an afterthought
- Still marked 'experimental' for Pydantic integration, which is the first thing most FastAPI users will reach for — the two-type dance (Pydantic model + Strawberry type) you're forced into is friction that Graphene avoided by just not caring about validation
- Breaking changes are frequent enough that there's a whole docs section just for them, with 16+ entries going back to 0.146.0 — upgrading a production schema requires reading changelogs carefully
- The codegen story (query-codegen to TypeScript/Python) is underdeveloped compared to the GraphQL Code Generator ecosystem; fine for greenfield but not a replacement for teams already invested in codegen tooling
- N+1 protection is opt-in via DataLoaders — there's no automatic batching or query analysis that warns you when you've missed one, so you can ship slow resolvers without the framework telling you