Apollo Federation Changelog
Understand changes between Apollo Federation versions
This article describes notable changes and additions introduced in each minor version release of Apollo Federation. Most of these changes involve additions or modifications to federation-specific directives.
For a comprehensive changelog for Apollo Federation and its associated libraries, see GitHub.
To use a feature introduced in a particular federation version, make sure your subgraph schema's
@link
directive targets that version (or higher):GraphQLextend 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
directive was introduced in that version.noteBefore 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 directives. All of these directive definitions are also listed in the subgraph specification.
v2.10
First release | Available in GraphOS? | Minimum router version |
---|---|---|
February 2025 | Yes | 2.0.0 |
Directive changes
@connect
Introduced. Learn more.
directive @connect(
source: String
http: ConnectHTTP!
selection: JSONSelection!
entity: Boolean
) repeatable on FIELD_DEFINITION;
@source
Introduced. Learn more.
directive @source(
name: String!
http: SourceHTTP!
) repeatable on SCHEMA;
v2.9
First release | Available in GraphOS? | Minimum router version |
---|---|---|
August 2024 | Yes | 1.53.0 |
Directive changes
@cost
Introduced. Learn more.
directive @cost(weight: Int!) on
| ARGUMENT_DEFINITION
| ENUM
| FIELD_DEFINITION
| INPUT_FIELD_DEFINITION
| OBJECT
| SCALAR;
@listSize
Introduced. Learn more.
directive @listSize(
assumedSize: Int
slicingArguments: [String!]
sizedFields: [String!]
requireOneSlicingArgument: Boolean = true
)
on FIELD_DEFINITION;
v2.8
First release | Available in GraphOS? | Minimum router version |
---|---|---|
May 2024 | Yes | 1.48.0 |
Directive changes
@context
Introduced. Learn more.
directive @context(name: String!) on OBJECT | INTERFACE | UNION;
@fromContext
Introduced. Learn more.
scalar ContextFieldValue;
directive @fromContext(field: ContextFieldValue) on ARGUMENT_DEFINITION;
v2.7
First release | Available in GraphOS? | Minimum router version |
---|---|---|
February 2024 | Yes | 1.39.0 |
Directive changes
Progressive @override
Added progressive @override
. Learn more.
directive @override(from: String!, label: String) on FIELD_DEFINITION
v2.6
First release | Available in GraphOS? | Minimum router version |
---|---|---|
November 2023 | Yes | 1.35.0 |
Directive changes
@policy
Introduced. Learn more.
directive @policy(policies: [[federation__Policy!]!]!) on
| FIELD_DEFINITION
| OBJECT
| INTERFACE
| SCALAR
| ENUM
Subgraph changes
Topic | Description |
---|---|
Policy |
|
v2.5
First release | Available in GraphOS? | Minimum router version |
---|---|---|
July 2023 | Yes | 1.29.1 |
Directive changes
@authenticated
Introduced. Learn more.
directive @authenticated on
FIELD_DEFINITION
| OBJECT
| INTERFACE
| SCALAR
| ENUM
@requiresScopes
Introduced. Learn more.
directive @requiresScopes(scopes: [[federation__Scope!]!]!) on
FIELD_DEFINITION
| OBJECT
| INTERFACE
| SCALAR
| ENUM
Subgraph changes
Topic | Description |
---|---|
Scope |
|
v2.4
First release | Available in GraphOS? | Minimum router version |
---|---|---|
March 2023 | Yes | 1.13.1 |
Subgraph changes
Topic | Description |
---|---|
Subscriptions |
|
v2.3
First release | Available in GraphOS? | Minimum router version |
---|---|---|
February 2023 | Yes | 1.10.2 |
Directive changes
@interfaceObject
Introduced. Learn more.
directive @interfaceObject on OBJECT
@key
Can now be applied to interface definitions to support entity interfaces.
(Previous versions of composition threw an error if @key
was applied to an interface definition.)
v2.2
First release | Available in GraphOS? | Minimum router version |
---|---|---|
November 2022 | No | 1.6.0 |
Directive changes
@shareable
Added repeatable
to the directive definition.
directive @shareable repeatable on OBJECT | FIELD_DEFINITION
Additionally, composition now throws an error if @shareable
is applied to fields of an interface
definition.
v2.1
First release | Available in GraphOS? | Minimum router version |
---|---|---|
August 2022 | Yes | 1.0.0 |
Directive changes
@composeDirective
Introduced. Learn more.
directive @composeDirective(name: String!) repeatable on SCHEMA
@requires
The fields
argument can now include fields 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 | Available in GraphOS? | Minimum router version |
---|---|---|
April 2022 | Yes | 1.0.0 |
Directive changes
Subgraph schemas "opt in" to Federation 2 features by applying the @link
directive 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 directive that the subgraph schema uses. In the example above, the schema uses @key
and @shareable
.
For details on these directives as defined in Federation 2, see Federation-specific GraphQL directives.
@key
Added optional resolvable
argument.
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
@link
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
Topic | Description |
---|---|
Entities |
|
Value types |
|
Query and Mutation |
|
v1.1
Directive changes
@tag
Introduced.
directive @tag(name: String!) repeatable on
| FIELD_DEFINITION
| INTERFACE
| OBJECT
| UNION
v1.0
Directive changes
For details on these directives as defined in Federation 1, see the Federation 1 subgraph spec.
@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
Topic | Description |
---|---|
Entities |
|
Value types |
|
Query and Mutation |
|