Docs
Launch GraphOS Studio

Federation version changelog

Understand changes between federation versions


This article describes notable changes and additions introduced in each minor version release of . Most of these changes involve additions or modifications to federation-specific directives.

For a comprehensive changelog for and its associated libraries, see GitHub.

  • To use a feature introduced in a particular federation version, make sure your 's @link targets that version (or higher):

    extend schema
    @link(url: "https://specs.apollo.dev/federation/v2.3",
    import: ["@key", "@shareable", "@interfaceObject"])

    The example above must target at least Federation v2.3, because the @interfaceObject was introduced in that version.

    ⚠️ Before you increment a subgraph's federation version, update your router and build pipeline! For details, see Updating your graph safely.

  • If you maintain a subgraph-compatible library, consult this article to stay current with recently added s. All of these directive definitions are also listed in the subgraph specification.

v2.6


First release

November 2023

Available in ?

Yes

Minimum version

1.35.0


Directive changes

TopicDescription
@policy

Introduced. Learn more.

directive @policy(policies: [[federation__Policy!]!]!) on
| FIELD_DEFINITION
| OBJECT
| INTERFACE
| SCALAR
| ENUM

Subgraph changes

TopicDescription

Policy

  • Custom representing an authorization policy. Used by new @policy .

v2.5


First release

July 2023

Available in ?

Yes

Minimum version

1.29.1


Directive changes

TopicDescription
@authenticated

Introduced. Learn more.

directive @authenticated on
FIELD_DEFINITION
| OBJECT
| INTERFACE
| SCALAR
| ENUM
@requiresScopes

Introduced. Learn more.

directive @requiresScopes(scopes: [[Scope!]!]!) on
FIELD_DEFINITION
| OBJECT
| INTERFACE
| SCALAR
| ENUM

Subgraph changes

TopicDescription

Scope

  • Custom representing a JWT scope. Used by new @requiresScopes .

v2.4


First release

March 2023

Available in ?

Yes

Minimum version

1.13.1


Subgraph changes

TopicDescription

s

  • now supports defining the Subscription type in s.
  • Use of s with a federated graph requires a compatible version of the . See details.

v2.3


First release

February 2023

Available in ?

Yes

Minimum version

1.10.2


Directive changes

NameDescription
@interfaceObject

Introduced. Learn more.

directive @interfaceObject on OBJECT
@key

Can now be applied to interface definitions to support entity interfaces.

(Previous versions of threw an error if @key was applied to an interface definition.)

v2.2


First release

November 2022

Available in ?

No

Minimum version

1.6.0


Directive changes

NameDescription
@shareable

Added repeatable to the definition.

directive @shareable repeatable on OBJECT | FIELD_DEFINITION

Additionally, now throws an error if @shareable is applied to s of an interface definition.

v2.1


First release

August 2022

Available in ?

Yes

Minimum version

1.0.0


Directive changes

NameDescription
@composeDirective

Introduced. Learn more.

directive @composeDirective(name: String!) repeatable on SCHEMA
@requires

The fields can now include s that themselves take arguments. Learn more.

(Functionality added in v2.1.2)

type Product @key(fields: "id") {
id: ID!
weight(units: String): Int! @external
shippingEstimate: Int! @requires(fields: "weight(units: \"KILOGRAMS\")")
}

v2.0


First release

April 2022

Available in ?

Yes

Minimum version

1.0.0


Directive changes

s "opt in" to Federation 2 features by applying the @link to the schema type, like so:

extend schema
@link(url: "https://specs.apollo.dev/federation/v2.0",
import: ["@key", "@shareable"])

The import list of this definition must include each federation-specific that the uses. In the example above, the schema uses @key and @shareable.

For details on these s as defined in Federation 2, see Federation-specific GraphQL directives.

NameDescription
@key

Added optional resolvable .

directive @key(
fields: FieldSet!,
resolvable: Boolean = true
) repeatable on OBJECT | INTERFACE
@shareable

Introduced.

directive @shareable on OBJECT | FIELD_DEFINITION
@inaccessible

Introduced.

directive @inaccessible on
| FIELD_DEFINITION
| OBJECT
| INTERFACE
| UNION
| ARGUMENT_DEFINITION
| SCALAR
| ENUM
| ENUM_VALUE
| INPUT_OBJECT
| INPUT_FIELD_DEFINITION
@override

Introduced.

directive @override(from: String!) on FIELD_DEFINITION

Introduced.

directive @link(
url: String,
as: String,
for: link__Purpose,
import: [link__Import]
) repeatable on SCHEMA
@extends, @external, @provides, @requires, @tag

No changes.

Subgraph changes

TopicDescription

Entities

  • Entities no longer originate in a . Instead, any number of subgraphs can define the same entity and contribute fields to it.
  • Multiple s can contribute the same to an entity, if that is marked as @shareable in every that defines it.
  • s no longer need to extend (or @extends) an entity whenever another already defines that entity.
  • Each can apply any number of @key s to an entity.
  • s must no longer apply the @external to their @key s.

Value types

  • To define a value type with shared s across multiple s, those shared fields must be marked as @shareable in every that defines them.
  • Value type s can differ across s (in certain ways). For details, see Differing shared fields.

Query and Mutation

  • More than one can define the same of the Query or Mutation type, if that is marked as @shareable in every that defines it.
  • s no longer need to apply the extend keyword (or the @extends ) to the Query and Mutation types.

v1.1

Directive changes

NameDescription
@tag

Introduced.

directive @tag(name: String!) repeatable on
| FIELD_DEFINITION
| INTERFACE
| OBJECT
| UNION

v1.0

Directive changes

For details on these s as defined in Federation 1, see the Federation 1 subgraph spec.

NameDescription
@key

Introduced.

directive @key(fields: _FieldSet!) repeatable on OBJECT | INTERFACE
@external

Introduced.

directive @external on FIELD_DEFINITION
@requires

Introduced.

directive @requires(fields: _FieldSet!) on FIELD_DEFINITION
@provides

Introduced.

directive @provides(fields: _FieldSet!) on FIELD_DEFINITION
@extends

Introduced.

directive @extends on OBJECT | INTERFACE

Subgraph changes

TopicDescription

Entities

  • Each entity originates in exactly one and can be extended in other s.
  • An entity's originating must apply at least one @key to the entity definition.
  • An extending must use the extend keyword (or the @extends ) when defining another 's entity.
  • An extending must apply exactly one @key to any entity it extends. The fields of that @key must match a @key that's defined by the entity's originating .
  • An extending must apply the @external to all @key s of an entity it extends.
  • If an entity is defined in more than one , it must be marked as @external in all but one .

Value types

  • Each that defines a value type must define that value type identically.

Query and Mutation

  • More than one cannot define the same of the Query or Mutation type.
  • Every must apply the extend keyword (or the @extends ) to the Query and Mutation types.
Previous
Backward compatibility
Edit on GitHubEditForumsDiscord