Registry / serialization / graphql-compose

graphql-compose

JSON →
library9.1.0jsnpmunverified

Programmatic GraphQL schema builder with a type registry for constructing and editing output/input types, fields, arguments, and interfaces. v9.1.0 (stable) supports GraphQL v14–16, ships TypeScript definitions, and is ESM-only. Key differentiators vs graphql-tools: Resolver abstraction for CRUD operations, built-in projection parser from AST, OutputType-to-InputType converter, and plugin ecosystem (mongoose, JSON, Elasticsearch). Releases ~monthly; recent fixes address security (removed object-path) and TypeScript compatibility.

npm install graphql-compose
INSTALL
IMPORT
SIG · GRAPHQL-COMPOSE
G
graphql-compose
serializationjavascriptv9.1.0
Install
Import
Disk
Pass rate
0/ 6
Env Coverage0 / 6
glibc
1822
musl
1822
Install & Compatibility
Where this runs
tested against v? · npm install
Install × environment matrix
Each cell = how many times install + import succeeded across repeated harness runs. Partial = flaky.
glibc = Debian/Ubuntu slim · musl = Alpine Linux
musl
node 18226 runs
build_error
glibc
node 18226 runs
build_error
Code
Verified usage

Verified import paths — ran on the pinned version, not inferred.

schemaComposer
import { schemaComposer } from 'graphql-compose'
const schemaComposer = require('graphql-compose').schemaComposer
Default export is not available; named export only. Since v9, ESM-only; use import statement.
ObjectTypeComposer
import { ObjectTypeComposer } from 'graphql-compose'
import ObjectTypeComposer from 'graphql-compose'
Named export for type composer; default export does not exist.
Resolver
import { Resolver } from 'graphql-compose'
Resolver class for defining named GraphQL field configs.
GraphQLDate
import { GraphQLDate } from 'graphql-compose'
const { GraphQLDate } = require('graphql-compose')
Custom scalar; use named import.
graphql-compose types
import type { ObjectTypeComposer } from 'graphql-compose'
Import types when only type information is needed (TS).

Creates an object type composer for User, adds a resolver, attaches to Query root, builds schema.

import { schemaComposer, ObjectTypeComposer, Resolver } from 'graphql-compose'; import { GraphQLSchema, GraphQLObjectType, GraphQLString } from 'graphql'; const UserTC = schemaComposer.createObjectTC({ name: 'User', fields: { id: 'ID!', name: 'String!', }, }); UserTC.addResolver({ name: 'findById', type: UserTC, args: { id: 'ID!' }, resolve: async ({ args }) => { // pretend to fetch from DB return { id: args.id, name: 'John' }; }, }); schemaComposer.Query.addFields({ user: UserTC.getResolver('findById'), }); const schema = schemaComposer.buildSchema(); console.log(schema); // schema ready to be used with express-graphql or other server
Debug
Known issues
breakingv9 dropped support for GraphQL v13 and older; peer dependency now requires graphql@^14.2.0 || ^15.0.0 || ^16.0.0
fix
Upgrade graphql to v14, v15, or v16. If locked to v13, stay on graphql-compose v8.
affects: >=9.0.0
breakingv9 is ESM-only; CommonJS require() will fail.
fix
Use import statements or dynamic import(). If CJS required, stick with v8.
affects: >=9.0.0
deprecatedRemoved object-path dependency due to security alerts; use native lodash.get or optional chaining.
fix
If using deep path access, migrate to ES2020 optional chaining or lodash.get.
affects: >=9.0.5
gotchaschemaComposer is a singleton; importing it multiple times yields the same instance. Do not create new instances with new SchemaComposer() unless you intend separate registries.
fix
Use import { schemaComposer } for shared app schema; use new SchemaComposer() for isolated test contexts.
affects: >=7.0.0
deprecatedObjectTypeComposer.setField() mutates the type in-place; future versions may prefer immutable patterns.
fix
Consider using addFields or removeField methods; check for deprecation warnings in v10.
affects: >=9.0.0
Errors
Common errors & fixes
TypeError: Cannot read properties of undefined (reading 'getType')
Resolver referenced a type that hasn't been added to the schemaComposer yet.
fix
Ensure the type is created (e.g., schemaComposer.createObjectTC) before referencing it in resolver type field.
Error: Schema must contain uniquely named types but contains multiple types named "Query".
Accidentally created duplicate root types via schemaComposer.Query.addFields() and schemaComposer.createObjectTC({ name: 'Query'}).
fix
Do not create an object type composer with same name as root types. Use schemaComposer.Query directly.
GraphQLError: Field "user" must not have a selection since type "User" has no subfields.
Resolver type is set to UserTC but resolver does not return object; or query selects subfields but schema built incorrectly.
fix
Verify resolver returns an object matching UserTC fields and that schemaComposer.buildSchema() is called after adding resolvers.
Module not found: Can't resolve 'graphql' in ...
Missing graphql peer dependency.
fix
npm install graphql@^14.2.0 || ^15.0.0 || ^16.0.0
Upgrade
Version history
9.1.0latest on npm
Audit
Dependencies
graphqlrequiredpeer dependency; required to run GraphQL schemas
Agent activity
6 hits · last 30 days
node
6
Resources
graphql-compose — npm install graphql-compose · libregistry