Imagine a large company like Airbnb with hundreds of engineering teams:
Team A → manages listings data
Team B → manages user profiles
Team C → manages payments
Team D → manages reviews
Without a unified system, every client (mobile app, web app) must know:
🔑 Key Concept: This creates chaos at scale — hard to discover APIs, inconsistent interfaces, no central governance
A central schema provides ONE unified interface:
Client App
↓
[Single GraphQL Interface]
↓ ↓ ↓
Listings Users Payments
| Benefit | Explanation |
|---|---|
| Discoverability | One place to find all APIs |
| Cross-domain queries | Fetch listings + reviews in one call |
| Consistent policies | Security, observability enforced centrally |
❗ A central schema only works if it can evolve quickly
If ONE central team owns everything:
The real challenge:
Give teams autonomy over their domain
+
Preserve coherence of the shared schema
Viaduct's answer is multi-tenancy through modules:
[Shared Viaduct Runtime]
├── Module A (Listings Team)
├── Module B (Payments Team)
├── Module C (Reviews Team)
└── Module D (Users Team)
Step 1: Create a directory for their module
Step 2: Define their SDL (Schema Definition Language)
Step 3: Write their resolvers
Step 4: Ready to serve ✓
🔑 Key Principle: Teams focus on domain logic. The platform handles execution, scaling, and integration
This is a critical comparison to understand:
Team A → runs Server A (subgraph)
Team B → runs Server B (subgraph)
Team C → runs Server C (subgraph)
↓
[Federation Router]
↓
Unified Graph
Team A → writes Module A
Team B → writes Module B → [Shared Viaduct Runtime]
Team C → writes Module C
↓
Unified Graph
| Dimension | Federation | Viaduct |
|---|---|---|
| Unit of distribution | Servers | Modules |
| Infrastructure burden | Each team runs own server | Shared runtime |
| Scale challenge | Hundreds of servers | Fewer Viaduct instances |
| Relationship | — | Complementary |
🔑 Core Distinction:
- "Federation distributes development by distributing servers"
- "Viaduct distributes development by distributing modules"
Viaduct and Federation are not competitors — they are complementary:
[Federation Router]
├── Viaduct Instance 1 (hosts 50 related modules)
├── Viaduct Instance 2 (hosts 40 related modules)
└── Other Subgraph Servers
Without Viaduct: 500 teams = 500 servers to manage
With Viaduct: 500 teams = 10 Viaduct instances (each hosting ~50 modules)
✅ Fewer servers to operate while maintaining team autonomy
Understanding versioning signals matters for engineers:
@StableApi → Safe to use, no breaking changes
@ExperimentalApi → May change, use with caution
@InternalApi → Do not use externally
PROBLEM: Decentralized development of a central schema
↓
SOLUTION: Viaduct (multi-tenant module system)
↓
HOW: Teams write modules → shared runtime executes
↓
VS: Federation (teams run servers → router composes)
↓
TOGETHER: Viaduct instances act as Federation subgraphs
↓
RESULT: Scalable, autonomous, unified data API
What problem does Viaduct solve?
Decentralized development of a central GraphQL schema
What is the key difference between Viaduct and Federation?
Federation distributes via servers; Viaduct distributes via modules
Why can't a single central team own the entire schema?
They become a bottleneck; domain experts lose autonomy; schema evolves too slowly
How do Viaduct and Federation work together?
Viaduct instances serve as subgraphs within a federated architecture, reducing total server count
What does a team need to do to contribute to Viaduct?
Create a module directory, define SDL, write resolvers — no server setup required