How airbnb/viaduct works
Viaduct is a GraphQL data-access engine that brings a unified schema and hosted business logic behind one request interface. A client operation enters the engine, is planned and executed, and field resolvers supply the data used to build the response. Tenant code can re-enter the engine with queries or mutations, composing hosted logic; Java and remote-resolver bridges extend that execution model. The tree and excerpts support the engine, context, selection-set, registry, and bridge components shown here. Some registry and execution wiring is inferred from module roles rather than sampled implementation.
Main entry points: EngineExecutionContextWrapper.kt Tenant context · EngineImpl.kt Engine entry · ViaductExecutionStrategy.kt Execution strategy · EngineExecutionContextImpl.kt Execution context
Components 18
Schema and API
- Engine registry
core/service/runtime/src/main/kotlin/viaduct/service/runtime/EngineRegistry.kt - Engine API
core/engine/api/src/main/kotlin/viaduct/engine/api/Engine.kt - Selection sets
core/engine/api/src/main/kotlin/viaduct/engine/api/EngineSelectionSet.kt
Query execution
- Engine entry
core/engine/wiring/src/main/kotlin/viaduct/engine/EngineImpl.kt - Query planning
core/engine/runtime/src/main/kotlin/viaduct/engine/runtime/execution/QueryPlanFactory.kt - Execution strategy
core/engine/runtime/src/main/kotlin/viaduct/engine/runtime/execution/ViaductExecutionStrategy.kt - Selection processing
core/engine/runtime/src/main/kotlin/viaduct/engine/runtime/select/EngineSelectionSetImpl.kt - Resolver dispatch
core/engine/runtime/src/main/kotlin/viaduct/engine/runtime/FieldResolverDispatcherImpl.kt - Resolver fetch
core/engine/runtime/src/main/kotlin/viaduct/engine/runtime/execution/ResolverDataFetcher.kt - Execution result
core/engine/runtime/src/main/kotlin/viaduct/engine/runtime/result/ObjectEngineResult.kt
Tenant integration
- Tenant context
core/tenant/runtime/src/main/kotlin/viaduct/tenant/runtime/context/EngineExecutionContextWrapper.kt - Execution context
core/engine/runtime/src/main/kotlin/viaduct/engine/runtime/EngineExecutionContextImpl.kt - Hosted resolver logic
Instrumentation and bridges
- Resolver instrumentation
core/engine/runtime/src/main/kotlin/viaduct/engine/runtime/instrumentation/resolver/InstrumentedEngineExecutionContext.kt - Java API bridge
core/x/javaapi/runtime/src/main/kotlin/viaduct/java/runtime/bridge/JavaEngineContextDelegate.kt - Remote resolver context
core/x/remoteresolvers/lib/src/main/kotlin/viaduct/remote/RemoteEngineExecutionContext.kt
Other components
- GraphQL client
- Remote callback service
Connections 16
- GraphQL client → Engine entry: submits operation
- Engine registry → Engine entry: creates engine
- Engine entry → Query planning: builds plan
- Engine entry → Execution strategy: executes operation
- Query planning → Selection processing: plans selections
- Execution strategy → Resolver dispatch: dispatches fields
- Resolver dispatch → Resolver fetch: fetches resolver
- Resolver fetch → Hosted resolver logic: invokes resolver
- Execution strategy → Execution result: completes response
- Tenant context → Execution context: uses context
- Tenant context → Selection sets: constructs selections
- Tenant context → Engine API: resolves subqueries
- Hosted resolver logic → Tenant context: issues subquery
- Resolver instrumentation → Execution context: wraps execution
- Java API bridge → Execution context: delegates API calls
- Remote resolver context → Remote callback service: executes remotely