99designs/gqlgen

Support include's in graphql files.

Open

#4,205 opened on Jun 5, 2026

View on GitHub
 (4 comments) (1 reaction) (0 assignees)Go (1,250 forks)auto 404
help wantedproposal

Repository metrics

Stars
 (10,737 stars)
PR merge metrics
 (PR metrics pending)

Description

We use the schema: directive of gqlgen.yml extensively to load shared types and directives. In fact we've used it so extensively that we now have an entire dependency tree. Example:

shared_directive.graphql:

directive @product(
    name: String!
) on ENUM_VALUE

shared_type.graphql:

enum FeedbackType {
    ANSWER,
    COMMENT @product(name: "myproduct")
}

gqlgen.yml:

schema:
- shared_directive.graphql
- shared_type.graphql
- schema.graphql

We only use @product in shared_type.graphql, not in schema.graphql; we need to remember to add shared_directive.graphql in gqlgen.yml even though gqlgen.yml does not use shared_directive.graphql directly. This is brittle and hard for devs to fiagure out what actually needs to be included in the schema: directive.

The ask: Add support for an #include directive in .graphql files. (Or #gqlgen_include, or whatever name makes sense.) This is a comment to most graphql parsers, but gqlgen reads it specially and uses it as an alternate way of loading a schema, as if it had been suggested in schema.graphql. The include is relative to the directory where the #include is found. Then we could do this:

---  shared_type.graphql:
#include "shared_directive.graphql"   # for @product

enum FeedbackType {
    ANSWER,
    COMMENT @product(name: "myproduct")
}

--- gqlgen.yml:
schema:
- shared_type.graphql
- schema.graphql

Contributor guide