One of the biggest benefits of GraphQL is the built-in type-system. These types can then be used when building your frontend to make sure you have end-to-end type safety.
Instead of writing TypeScript types manually to match your Grafbase GraphQL API, we can use GraphQL Code Generator to automatically generate everything we need.

Install the following dependencies to get started:
typescript@graphql-codegen/cli@graphql-codegen/client-preset
npm install -D typescript @graphql-codegen/cli @graphql-codegen/client-presetThen inside package.json add to scripts a new command:
{
"codegen": "graphql-codegen -r dotenv/config"
}You'll notice above we're preloading dotenv/config which means we can use environment variables instead of committing our Grafbase API URL and API Key to source control.
Create .env in the root of your project and add your project API URL and API Key:
GRAFBASE_API_URL=
GRAFBASE_API_KEY=Next inside of the project root, create the file codegen.ts and add your Grafbase API URL and API key:
import { CodegenConfig } from '@graphql-codegen/cli'
const config: CodegenConfig = {
schema: {
[process.env.GRAFBASE_API_URL]: {
headers: {
'x-api-key': process.env.GRAFBASE_API_KEY,
},
},
},
}
export default configNow we've configured the location of the schema we can configure the files we want to generate, and the plugins we want to use.
We'll be using the client-preset to generate the folder gql in the root of our project. You can update this to output where you like.
import { CodegenConfig } from '@graphql-codegen/cli'
const config: CodegenConfig = {
schema: {
[process.env.GRAFBASE_API_URL]: {
headers: {
'x-api-key': process.env.GRAFBASE_API_KEY,
},
},
},
generates: {
'./gql/': {
preset: 'client',
plugins: [],
},
},
}
export default configFinally, we'll want to ignore the warnings for no documents:
import { CodegenConfig } from '@graphql-codegen/cli'
const config: CodegenConfig = {
schema: {
[process.env.GRAFBASE_API_URL]: {
headers: {
'x-api-key': process.env.GRAFBASE_API_KEY,
},
},
},
generates: {
'./gql/': {
preset: 'client',
plugins: [],
},
},
ignoreNoDocuments: true,
}
export default configThat's it!
We can now run the script codegen to generate the TypeScript types for the provided Grafbase API schema:
npm run codegenYou should now have the folder gql in the root of your project (or where you set it) that contains the generated TypeScript types for all scalars, queries, mutations, types, input types, enumerations, and more.
Here's what an example schema, codegen config, and generated TS looks like:
# grafbase/schema.graphql
type Post @model {
title: String
author: Author!
published: Boolean!
}
type Author @model {
name: String
posts: [Post!]!
}Because we're using the client-preset with GraphQL Code Generator we can automatically generate types for graphql operations — learn more.
