What graphile/crystal shipped
Written by FoxPlug from the repository's own releases; not affiliated with Graphile. Paste your own repository in the box below and FoxPlug writes the same weekly update for your product. This page is an automatic summary of the releases, pull requests and commits in github.com/graphile/crystal; Graphile did not write it and does not use or endorse FoxPlug. Every line links to the change it describes.
Get a weekly update like this for your product, free
Week of November 2, 2026
What shipped
- Fixed a crash in subquery inlining when the parent.single() found no row. Pull request #3237
- Released @dataplan/pg 1.2.1 with the subquery inlining crash fix. Release
- Released postgraphile 5.2.1 with the subquery inlining crash fix and updated @dataplan/pg dependency. Release
- Cut quadratic scans in export so large schemas export faster, and added a lint option. Pull request #3183
- Added an option to skip the post-write ESLint check in export. Pull request #3249
- Added support for the @argNdescription smart tag to document arguments in the GraphQL schema. Pull request #3168
- Allowed configuring the minify preset. Pull request #3242
- Improved minification slightly as a follow-up to earlier minify work. Pull request #3241
- Kept test SDL in sync in the @dataplan/pg tests. Pull request #3238
- Combined the defaultOptions and minified default options tests. Pull request #3240
Why it matters
This week brings a targeted fix for a regression where subquery inlining crashed when the parent.single() found no row, released in both @dataplan/pg and postgraphile. It also speeds up exporting large schemas, adds an escape hatch for the export lint check, and lets schema authors document arguments with @argNdescription.
Changelog entry
- Fix subquery inlining crash when parent.single() has no row Pull request #3237
- @dataplan/pg 1.2.1 patch release with the subquery inlining fix Release
- Postgraphile 5.2.1 patch release with the subquery inlining fix and updated @dataplan/pg Release
- Graphile-export: avoid quadratic scans in export and add lint option Pull request #3183
- Graphile-export: allow skipping the post-write ESLint check Pull request #3249
- Support @argNdescription to document arguments in GraphQL Pull request #3168
- Allow configuring minify preset Pull request #3242
- Improve minification slightly Pull request #3241
- @dataplan/pg tests: keep SDL in sync Pull request #3238
- Combine defaultOptions and default options minified test Pull request #3240
- Fix index lookup Pull request #3236
- Update @types/node ranges Pull request #3250
Subquery inlining crash fixed and released in postgraphile 5.2.1 and @dataplan/pg 1.2.1. Large schema exports got faster, export can skip the post-write ESLint check, and @argNdescription now documents GraphQL arguments.
This week we released postgraphile 5.2.1 and @dataplan/pg 1.2.1, fixing a crash when a step is inlined via subquery into a parent.single() that found no row. Exporting large schemas no longer does quadratic scans, and export has a new option to skip the post-write ESLint check. You can now use @argNdescription to document arguments in your GraphQL schema, and the minify preset is configurable with a small minification improvement.
Week of October 26, 2026
What shipped
- Postgraphile 5.2.0 switches PgSelectStep and PgUnionStep from a subquery lateral join to a materialized CTE lateral join, which appears to fix bad planner decisions such as a full table scan hash join instead of a fast loop. Release
- Fixing RBAC precedence over smart tags so a function granted only to admins and marked sortable and filterable appears in the admin schema and not in the regular user schema. Pull request #3228
- Replacing deprecated context.getFilename and context.getPhysicalFilename calls in the ESLint plugin with the newer context filename properties. Pull request #3220
- Separating raw and augmented introspection types. Pull request #3225
- Adding two articles to the postgraphile website for 5.2. Pull request #3232
- Adding contact pages to the websites. Pull request #3227
- Restricting ESLint so only allowed imports are permitted. Pull request #3230
- Converting the ESLint config to TypeScript. Pull request #3229
- Adding a yarn doccheck command. Pull request #3234
- Adding pre-push checks for test types and workspace imports for greater consistency across the repo. Pull request #3231
Why it matters
This week brings a minor postgraphile release that changes how PgSelectStep and PgUnionStep join laterally, which appears to fix bad Postgres planning decisions. It also fixes RBAC precedence over smart tags, which matters when one database generates separate schemas for admins and regular users. A batch of patch releases now includes internal APIs in generated declaration files after removing stripInternal from the shared TypeScript compiler options.
Changelog entry
- Postgraphile 5.2.0: PgSelectStep and PgUnionStep use a materialized CTE lateral join, appearing to fix bad planner decisions. Release
- Fix RBAC precedence over smart tags so admin-only functions stay out of the regular user schema. Pull request #3228
- Pg-sql2 5.0.2: internal-tagged symbols are now included in generated declaration files after removing stripInternal. Release
- Pg-introspection 1.0.2: internal-tagged symbols are now included in generated declaration files. Release
- Ruru 2.0.3: internal-tagged symbols are now included in generated declaration files. Release
- Ruru-components 2.0.2: internal-tagged symbols are now included in generated declaration files. Release
- Tamedevil 0.1.2: internal-tagged symbols are now included in generated declaration files. Release
- Ruru-types 2.0.1: internal-tagged symbols are now included in generated declaration files. Release
- Pgl 5.0.2: internal-tagged symbols are now included in generated declaration files. Release
- ESLint plugin: replace deprecated context.getFilename and context.getPhysicalFilename with context filename properties. Pull request #3220
- Separate raw and augmented introspection types. Pull request #3225
- Convert the ESLint config to TypeScript. Pull request #3229
Postgraphile 5.2.0 is out: PgSelectStep and PgUnionStep now use a materialized CTE lateral join, which appears to fix some bad Postgres planning decisions. Also fixed RBAC precedence over smart tags, plus patches across the packages.
Postgraphile 5.2.0 is released. PgSelectStep and PgUnionStep now use a materialized CTE lateral join instead of a subquery lateral join, which appears to fix planner choices such as a full table scan hash join where a fast loop was expected. We also fixed RBAC precedence over smart tags, so a function granted only to admins and marked sortable and filterable shows in the admin schema and not the regular user schema. Patch releases for pg-sql2, pg-introspection, ruru, ruru-components, ruru-types, tamedevil and pgl now include symbols tagged internal in generated declaration files.
Week of September 28, 2026
What shipped
- Graphile-build-pg 5.1.5 changes how dataplanPg and grafast helpers are imported in the introspection plugin to follow a cleaner pattern. Release
- Fixed a bug where connection fields would unnecessarily fetch data when only requesting totalCount with pagination arguments like first: 0. Pull request #3194
- Grafast 1.1.4 now reports field errors when list fields receive non-array values instead of silently converting to null. Release
- Optimized constraint checks for plans that have no constraints, which covers most plans. Pull request #3189
- Settings loading is now more efficient since it happens on nearly every request. Pull request #3180
- Improved logic around bakedInput and list handling. Pull request #3179
- Removed maxClientQueues setting from exports to reduce pollution. Pull request #3193
Why it matters
This week brings performance improvements to request handling and connection queries, plus better error reporting for invalid list completions so clients can distinguish actual failures from null values.
Changelog entry
- Graphile-build-pg 5.1.5: Changed introspection plugin import pattern for dataplanPg and grafast helpers Release
- Grafast 1.1.4: Report field errors when list completion receives non-array values Release
- Fixed connection inefficiency where totalCount requests forced underlying collection fetches unnecessarily Pull request #3194
- Optimized constraint checks for plans without constraints Pull request #3189
- Made settings loading more efficient for frequent request-time access Pull request #3180
- Improved bakedInput and list handling logic Pull request #3179
- Removed maxClientQueues setting from public exports Pull request #3193
- Added executor queue test coverage Pull request #3195
Graphile Crystal updates: fixed connection totalCount inefficiency, improved settings loading performance, grafast now reports list errors properly, and optimized constraint checks.
Graphile Crystal had a solid week of performance and reliability improvements. We fixed a bug where connection queries unnecessarily fetched data, made settings loading more efficient since it runs on every request, and improved grafast to properly report field errors when list fields receive invalid data. We also optimized constraint checks for the common case where plans have no constraints.
Week of September 14, 2026
What shipped
- WithPgClient variants now maintain full multistep equivalence with non-WithPgClient variants through internal reworking. Pull request #3187
- PgResource.get() and.find() now automatically skip empty fetches when WHERE conditions are always falsy. Pull request #3177
- Functional PostgreSQL resource execution now has result-shape typing for PgResource.execute(), executePositional(), and executeNamed(). Pull request #3174
- PgClient type is now inferred from loaded adaptors, eliminating the need for most manual casting. Pull request #3175
- @returnType decorator now works with setof functions, fixing pagination field descriptions. Pull request #3173
- PgSelect now deduplicates queries early, matching functionality already present in PgExecutor. Pull request #3181
- PgResource.get() and.find() now accept null/undefined, reducing boilerplate like inhibitOnNull. Pull request #3178
- Experimental support added for wrapping CRUD mutations. Pull request #3185
- SmartFieldPlanResolver types in wrapPlans() have been improved. Pull request #3176
- GetGraphQLTypeByPgCodec and getTypeMetaByName now have stronger types. Pull request #3172
Why it matters
Type improvements and performance optimizations across multiple areas make development more reliable and reduce boilerplate. The fix for @returnType with setof functions and automatic skipping of empty fetches address real usability issues. Support for inferring PgClient types simplifies setup for new users.
Changelog entry
- WithPgClient variants reworked to maintain full multistep equivalence with non-WithPgClient variants Pull request #3187
- Experimental support for wrapping CRUD mutations Pull request #3185
- PgSelect now deduplicates queries early to reduce redundant work Pull request #3181
- PgResource.get() and.find() now accept null/undefined arguments Pull request #3178
- Automatic optimization to skip empty fetches when WHERE conditions are always falsy Pull request #3177
- Functional PostgreSQL resources now have result-shape typing for execute() methods Pull request #3174
- PgClient type inference from loaded adaptors reduces manual casting requirements Pull request #3175
- @returnType decorator now works with setof functions, improving pagination field descriptions Pull request #3173
- Stronger types for getGraphQLTypeByPgCodec and getTypeMetaByName Pull request #3172
This week: WithPgClient multistep equivalence, automatic empty fetch skipping, PgClient type inference from adaptors, @returnType now works with setof functions, and stronger types throughout.
Crystal shipped significant improvements this week focused on developer experience and type safety. WithPgClient regained full multistep equivalence, pgResource queries now automatically skip empty fetches, and PgClient types are inferred from loaded adaptors. The @returnType decorator now works correctly with setof functions. Type safety improvements landed across getGraphQLTypeByPgCodec, getTypeMetaByName, and functional resource execution results.