The Guild LogoThe Guild Monogram

GraphQL Code Generator

Generate anything from GraphQL schema / operations!

Contact Us


yarn add @graphql-codegen/kotlin

The kotlin plugin generates Kotlin classes for Enums and Input types.

You can use this plugin to generate Java enums based on your GraphQL schema, and it also generates a type-safe Kotlin transformer for GraphQL input types.

Prepare your environment#

To get started with these plugins and preset, make sure you have the following installed:

  • NodeJS (10 or later)
  • NPM or Yarn

Run the following in your Android project:

yarn init --yes yarn add @graphql-codegen/cli graphql @graphql-codegen/kotlin

Then, create codegen.yml with the following configuration:

schema: POINT_TO_YOUR_SCHEMA documents: POINT_TO_YOUR_GRAPHQL_OPERATIONS generates: ./app/src/Types.kt: plugins: - kotlin

Also, make sure to add node_modules to your .gitignore file.

Config API Reference#


type: string

Customize the Java package name. The default package name will be generated according to the output file path.

Usage Examples#

generates: src/main/kotlin/my-org/my-app/Resolvers.kt: plugins: - kotlin config: package:


type: EnumValuesMap

Overrides the default value of enum values declared in your GraphQL schema.


type: string default: Iterable

Allow you to customize the list type

Usage Examples#

generates: src/main/kotlin/my-org/my-app/Types.kt: plugins: - kotlin config: listType: Map


type: boolean default: false

Allow you to enable generation for the types

Usage Examples#

generates: src/main/kotlin/my-org/my-app/Types.kt: plugins: - kotlin config: withTypes: true


type: boolean default: false

Allow you to omit JvmStatic annotation


type: boolean default: false

Makes scalars strict.

If scalars are found in the schema that are not defined in scalars an error will be thrown during codegen.

Usage Examples#

config: strictScalars: true


type: string default: any

Allows you to override the type that unknown scalars will have.

Usage Examples#

config: defaultScalarType: unknown


type: ScalarsMap

Extends or overrides the built-in scalars and custom GraphQL scalars to a custom type.


type: NamingConvention default: change-case-all#pascalCase

Allow you to override the naming convention of the output. You can either override all namings, or specify an object with specific custom naming convention per output. The format of the converter must be a valid module#method. Allowed values for specific output are: typeNames, enumValues. You can also use "keep" to keep all GraphQL names as-is. Additionally, you can set transformUnderscore to true if you want to override the default behavior, which is to preserve underscores.

Available case functions in change-case-all are camelCase, capitalCase, constantCase, dotCase, headerCase, noCase, paramCase, pascalCase, pathCase, sentenceCase, snakeCase, lowerCase, localeLowerCase, lowerCaseFirst, spongeCase, titleCase, upperCase, localeUpperCase and upperCaseFirst See more


type: string default: (empty)

Prefixes all the generated types.

Usage Examples#

config: typesPrefix: I


type: string default: (empty)

Suffixes all the generated types.

Usage Examples#

config: typesSuffix: I


type: boolean default: false

Does not add __typename to the generated types, unless it was specified in the selection set.

Usage Examples#

config: skipTypename: true


type: boolean default: false

Automatically adds __typename field to the generated types, even when they are not specified in the selection set, and makes it non-optional

Usage Examples#

config: nonOptionalTypename: true


type: boolean default: false

Will use import type {} rather than import {} when importing only types. This gives compatibility with TypeScript's "importsNotUsedAsValues": "error" option


type: boolean default: false

Removes fragment duplicates for reducing data transfer. It is done by removing sub-fragments imports from fragment definition Instead - all of them are imported to the Operation node.


type: InlineFragmentTypeOptions default: inline

Whether fragment types should be inlined into other operations. "inline" is the default behavior and will perform deep inlining fragment types within operation type definitions. "combine" is the previous behavior that uses fragment type references without inlining the types (and might cause issues with deeply nested fragment that uses list types).

Package Details

Jul 6th, 2022
Weekly Downloads
Edit on GitHub