Grafast v1 release candidate!
The Grafast v1.0 release candidate is now available. The engine has stabilized, the epic milestones are complete, and the runtime has been hardened by more than a year of production use through PostGraphile V5 and standalone adopters. All that remains is to finish the documentation, tighten the TypeScript experience, and create more examples!
PostGraphile user? You may want to read the PostGraphile RC post instead.
What does release candidate mean for Grafast?
The runtime APIs, behaviour, and mental model have settled and the software has proven stable with some users having ran it in production for over a year; however, the documentation needs to catch up (and some TypeScript types and comments still need to be brought in line). The release candidate tag signals the stability of the software whilst leaving us the space to focus entirely on quality and documentation before stamping the final 1.0 release.
Now is the perfect moment to validate that the “plans as dataflow” approach clicks for you: do you understand the separation of “plan-time” and “execution-time”? Can you see how principled communication between the steps allows for optimization without needing to revisit plan resolvers?
If you don’t understand it, that’s likely a failing of our documentation! Help us improve our explanations by sharing your feedback (whether confusion and frustration or success and praise!) in our Discord or with GitHub issues and pull requests!
Documentation: where we need you
The code moved faster than the words that describe it. Parts of the docs are out of date, others are missing, and a few contradict the behaviour you see in practice. We need review, issue reports, and small patches. Your first-hand notes about what is unclear are invaluable. If something doesn’t behave according to the docs, or if the docs are unclear, let us know!
Feedback via GitHub issues or the Discord server is hugely appreciated.
From sketches and a dream to a stable execution engine
We came up with the initial seed for Grafast in 2020, having been frustrated
by the limitations, caveats and inefficiencies of traditional resolver-driven
GraphQL execution, along with the messiness and inefficiency of previous
attempts to solve these problems (such as digging through GraphQLResolveInfo).
The building block we came up with, our north star, was the “plan resolver”: a function that looks deceptively similar to traditional resolvers, but changes the GraphQL resolution from procedural (field-by-field, layer-by-layer, with just-in-time discovery of data requirements leading to over-fetching, under-fetching, N+1 problems, and an explosion of promises) to declarative (holistic planning of the request, followed by optimal execution).



