Skip to main content
skill CX Codex

apollo-federation — Claude Code skill for subgraph schemas

Guides an agent through Apollo Federation subgraph schemas: directives, entities with @key, composition errors. Handy when a supergraph spans several GraphQL services.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add apollographql/skills --skill apollo-federation -a claude-code
Open on GitHub

What apollo-federation does

The skill walks the agent through Federation 2.x syntax. Every subgraph opts in with @link, naming the spec URL and the directives it imports, and the agent helps pick which ones your schema actually needs. The reference covers @key, @shareable, @external, @requires, @provides, @override, @inaccessible and @interfaceObject, each with examples.

Separate files hold multi-subgraph patterns and composition rules with error codes. There are recipes for an entity with a single key field, adding fields to an entity owned elsewhere, computed fields via @requires, shared value types via @shareable, and an entity stub with resolvable: false.

The skill shells out to rover, so composition checks fail without that CLI installed. It points you at rover supergraph compose for a local run and rover subgraph check against a production supergraph. The v2.12 version in the example is illustrative — check the supported versions before copying it, or composition may not go through.

What it helps with

  • scaffold a new subgraph schema for a federated supergraph
  • define an entity with a unique key via @key
  • let several subgraphs resolve the same field with @shareable
  • compute a field from external data using @requires
  • track down a composition error and its code

Example prompts for the agent

  • add a Product entity to this subgraph with a key on id
  • why does composition fail when @shareable is set in two subgraphs
  • move the price field into this subgraph with @override

How to install apollo-federation

1Skills CLI (Vercel)

npx skills add apollographql/skills --skill apollo-federation -a claude-code

2Manually: put the files in place

~/.claude/skills/apollo-federation/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/apollo-federation/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about apollo-federation

How do I install apollo-federation in Claude?

Run npx skills add apollographql/skills --skill apollo-federation -a claude-code. The skill lands in ~/.claude/skills/apollo-federation/SKILL.md.

What does apollo-federation do?

It guides schema authoring for Federation 2.x subgraphs: the @link opt-in, federation directives, multi-subgraph patterns, and debugging composition errors.

What do I need for the skill to work?

The rover CLI, since rover supergraph compose and rover subgraph check run through it. Schemas work with any Federation 2.x compatible library, such as Apollo Server or GraphQL Yoga.

Source text

SKILL.md · MIT
---
name: apollo-federation
description: >
  Guide for authoring Apollo Federation subgraph schemas. Use this skill when:
  (1) creating new subgraph schemas for a federated supergraph,
  (2) defining or modifying entities with @key,
  (3) sharing types/fields across subgraphs with @shareable,
  (4) working with federation directives (@external, @requires, @provides, @override, @inaccessible),
  (5) troubleshooting composition errors,
  (6) any task involving federation schema design patterns.
license: MIT
compatibility: Works with any Federation 2.x compatible subgraph library (Apollo Server, GraphQL Yoga, etc.)
metadata:
  author: apollographql
  version: "1.0.2"
allowed-tools: Bash(rover:*) Read Write Edit Glob Grep
---

# 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`:

```graphql
extend schema
  @link(url: "https://specs.apollo.dev/federation/v2.12",
        import: ["@key", "@shareable", "@external", "@requires", "@provides"])
```

Import only the directives your subgraph uses. The version shown (`v2.12`) is
illustrative — check the [Federation changelog](https://www.apollographql.com/docs/graphos/schema-design/federated-schemas/reference/versions)
for currently supported versions before copying it verbatim.

> A subgraph's `@link` version is a floor, not the composition version — see
> [Federation versions](references/composition.md#federation-versions-floor-vs-composition)
> for the full explanation.

## Core Directives Quick Reference

| Directive | Purpose | Example |
|-----------|---------|---------|
| `@key` | Define entity with unique key | `type Product @key(fields: "id")` |
| `@shareable` | Allow multiple subgraphs to resolve field | `type Position @shareable { x: Int! }` |
| `@external` | Reference field from another subgraph | `weight: Int @external` |
| `@requires` | Computed field depending on external fields | `shippingCost: Int @requires(fields: "weight")` |
| `@provides` | Conditionally resolve external field | `@provides(fields: "name")` |
| `@override` | Migrate field to this subgraph | `@override(from: "Products")` |
| `@inaccessible` | Hide from API schema | `internalId: ID! @inaccessible` |
| `@interfaceObject` | Add fields to entity interface | `type Media @interfaceObject` |

## Reference Files

Detailed documentation for specific topics:

- [Directives](references/directives.md) - All federation directives with syntax, examples, and rules
- [Schema Patterns](references/schema-patterns.md) - Multi-subgraph patterns and recipes
- [Composition](references/composition.md) - Composition rules, error codes, and debugging

## Key Patterns

### Entity Definition

```graphql
type Product @key(fields: "id") {
  id: ID!
  name: String!
  price: Int
}
```

### Entity Contributions Across Subgraphs

```graphql
# 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

```graphql
type Product @key(fields: "id") {
  id: ID!
  size: Int @external
  weight: Int @external
  shippingEstimate: String @requires(fields: "size weight")
}
```

### Value Types with @shareable

```graphql
type Money @shareable {
  amount: Int!
  currency: String!
}
```

### Entity Stub (Reference Without Contributing)

```graphql
type Product @key(fields: "id", resolvable: false) {
  id: ID!
}
```

## Ground Rules

- ALWAYS use Federation 2.x syntax with `@link` directive
- ALWAYS import only the directives your subgraph uses
- NEVER use `@shareable` without ensuring all subgraphs return identical values for that field
- PREFER `@key` with single ID field for simple entity identification
- USE `rover supergraph compose` to validate composition locally
- USE `rover subgraph check` to validate against production supergraph

© apollographql · MIT · apollographql/skills

Similar skills

Everything for Backend and APIs →

From the same set11

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor