Skills apollo-federation
install
source · Clone the upstream repo
git clone https://github.com/apollographql/skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/apollographql/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/apollo-federation" ~/.claude/skills/apollographql-skills-apollo-federation && rm -rf "$T"
manifest:
skills/apollo-federation/SKILL.mdsource content
Apollo Federation Schema Authoring
Apollo Federation enables composing multiple GraphQL APIs (subgraphs) into a unified supergraph.
Federation 2 Schema Setup
Every Federation 2 subgraph must opt-in via
@link:
extend schema @link(url: "https://specs.apollo.dev/federation/v2.12", import: ["@key", "@shareable", "@external", "@requires", "@provides"])
Import only the directives your subgraph uses.
Core Directives Quick Reference
| Directive | Purpose | Example |
|---|---|---|
| Define entity with unique key | |
| Allow multiple subgraphs to resolve field | |
| Reference field from another subgraph | |
| Computed field depending on external fields | |
| Conditionally resolve external field | |
| Migrate field to this subgraph | |
| Hide from API schema | |
| Add fields to entity interface | |
Reference Files
Detailed documentation for specific topics:
- Directives - All federation directives with syntax, examples, and rules
- Schema Patterns - Multi-subgraph patterns and recipes
- Composition - Composition rules, error codes, and debugging
Key Patterns
Entity Definition
type Product @key(fields: "id") { id: ID! name: String! price: Int }
Entity Contributions Across Subgraphs
# Products subgraph type Product @key(fields: "id") { id: ID! name: String! price: Int } # Reviews subgraph type Product @key(fields: "id") { id: ID! reviews: [Review!]! averageRating: Float }
Computed Fields with @requires
type Product @key(fields: "id") { id: ID! size: Int @external weight: Int @external shippingEstimate: String @requires(fields: "size weight") }
Value Types with @shareable
type Money @shareable { amount: Int! currency: String! }
Entity Stub (Reference Without Contributing)
type Product @key(fields: "id", resolvable: false) { id: ID! }
Ground Rules
- ALWAYS use Federation 2.x syntax with
directive@link - ALWAYS import only the directives your subgraph uses
- NEVER use
without ensuring all subgraphs return identical values for that field@shareable - PREFER
with single ID field for simple entity identification@key - USE
to validate composition locallyrover supergraph compose - USE
to validate against production supergraphrover subgraph check