apollo-federation

Guide for authoring Apollo Federation subgraph schemas. Use this skill when: (1) creating new subgraph schemas for a federated supergraph, (2) defining or…

INSTALLATION
npx skills add https://github.com/apollographql/skills --skill apollo-federation
Run in your project or agent environment. Adjust flags if your CLI version differs.

SKILL.md

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. The version shown (v2.12) is

illustrative — check the Federation changelog

for currently supported versions before copying it verbatim.

A subgraph's @link version is a floor, not the composition version — see

Federation versions

for the full explanation.

Core Directives Quick Reference

DirectivePurposeExample
@keyDefine entity with unique keytype Product @key(fields: "id")
@shareableAllow multiple subgraphs to resolve fieldtype Position @shareable { x: Int! }
@externalReference field from another subgraphweight: Int @external
@requiresComputed field depending on external fieldsshippingCost: Int @requires(fields: "weight")
@providesConditionally resolve external field@provides(fields: "name")
@overrideMigrate field to this subgraph@override(from: "Products")
@inaccessibleHide from API schemainternalId: ID! @inaccessible
@interfaceObjectAdd fields to entity interfacetype Media @interfaceObject

Reference Files

Detailed documentation for specific topics:

  • Directives - All federation directives with syntax, examples, and rules
  • 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 @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
BrowserAct

Let your agent run on any real-world website

Bypass CAPTCHA & anti-bot for free. Start local, scale to cloud.

Explore BrowserAct Skills →

Stop writing automation&scrapers

Install the CLI. Run your first Skill in 30 seconds. Scale when you're ready.

Start free
free · no credit card