Skip to content

Conversation

@rmosolgo
Copy link
Owner

@rmosolgo rmosolgo commented Jan 21, 2026

Taking a crack at #5507

Much inspiration taken from https://github.com/gmac/graphql-breadth-exec, as well as #5389 and the existing Interpreter::Runtime module.

I'm especially indebted to @gmac's work in https://github.com/gmac/graphql-breadth-exec for:

  • The overall batched flow where list indices are ignored from execution's standpoint. I think I will run into trouble with Lazy/Dataloader support but it's brilliant so far.
  • Propagating nulls during a second pass over the result only when some errors are present. This is awesome because it reduces the necessary bookkeeping at runtime and moves the overhead to the cases where an error is present (presumably less common and less important than the happy path). One downside here is that execution no longer stops on branches with errors. This will be documented as a "breaking" change.
  • Using gather_selections to isolate mutations, it's perfect but I think it would have taken a while to click for me.

I plan to iterate on this in "draft" state until it's basically implementing the GraphQL spec, then merge it and continue working on it.

Known TODOs:

  • Fragment spreads
  • Abstract-typed inline fragments
  • Hook up static validation
  • static input coercion
  • leaf result coercion
  • non-null enforcement
  • variables
  • input objects
  • @skip/@include
  • Introspection
  • Mutation isolation

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants