Last release 3 days ago
01 Sep 2026
Release timing varies
gaps range from 8 days to 6 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
7 years old
6097 releases · first in 2019
Nothing published for this version
#10928
90229a5
Thanks @eddeee888! - Add
contentComparison?: 'cache-first' | 'disk' to control disk-vs-cache write comparison in watch
mode.
In watch mode the CLI caches the hash of the content it last wrote per file and compares new output against that cached hash to skip redundant writes. This assumes generated output is a pure function of the codegen inputs. An output whose content depends on the file's existing content (e.g. a preset that reads the file and rewrites part of it) breaks that assumption: if the file is changed on disk and codegen regenerates content identical to a previous run, the cached hash still matches and the write is skipped, so the on-disk change is never corrected.
contentComparison: 'disk' opts an output into comparing the generated content against the file
on disk instead of the in-memory record of what codegen last wrote, so the file is rewritten when
it was changed externally. It can be set:
GenerateOptions it returns from buildGeneratesSection, orgenerates[output].contentComparison) for any output, including plain
plugin outputs without a preset.When both are present, the preset's value takes precedence. The default, 'cache-first', keeps
the existing in-memory-cache behaviour for outputs that are a pure function of their inputs.
#10930
448431a
Thanks @eddeee888! - Fix overwrite being ignored for
preset-based generates outputs.
A generates entry that used a preset and set overwrite (e.g.
overwrite: { removeStaleFiles: false }) had that setting silently ignored, so in watch mode its
generated files could still be deleted as stale.
The CLI resolved overwrite per generated file by looking the file's path up in
config.generates. That fails for a preset: its generates entry is keyed by the preset's
baseOutputDir, not by any generated file's path (and a preset can emit files outside that
directory), and the lookup additionally required a plugins key that preset entries don't have.
Both cases fell through to the global config.overwrite (default true).
Updated dependencies
[90229a5,
448431a]:
One column per quarter.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
#10924
0c8f5ba
Thanks @eddeee888! - Fix profiler output not being written to the
filesystem in watch mode (--profile --watch)
The profiler trace was only written on the non-watch code path, after the watch-mode early return,
so a profiled watch session never produced a codegen-*.json file.
The profiler now writes a fresh trace file after the initial run and after every rebuild, with each file containing only that run's events. A failed rebuild does not produce a trace and its events are discarded so they don't leak into the next successful run.
The Profiler now owns its own trace lifecycle:
clear() method starts a new traceoutputName property provides the filename for the current trace (null for the noop
profiler)CodegenContextUpdated dependencies
[0c8f5ba]:
Nothing published for this version
Nothing published for this version
#10921
58cdb31
Thanks @eddeee888! - Extend overwrite with
overwrite.removeStaleFiles and overwrite.updateExistingFiles
overwrite was being used to both remove stale files in watch mode and update existing files.
Some plugins such as Server Preset may dynamically return files to write between watch runs (for
performance purposes).
The overwrite can now take an object with overwrite.removeStaleFiles and
overwrite.updateExistingFiles fields to allow granular control over actions.
This is not a breaking change because overwrite=true|false still works.
58cdb31]:
Nothing published for this version
Nothing published for this version
959915f
Thanks @eddeee888! - dependencies updates:
@graphql-tools/utils@^11.2.0 ↗︎
(from ^11.0.0, in dependencies)graphql@^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 ↗︎
(from
^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0,
in peerDependencies)959915f,
959915f,
959915f]:
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
#10335
3280ace
Thanks @Diluka! - Fix graphql-config loading order to correctly
detect codegen projects
Previously, a graphql-config file like this failed:
projects:
default:
schema: 'default/schema.graphql'
project1:
schema: 'project1/schema.graphql'
extensions:
codegen:
generates:
'project1/__generated__/types.ts':
plugins: ['typescript']
This is because the default project doesn't have a codegen extension, which caused previous
logic to short circuit before reading project1's config.
The fix reads every named project first, before reading the default project to exhaustively go
through every single project.
Nothing published for this version
a2e1093
Thanks @eddeee888! - Fix CLI's require flag when resolving
module issue in ESM in native WindowsNothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
cfc4fc3
Thanks @eddeee888! - Add
disableFederationDirectiveAndScalarInjection config to better support Federation v2cbf9544]:
Nothing published for this version
#10848
f3ce427
Thanks @eddeee888! - dependencies updates:
@graphql-codegen/client-preset@workspace:^ ↗︎
(from ^6.0.0, in dependencies)#10849
55a4742
Thanks @eddeee888! - dependencies updates:
@graphql-codegen/core@workspace:^ ↗︎
(from ^6.0.0, in dependencies)@graphql-codegen/plugin-helpers@workspace:^ ↗︎
(from ^7.0.0, in dependencies)Updated dependencies
[f3ce427,
55a4742,
55a4742,
f3ce427]:
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
#10496
afaace6
Thanks @eddeee888! - BREAKING CHANGE: Update deps to latest, some
only support ESM
Node 20 support is dropped in this release. Node 22 comes with require() support for ESM, which
means it's easier to integrate ES modules into applications. Therefore, it is safe to start using
ESM-only packages.
If you are a user, please upgrade to Node 22. If you are a lib maintainer and see ESM vs CJS issues when running Jest tests, try using Vitest.
#10496
afaace6
Thanks @eddeee888! - BREAKING CHANGE: Drop Node 20 support
#10496
afaace6
Thanks @eddeee888! - BREAKING CHANGE: Set noSilentErrors: true
by default
When multiple files match documents pattern, and there are syntax errors in some but not others,
then the operations with errors are not included in the loaded documents list by default
(noSilentErrors: false). This is annoying for users as there is no feedback loop during
development.
noSilentErrors: true is used as the default for Codegen users to make the feedback loop faster.
It can still overriden in Codegen Config if desired.
#10496
afaace6
Thanks @eddeee888! - dependencies updates:
@inquirer/prompts@^8.3.2 ↗︎ (from
^7.8.2, in dependencies)chalk@^5.6.0 ↗︎ (from
^4.1.0, in dependencies)debounce@^3.0.0 ↗︎ (from
^2.0.0, in dependencies)detect-indent@^7.0.0 ↗︎ (from ^6.0.0,
in dependencies)listr2@^10.2.1 ↗︎ (from
^9.0.0, in dependencies)log-symbols@^7.0.0 ↗︎
(from ^4.0.0, in dependencies)ts-log@^3.0.0 ↗︎ (from
^2.2.3, in dependencies)yargs@^18.0.0 ↗︎ (from
^17.0.0, in dependencies)#10496
afaace6
Thanks @eddeee888! - dependencies updates:
chalk@^5.6.0 ↗︎ (from
^4.1.0, in dependencies)debounce@^3.0.0 ↗︎ (from
^2.0.0, in dependencies)detect-indent@^7.0.0 ↗︎ (from ^6.0.0,
in dependencies)listr2@^10.2.1 ↗︎ (from
^9.0.0, in dependencies)log-symbols@^7.0.0 ↗︎
(from ^4.0.0, in dependencies)ts-log@^3.0.0 ↗︎ (from
^2.2.3, in dependencies)yargs@^18.0.0 ↗︎ (from
^17.0.0, in dependencies)#10496
afaace6
Thanks @eddeee888! - dependencies updates:
@inquirer/prompts@^8.3.2 ↗︎ (from
^7.8.2, in dependencies)#10496
afaace6
Thanks @eddeee888! - Use ESM for CLI instead of CJS;
For backwards compatibility; graphql-codegen-esm is reserved, and also graphql-codegen-cjs is
added for users who want to use CJS.
So the commands are;
graphql-codegen - ESM version, defaultgraphql-codegen-esm - ESM version, same as above, but reserved for backwards compatibilitygraphql-codegen-cjs - CJS version, for users who want to use CJS, but not recommended for new
users. Will be removed in the future.gql-gen - ESM version, same as graphql-codegengraphql-code-generator - ESM version, same as graphql-codegen and gql-genUpdated dependencies
[afaace6,
afaace6,
afaace6,
afaace6,
afaace6,
afaace6,
afaace6,
afaace6,
afaace6,
afaace6,
afaace6,
afaace6,
afaace6,
afaace6,
afaace6]:
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version