Skip to content


To enable support for GraphQL Federation, simply set the smallrye.graphql.federation.enabled config key to true.

You can add the Federation directives by using the equivalent Java annotation, e.g. to extend a Product entity with a price field, you can write a class:

package org.example.price;

import org.eclipse.microprofile.graphql.Id;

import io.smallrye.graphql.api.federation.Extends;
import io.smallrye.graphql.api.federation.Key;

@Extends @Key(fields = "id")
public class Product {
    private String id;

    @Description("The price in cent")
    private Integer price;

    // getters and setters omitted

And a normal query method that takes the key fields as a parameter and returns the requested type:

package org.example.price;

import org.eclipse.microprofile.graphql.GraphQLApi;
import org.eclipse.microprofile.graphql.Id;
import org.eclipse.microprofile.graphql.Query;

public class Prices {
    public Product product(@Id String id) {
        return ...;

The GraphQL Schema then contains:

type Product @extends @key(fields : ["id"]) {
    id: ID
    price: Int

union _Entity = Product

type Query {
    _entities(representations: [_Any!]!): [_Entity]!
    _service: _Service!
    product(id: ID): Product