GraphQL Schema Generation
A Head Start, Not a Runtime.
GO-DUCK generates a complete, valid GraphQL SDL schema straight from your GDL definitions — every entity, enum, and relationship, ready to use as a contract or as the starting point for wiring up real execution.
Where this stands today
GraphQL support is at a proof-of-concept / scaffold stage. The generated .graphqls schema file is genuinely complete and correct — a solid reference document and a real head start. A POST /graphql endpoint exists too, with tenant/silo context resolution already wired up. What's not there yet is query execution: nothing parses your query against the schema and resolves fields. Send any query — valid or not — and you get back the same fixed placeholder response every time. Think of this page as "here's what's real today, here's the direction it's headed," not a working GraphQL API.
Real Today: SDL Generation
Every GDL entity, enum, and relationship is compiled into a syntactically complete .graphqls schema file — useful right now as documentation, a client-side contract, or the input schema for a real execution engine you wire up yourself.
Roadmap: Query Execution
The per-entity resolver functions the CLI generates (Resolve{'{Entity}'}Federated, etc.) are dead code today — never called by anything. No execution library (gqlgen, graphql-go, or similar) is wired in yet. This is the next piece of the puzzle, not a shipped feature.
Target Schema Shape
This is the shape a query would take against the generated schema — not yet queryable. It illustrates what the SDL describes, not what the endpoint executes today.
// Target schema shape — not yet queryable. // Sending this today returns the same fixed placeholder below, regardless of content. query { entitys { id make history { date notes } } }
What POST /graphql actually returns today, for any query:
{
"data": "Federated GraphQL Handler active with 3 silos."
}
Where This Is Headed
The building blocks are already generated: a complete schema, tenant-aware context resolution on POST /graphql, and per-entity resolver functions that exist but aren't called yet. Closing the loop means wiring a real execution library on top of what's already there — not starting from zero.