Subgraph-compatible server libraries
The following open-source GraphQL server libraries support acting as a subgraph in a federated graph, and their support is tracked in Apollo's subgraph compatibility repository. Check out the repository for details on the compatibility tests listed in the table below.
| Language | Framework | _service | @key (single) | @key (multi) | @key (composite) | @requires | @provides | ftv1 |
|---|---|---|---|---|---|---|---|---|
| AppSync | aws-appsync | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
| C# (.NET) | graphql-dotnet | ✔️ | ✔️ | ❌ | ❌ | ❌ | ❌ | ❌ |
| C# (.NET) | hotchocolate | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
| Elixir | absinthe_federation | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ (in progress) |
| Go | gqlgen | ✔️ | ✔️* | ✔️* | ❌ | ✔️ | ✔️ | ❌ |
| JavaScript | apollo-server | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| JavaScript | express-graphql | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
| JavaScript | Mercurius | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
| Java | federation-jvm | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Java / Kotlin | dgs | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Kotlin | graphql-kotlin | ✔️ | ✔️* | ✔️* | ✔️* | ✔️ | ✔️ | ✔️ |
| PHP | apollo-federation-php | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
| PHP | Lighthouse (Laravel) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
| Python | graphene | ✔️ | ✔️ | ✔️ | ❌ | ✔️ | ✔️ | ❌ |
| Python | ariadne | ✔️ | ✔️* | ✔️* | ✔️* | ✔️ | ✔️ | ❌ |
| Python | strawberry-graphql | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
| Ruby | apollo-federation-ruby | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
| Rust | async-graphql | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ |
| Scala | caliban | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
* Library does not support multiple @key definitions, but all types of @key definitions are supported
To add a library to this list, feel free to open an issue or check out the Apollo Federation Library Maintainers Implementation Guide to learn how to submit a PR for your library!