hasura/graphql-engine · error · ApolloError

empty fields in apollo federation keys defined for the objec

Error message

empty fields in apollo federation keys defined for the object type {object_type:}

What it means

This error comes from the Apollo Federation metadata resolution stage. An object type was configured with apolloFederation.keys entries where at least one key lists an empty set of fields (e.g. keys: [[''] ], an empty array item, or a key with no field names). Federation entity keys must name at least one field, so the resolver rejects the configuration.

Source

Thrown at v3/crates/metadata-resolve/src/stages/apollo/mod.rs:33

    apollo_federation_entity_enabled_types: BTreeMap<
        Qualified<CustomTypeName>,
        Option<Qualified<open_dds::models::ModelName>>,
    >,
) -> Result<(), ApolloError> {
    // To check if apollo federation entity keys are defined in object type but no model has
    // apollo_federation_entity_source set to true:
    //   - Throw an error if no model with apolloFederation.entitySource:true is found for the object type.
    for (object_type, model_name_list) in apollo_federation_entity_enabled_types {
        if model_name_list.is_none() {
            return Err(ApolloError::ApolloFederationEntitySourceNotDefined { object_type });
        }
    }
    Ok(())
}

#[derive(Debug, thiserror::Error)]
pub enum ApolloError {
    #[error("empty fields in apollo federation keys defined for the object type {object_type:}")]
    EmptyFieldsInApolloFederationConfigForObject {
        object_type: Qualified<CustomTypeName>,
    },

    #[error(
        "unknown field {field_name:} in apollo federation keys defined for the object type {object_type:}"
    )]
    UnknownFieldInApolloFederationKey {
        field_name: FieldName,
        object_type: Qualified<CustomTypeName>,
    },
    #[error(
        "empty keys in apollo federation configuration defined for the object type {object_type:}"
    )]
    EmptyKeysInApolloFederationConfigForObject {
        object_type: Qualified<CustomTypeName>,
    },
    #[error(

View on GitHub (pinned to 724551b9ae)

Solutions

  1. Find the apolloFederation.keys entry for the named object type and remove empty entries (empty strings or empty field arrays).
  2. Populate each key with at least one real field name that exists on the object type.
  3. If the key was a leftover placeholder, delete the whole keys entry or the apolloFederation block for that type.

Example fix

# before
object_type:
  apolloFederation:
    keys:
      - []          # empty key
# after
object_type:
  apolloFederation:
    keys:
      - [id]        # at least one field
Defensive patterns

Strategy: validation

Validate before calling

fn keys_valid(keys: &[Vec<String>]) -> bool {
    keys.iter().all(|k| !k.is_empty() && k.iter().all(|f| !f.trim().is_empty()))
}

Prevention

When it happens

Trigger: Adding apolloFederation configuration to a type in metadata where a keys entry contains an empty field list (empty string fields or an empty inner array of field names).

Common situations: Hand-editing YAML metadata and leaving a placeholder empty key; programmatic metadata generation that emits empty arrays for missing key fields; YAML parsing quirks where 'keys: - ""' produces an empty field.

Related errors


AI-assisted analysis of hasura/graphql-engine@724551b9ae (2026-08-28). Data as JSON: /api/errors/8367eb58df62fedb. Report an issue: GitHub.