From 50e86226e83fc27f8861af1938eea3318c0bb7b9 Mon Sep 17 00:00:00 2001 From: Michael Staib Date: Wed, 4 Mar 2026 22:23:27 +0000 Subject: [PATCH 1/3] Add Fusion Docs --- website/src/docs/fusion/v16/index.md | 86 ++++++++++++++-------------- 1 file changed, 44 insertions(+), 42 deletions(-) diff --git a/website/src/docs/fusion/v16/index.md b/website/src/docs/fusion/v16/index.md index 21e8b478ef1..e81e3815d15 100644 --- a/website/src/docs/fusion/v16/index.md +++ b/website/src/docs/fusion/v16/index.md @@ -2,11 +2,11 @@ title: "Overview" --- -Fusion lets you split a GraphQL API across multiple independent services (subgraphs) while exposing a single, unified schema to clients. Clients query one endpoint; the gateway figures out which subgraphs to call and assembles the response. +Fusion lets you split one GraphQL API into multiple smaller services, without changing how clients consume it. Clients still send queries to one endpoint, and Fusion combines data from all services into one response. Teams can deploy independently, and contract conflicts are caught during build time. # What Is Fusion -Fusion is a distributed GraphQL architecture built on HotChocolate. You build each subgraph as a standard HotChocolate server, add a few annotations to describe how your types relate to the bigger graph, and let the Fusion gateway handle cross-service coordination. +Fusion is ChilliCream's API gateway for exposing one GraphQL API over multiple upstream services. Those upstream services can be GraphQL, OpenAPI-based REST, or gRPC. Each service owns its contract and implementation. Fusion composes those contracts at build time, and the gateway orchestrates execution at runtime. Fusion implements the GraphQL Composite Schemas specification (draft), an open standard being developed under the GraphQL Foundation. The architecture has three parts: @@ -18,13 +18,13 @@ The architecture has three parts: ▼ ┌────────────────┐ │ Fusion Gateway │ - └──┬──────┬──┬───┘ - │ │ │ - ┌────────┘ │ └────────┐ - ▼ ▼ ▼ + └──┬────┬────┬───┘ + │ │ │ + ┌────────┘ │ └────────┐ + ▼ ▼ ▼ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ Products │ │ Accounts │ │ Reviews │ - │ Subgraph │ │ Subgraph │ │ Subgraph │ + │ Service │ │ Service │ │ Service │ └──────┬─────┘ └──────┬─────┘ └──────┬─────┘ │ │ │ ▼ ▼ ▼ @@ -33,26 +33,28 @@ The architecture has three parts: └────────────┘ └────────────┘ └────────────┘ ``` -**Subgraphs** are HotChocolate servers with a few extra annotations. They own their data and their portion of the schema. They never call each other, never import each other's code, and can be deployed independently. +**Subgraphs** are the upstream services behind the Fusion gateway: GraphQL services, OpenAPI-based REST services, and gRPC services. Each subgraph owns part of the API surface and implementation logic, and can be developed and deployed independently. -**Composition** merges all subgraph schemas into a single composite schema and produces a gateway configuration file. This happens offline -- through the Nitro CLI or .NET Aspire -- not at runtime. If two subgraphs define conflicting types, composition fails with an error _before_ you deploy. +A **source schema** is the contract document for a subgraph, such as a GraphQL schema, an OpenAPI document, or a gRPC/protobuf definition. -**The gateway** receives client queries, plans which subgraphs to call based on the composed configuration, executes those calls, and merges the results. You do not write routing logic or resolver code in the gateway. +**Composition** processes all source schemas and produces a Fusion archive (`.far`) that contains the composite schema and gateway configuration. -The result: a client sends a single query, the gateway fans it out to the relevant subgraphs, and the response comes back as if it were a monolithic API. +The **gateway** receives client requests, determines which subgraphs to call, executes those calls, and merges the results. + +The result: clients send one request to one endpoint and receive one unified response, while Fusion handles routing and aggregation across upstream services. ```graphql -# This query touches three subgraphs, but the client doesn't know or care. +# This query touches three services, but the client doesn't know or care. query { products(first: 5) { nodes { - name # from Products subgraph - price # from Products subgraph - reviews { # from Reviews subgraph + name # from Products service + price # from Products service + reviews { # from Reviews service stars author { - username # from Accounts subgraph + username # from Accounts service } } } @@ -63,7 +65,7 @@ query { ## Three Things That Make Fusion Different -**Lookups are real Query fields.** When the gateway needs to resolve an entity from a subgraph, it calls a normal Query field annotated with `[Lookup]`. You can call the same field yourself in testing, debug it with standard tools, and see exactly what it returns. There is no hidden `_entities` field or magic resolution protocol. +**Lookups use standard Query fields.** For GraphQL subgraphs, when the gateway needs to resolve an entity, it calls a normal Query field annotated with `[Lookup]`. You can call the same field yourself in testing, debug it with standard tools, and see exactly what it returns. There is no hidden internal protocol you need to implement. ```csharp [QueryType] @@ -78,21 +80,21 @@ public static partial class ProductQueries } ``` -**Composition catches errors at build time.** When you run `nitro fusion compose`, the composition engine validates all subgraph schemas against each other. Type conflicts, missing fields, incompatible enums -- these are caught now, in your CI pipeline, not at 3 AM when a user hits a broken query path. +**Composition catches errors at build time.** When you run `nitro fusion compose`, the composition engine validates source schemas against each other. Type conflicts, missing fields, and incompatible enums are caught in CI before deployment. -**No federation runtime in your subgraphs.** Your subgraphs are standard HotChocolate servers. There is no subgraph library to install, no federation middleware to configure, no vendor-specific protocol. Your schemas follow the open [GraphQL Composite Schemas specification](https://graphql.github.io/composite-schemas-spec/draft/) being developed under the GraphQL Foundation. +**No special runtime for HotChocolate subgraphs.** In the common HotChocolate setup, subgraphs are standard HotChocolate servers with normal resolvers. You do not install a separate distributed-runtime package or vendor-specific protocol layer. The GraphQL parts of this model follow the open [GraphQL Composite Schemas specification](https://graphql.github.io/composite-schemas-spec/draft/) being developed under the GraphQL Foundation. # Key Terminology -| Term | Definition | -| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| **Subgraph** | A HotChocolate server that owns a portion of the overall schema. Each subgraph manages its own data and resolvers. | -| **Source schema** | The GraphQL schema exported by a single subgraph. This is what gets fed into composition. | -| **Composite schema** | The unified, client-facing schema produced by merging all source schemas. Clients query this schema as if it were a single API. | -| **Gateway** | The entry point for client requests. It receives queries against the composite schema, plans execution across subgraphs, and assembles responses. | -| **Entity** | A type that appears in more than one subgraph. For example, both the Products and Reviews subgraphs may define a `Product` type, each contributing different fields. | -| **Lookup** | A Query field annotated with `[Lookup]` that the gateway uses to resolve an entity from a subgraph. It is a standard, callable query field -- not a hidden internal mechanism. | -| **Composition** | The offline process of validating and merging source schemas into a composite schema and gateway configuration. Runs via the Nitro CLI or Aspire, not at runtime. | +| Term | Definition | +| -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Subgraph** | An upstream service behind the Fusion gateway. A subgraph can be a GraphQL service, an OpenAPI-based REST service, or a gRPC service. | +| **Source schema** | The contract document published by one subgraph (for example a GraphQL schema, OpenAPI document, or gRPC/protobuf definition). | +| **Composite schema** | The unified, client-facing GraphQL schema produced during composition. Clients query this schema as if it were a single API. | +| **Gateway** | The public entry point for client requests. It receives queries against the composite schema, routes requests across subgraphs, and assembles responses. | +| **Entity** | GraphQL term: a type represented in more than one GraphQL subgraph. | +| **Lookup** | GraphQL term: a Query field annotated with `[Lookup]` that the gateway uses for entity resolution. | +| **Composition** | The offline step that validates source schemas and produces the composite schema and gateway configuration. Runs via the Nitro CLI or Aspire. | # When to Use Fusion @@ -100,11 +102,11 @@ Fusion adds operational complexity -- a gateway process, a composition step in y - **Multiple teams need to ship independently.** If different teams own different parts of your API (e.g., a product catalog team and a reviews team), Fusion lets each team deploy on their own schedule without coordinating schema changes through a shared codebase. -- **You need to scale services differently.** Your product search might need 10 instances while your user profile service needs 2. With separate subgraphs, you scale each service based on its actual load. +- **You need to scale services differently.** Your product search might need 10 instances while your user profile service needs 2. With separate services, you scale each one based on its actual load. -- **Your domain has clear boundaries.** If your data naturally splits into distinct areas (accounts, products, orders, reviews), subgraphs map well to those boundaries. Each subgraph owns its data store and its portion of the schema. +- **Your domain has clear boundaries.** If your data naturally splits into distinct areas (accounts, products, orders, reviews), separate services map well to those boundaries. Each service owns its data store and its API contract. -- **You want build-time validation of your distributed schema.** Composition catches conflicts between subgraphs before deployment. Your CI pipeline can validate that a schema change in one subgraph does not break the composed graph. +- **You want build-time validation of distributed contracts.** Composition catches conflicts between source schemas before deployment. Your CI pipeline can validate that a change in one service does not break the composed API. # When NOT to Use Fusion @@ -112,34 +114,34 @@ Fusion is not the right choice for every project. Be honest about whether you ne - **One team, one service.** If a single team owns the entire API and deploys it as one unit, a standard HotChocolate server is simpler and has less operational overhead. You do not need a gateway, a composition pipeline, or distributed tracing for a single service. -- **A small or early-stage API.** If your API has a handful of types and a few hundred queries per second, the added complexity of federation is not justified. Start with a monolith. You can split it later. +- **A small or early-stage API.** If your API has a handful of types and a few hundred queries per second, the added complexity of a distributed gateway setup is not justified. Start with a monolith. You can split it later. -- **No clear domain boundaries.** If your types are deeply intertwined and nearly every query touches every part of the schema, splitting into subgraphs will create more cross-service calls than it eliminates. Federation works best when subgraphs are relatively self-contained. +- **No clear domain boundaries.** If your types are deeply intertwined and nearly every query touches every part of the schema, splitting into many services will create more cross-service calls than it eliminates. Fusion works best when services are relatively self-contained. - **Your team is just getting started with GraphQL.** Learn HotChocolate first. Get comfortable with types, resolvers, DataLoaders, and the execution pipeline. Fusion adds concepts on top of that foundation -- it is easier to adopt once the basics are solid. -The cost of premature federation is real: more services to deploy, more infrastructure to monitor, harder debugging when something goes wrong. Start simple, and add Fusion when the pain of a monolith outweighs the cost of distribution. +The cost of premature distribution is real: more services to deploy, more infrastructure to monitor, harder debugging when something goes wrong. Start simple, and add Fusion when the pain of a monolith outweighs the cost of distribution. # Migrating from a Monolith -If you already have a HotChocolate server, you are closer to Fusion than you think. Your existing server is already a valid subgraph -- it just happens to be the only one. +If you already have a HotChocolate server, you can adopt Fusion incrementally. -**Start with a "graph of one."** Point the Fusion gateway at your existing HotChocolate server as a single subgraph. Composition works with one source schema. Your clients connect to the gateway instead of directly to your server, but the behavior is identical. Nothing breaks. +**Start with one upstream service.** Point the Fusion gateway at your existing HotChocolate server as the only subgraph. Composition works with one source schema. Your clients connect to the gateway instead of directly to your server, but behavior stays the same. -**Add subgraphs incrementally.** When a new team or a new domain needs its own service, create a second subgraph. The new subgraph can extend types from the original server using entity stubs. Composition merges both schemas. The gateway handles cross-subgraph queries automatically. Your original server does not change. +**Add services incrementally.** When a new team or domain needs its own service, add another subgraph. The new service can extend types from the original service with entity stubs where needed. Composition merges both source schemas, and the gateway handles cross-service execution automatically. Your original service does not need a rewrite. -**Clients see no difference.** Whether you have one subgraph or ten, the composite schema looks the same to clients. You can split your monolith over weeks or months without ever breaking the client contract. +**Clients see no difference.** Whether you have one subgraph or ten, clients still call one endpoint and keep the same query surface. You can split your monolith over weeks or months without breaking the client contract. -The key insight: federation is not a rewrite. It is a gradual process. You move types and fields to new subgraphs one at a time, and the gateway smooths over the transition. +The key insight: this is not a rewrite. It is a gradual process. You move types and fields to new services over time, and the gateway smooths over the transition. # Next Steps Where you go from here depends on what you need: -- **"I want to build something."** Start with the [Getting Started](/docs/fusion/v16/getting-started) tutorial. You will create two subgraphs and a gateway from scratch. +- **"I want to build something."** Start with the [Getting Started](/docs/fusion/v16/getting-started) tutorial. You will create two services and a gateway from scratch. -- **"I want to add a subgraph to an existing project."** Go to [Adding a Subgraph](/docs/fusion/v16/adding-a-subgraph). It covers creating a new subgraph that extends existing entity types. +- **"I want to add another service to an existing project."** Go to [Adding a Subgraph](/docs/fusion/v16/adding-a-subgraph). It covers creating a new service (subgraph) that extends existing entity types. -- **"I'm migrating from another federation framework."** Read [Coming from Apollo Federation](/docs/fusion/v16/coming-from-apollo-federation) or [Migrating from Schema Stitching](/docs/fusion/v16/migrating-from-schema-stitching). These guides map familiar concepts to Fusion equivalents and walk through a migration. +- **"I'm migrating from another distributed GraphQL framework."** Read [Coming from Apollo Federation](/docs/fusion/v16/coming-from-apollo-federation) or [Migrating from Schema Stitching](/docs/fusion/v16/migrating-from-schema-stitching). These guides map familiar concepts to Fusion equivalents and walk through a migration. - **"I need to deploy this."** See [Deployment & CI/CD](/docs/fusion/v16/deployment-and-ci-cd) for pipeline setup, schema management, and gateway configuration. From f9818311dd4764ff7b9301acbedf419db632797e Mon Sep 17 00:00:00 2001 From: Michael Staib Date: Mon, 9 Mar 2026 14:21:58 +0100 Subject: [PATCH 2/3] Add introduction --- website/src/docs/fusion/v16/index.md | 60 ++++++++---------- .../docs/shared/fusion/fusion-overview.png | Bin 0 -> 101344 bytes 2 files changed, 25 insertions(+), 35 deletions(-) create mode 100644 website/src/docs/shared/fusion/fusion-overview.png diff --git a/website/src/docs/fusion/v16/index.md b/website/src/docs/fusion/v16/index.md index e81e3815d15..d350b4180bb 100644 --- a/website/src/docs/fusion/v16/index.md +++ b/website/src/docs/fusion/v16/index.md @@ -10,28 +10,7 @@ Fusion is ChilliCream's API gateway for exposing one GraphQL API over multiple u The architecture has three parts: -```text - ┌──────────┐ - │ Client │ - └────┬─────┘ - │ - ▼ - ┌────────────────┐ - │ Fusion Gateway │ - └──┬────┬────┬───┘ - │ │ │ - ┌────────┘ │ └────────┐ - ▼ ▼ ▼ - ┌────────────┐ ┌────────────┐ ┌────────────┐ - │ Products │ │ Accounts │ │ Reviews │ - │ Service │ │ Service │ │ Service │ - └──────┬─────┘ └──────┬─────┘ └──────┬─────┘ - │ │ │ - ▼ ▼ ▼ - ┌────────────┐ ┌────────────┐ ┌────────────┐ - │ Database A │ │ Database B │ │ Database C │ - └────────────┘ └────────────┘ └────────────┘ -``` +![Fusion Architecture Overview](../../shared/fusion/fusion-overview.png) **Subgraphs** are the upstream services behind the Fusion gateway: GraphQL services, OpenAPI-based REST services, and gRPC services. Each subgraph owns part of the API surface and implementation logic, and can be developed and deployed independently. @@ -43,9 +22,10 @@ The **gateway** receives client requests, determines which subgraphs to call, ex The result: clients send one request to one endpoint and receive one unified response, while Fusion handles routing and aggregation across upstream services. +The following query touches three services, but the client doesn't know or care about this implementation detail. + ```graphql -# This query touches three services, but the client doesn't know or care. query { products(first: 5) { nodes { @@ -65,7 +45,17 @@ query { ## Three Things That Make Fusion Different -**Lookups use standard Query fields.** For GraphQL subgraphs, when the gateway needs to resolve an entity, it calls a normal Query field annotated with `[Lookup]`. You can call the same field yourself in testing, debug it with standard tools, and see exactly what it returns. There is no hidden internal protocol you need to implement. +A \*_lookup_ is a central concept in Fusion it specifies how an entity can be resolved by a stable key. This concept event transcends the federation use case and is useful on its own in the standard client/server communication. + +**Lookups use standard Query fields.** For GraphQL subgraphs, when the gateway needs to resolve an entity, it calls a normal Query field annotated with `@lookup` directive. You can call the same field yourself in testing, debug it with standard tools, and see exactly what it returns. There is no hidden internal protocol you need to implement its simply GraphQL. + +```graphql +type Query { + productById(id: ID!): Product @lookup +} +``` + +If you are using Hot Chocolate, the composite schema specification is supported by default, simply add the `[Lookup]` attribute to your resolver and you are ready to go. ```csharp [QueryType] @@ -73,7 +63,7 @@ public static partial class ProductQueries { [Lookup] public static async Task GetProductById( - int id, + [ID] int id, IProductByIdDataLoader productById, CancellationToken cancellationToken) => await productById.LoadAsync(id, cancellationToken); @@ -82,7 +72,7 @@ public static partial class ProductQueries **Composition catches errors at build time.** When you run `nitro fusion compose`, the composition engine validates source schemas against each other. Type conflicts, missing fields, and incompatible enums are caught in CI before deployment. -**No special runtime for HotChocolate subgraphs.** In the common HotChocolate setup, subgraphs are standard HotChocolate servers with normal resolvers. You do not install a separate distributed-runtime package or vendor-specific protocol layer. The GraphQL parts of this model follow the open [GraphQL Composite Schemas specification](https://graphql.github.io/composite-schemas-spec/draft/) being developed under the GraphQL Foundation. +**No special runtime for GraphQL subgraphs.** The [GraphQL Composite Schemas specification](https://graphql.github.io/composite-schemas-spec/draft/) is designed so a standard GraphQL server can already act as a compatible subgraph. In a common HotChocolate setup, subgraphs remain normal HotChocolate servers with regular resolvers, without a separate distributed-runtime package or vendor-specific protocol layer. # Key Terminology @@ -92,13 +82,13 @@ public static partial class ProductQueries | **Source schema** | The contract document published by one subgraph (for example a GraphQL schema, OpenAPI document, or gRPC/protobuf definition). | | **Composite schema** | The unified, client-facing GraphQL schema produced during composition. Clients query this schema as if it were a single API. | | **Gateway** | The public entry point for client requests. It receives queries against the composite schema, routes requests across subgraphs, and assembles responses. | -| **Entity** | GraphQL term: a type represented in more than one GraphQL subgraph. | -| **Lookup** | GraphQL term: a Query field annotated with `[Lookup]` that the gateway uses for entity resolution. | +| **Entity** | A type with a stable key that can be referenced across GraphQL subgraphs. | +| **Lookup** | A Query field annotated with a `@lookup` directive that resolves an entity by key in that subgraph. | | **Composition** | The offline step that validates source schemas and produces the composite schema and gateway configuration. Runs via the Nitro CLI or Aspire. | # When to Use Fusion -Fusion adds operational complexity -- a gateway process, a composition step in your build pipeline, distributed debugging. That complexity pays off in specific situations: +Fusion adds operational complexity, including a gateway process, a composition step in your build pipeline, and distributed debugging. That complexity pays off in specific situations: - **Multiple teams need to ship independently.** If different teams own different parts of your API (e.g., a product catalog team and a reviews team), Fusion lets each team deploy on their own schedule without coordinating schema changes through a shared codebase. @@ -110,17 +100,17 @@ Fusion adds operational complexity -- a gateway process, a composition step in y # When NOT to Use Fusion -Fusion is not the right choice for every project. Be honest about whether you need it: +Fusion is not the right choice for every project. Evaluate whether the additional complexity is justified: -- **One team, one service.** If a single team owns the entire API and deploys it as one unit, a standard HotChocolate server is simpler and has less operational overhead. You do not need a gateway, a composition pipeline, or distributed tracing for a single service. +- **One team, one service.** If one team owns the entire API and deploys it as a single unit, a standard Hot Chocolate server is simpler and has lower operational overhead. You likely do not need a gateway, a composition pipeline, or distributed tracing. -- **A small or early-stage API.** If your API has a handful of types and a few hundred queries per second, the added complexity of a distributed gateway setup is not justified. Start with a monolith. You can split it later. +- **A small or early-stage API.** If your API has a handful of types and modest traffic, a distributed gateway setup often adds more complexity than value. Start with a monolith and split later when needed. Hot Chocolate supports an incremental path from monolith to modular monolith to distributed architecture. -- **No clear domain boundaries.** If your types are deeply intertwined and nearly every query touches every part of the schema, splitting into many services will create more cross-service calls than it eliminates. Fusion works best when services are relatively self-contained. +- **No clear domain boundaries.** If your types are deeply intertwined and most queries touch most of the schema, splitting into many services can create more cross-service calls than it removes. Fusion works best when services are relatively self-contained and have clear data contracts. -- **Your team is just getting started with GraphQL.** Learn HotChocolate first. Get comfortable with types, resolvers, DataLoaders, and the execution pipeline. Fusion adds concepts on top of that foundation -- it is easier to adopt once the basics are solid. +- **Your team is just getting started with GraphQL.** Learn GraphQL and Hot Chocolate first. Get comfortable with types, resolvers, DataLoaders, and the execution pipeline. Fusion adds concepts on top of that foundation and is easier to adopt once the basics are understood. -The cost of premature distribution is real: more services to deploy, more infrastructure to monitor, harder debugging when something goes wrong. Start simple, and add Fusion when the pain of a monolith outweighs the cost of distribution. +The cost of premature distribution is real: more services to deploy, more infrastructure to monitor, and harder debugging when something goes wrong. Start simple, and add Fusion when the pain of a monolith outweighs the cost of distribution. # Migrating from a Monolith diff --git a/website/src/docs/shared/fusion/fusion-overview.png b/website/src/docs/shared/fusion/fusion-overview.png new file mode 100644 index 0000000000000000000000000000000000000000..c98c4fd8edc3e3c1b836f749e32a126e9f18af7c GIT binary patch literal 101344 zcmeFZc{mhm|39ANoU~Z#wAiUbjD)gg_ml|5NRn(7l58Qy*hZ&?%2Es>Th^>omc)#4 zTF{ITLSvap3|YruW|*;j?@^Y{d9Kgz_q(p|@B4lJc)G6VJe`@j@B4kf->>&_zn60l zYHG-{O=#PuO`CX(PU@f8v}qf3(Z%Aqn(hy zY16(oJa+P-o%fR}3qO~XB+UUxPO0RLyj0sOhnxgFuaum) zkKA!#e%YpxL;Aakm;Vv$BHhFnjcP>69 zm}o9%xw>}o4;>m?vNs80aQb$m5q+iQV}xA#Bu|qGnwgyFZx}0?-&xI!b#a|OB^vxv zs^#;X^%E`MI2TH|DaA9%H?W}x^Jw*u$TGy$iTMWsAE^kN1b>9Km{*aC`y_W*$bH%xFpOrK!SdMj}kH4IJK-VmGd#NV) z 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
dJxM?f8t_e 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 f`2XgCOI-pH Date: Mon, 9 Mar 2026 14:30:17 +0100 Subject: [PATCH 3/3] edits --- website/src/docs/fusion/v16/index.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/website/src/docs/fusion/v16/index.md b/website/src/docs/fusion/v16/index.md index d350b4180bb..63fe2147871 100644 --- a/website/src/docs/fusion/v16/index.md +++ b/website/src/docs/fusion/v16/index.md @@ -6,7 +6,7 @@ Fusion lets you split one GraphQL API into multiple smaller services, without ch # What Is Fusion -Fusion is ChilliCream's API gateway for exposing one GraphQL API over multiple upstream services. Those upstream services can be GraphQL, OpenAPI-based REST, or gRPC. Each service owns its contract and implementation. Fusion composes those contracts at build time, and the gateway orchestrates execution at runtime. Fusion implements the GraphQL Composite Schemas specification (draft), an open standard being developed under the GraphQL Foundation. +Fusion is ChilliCream's API gateway for exposing one GraphQL API over multiple upstream services. Those upstream services can be GraphQL, OpenAPI-based REST, or gRPC. Each service owns its contract and implementation. Fusion composes those contracts at build time, and the gateway orchestrates execution at runtime. Fusion implements the [GraphQL Composite Schemas specification (draft)](https://graphql.github.io/composite-schemas-spec/draft/), an open standard being developed under the GraphQL Foundation. The architecture has three parts: @@ -45,9 +45,9 @@ query { ## Three Things That Make Fusion Different -A \*_lookup_ is a central concept in Fusion it specifies how an entity can be resolved by a stable key. This concept event transcends the federation use case and is useful on its own in the standard client/server communication. +A _lookup_ is a central concept in Fusion. It specifies how an entity can be resolved by a stable key. This concept also extends beyond federation and is useful in standard client-server communication. -**Lookups use standard Query fields.** For GraphQL subgraphs, when the gateway needs to resolve an entity, it calls a normal Query field annotated with `@lookup` directive. You can call the same field yourself in testing, debug it with standard tools, and see exactly what it returns. There is no hidden internal protocol you need to implement its simply GraphQL. +**Lookups use standard Query fields.** For GraphQL subgraphs, when the gateway needs to resolve an entity, it calls a normal Query field annotated with the `@lookup` directive. You can call the same field in tests, debug it with standard tools, and see exactly what it returns. There is no hidden internal protocol to implement, and the security model is the same as for any other GraphQL field. ```graphql type Query { @@ -55,7 +55,7 @@ type Query { } ``` -If you are using Hot Chocolate, the composite schema specification is supported by default, simply add the `[Lookup]` attribute to your resolver and you are ready to go. +If you are using Hot Chocolate, support for the composite schema specification is built in. Add the `[Lookup]` attribute to your resolver and you are ready to go. ```csharp [QueryType] @@ -72,7 +72,7 @@ public static partial class ProductQueries **Composition catches errors at build time.** When you run `nitro fusion compose`, the composition engine validates source schemas against each other. Type conflicts, missing fields, and incompatible enums are caught in CI before deployment. -**No special runtime for GraphQL subgraphs.** The [GraphQL Composite Schemas specification](https://graphql.github.io/composite-schemas-spec/draft/) is designed so a standard GraphQL server can already act as a compatible subgraph. In a common HotChocolate setup, subgraphs remain normal HotChocolate servers with regular resolvers, without a separate distributed-runtime package or vendor-specific protocol layer. +**No special runtime for GraphQL subgraphs.** The [GraphQL Composite Schemas specification](https://graphql.github.io/composite-schemas-spec/draft/) is designed so a standard GraphQL server can already act as a compatible subgraph. In a common Hot Chocolate setup, subgraphs remain normal Hot Chocolate servers with regular resolvers, without a separate distributed-runtime package or vendor-specific protocol layer. # Key Terminology @@ -82,7 +82,7 @@ public static partial class ProductQueries | **Source schema** | The contract document published by one subgraph (for example a GraphQL schema, OpenAPI document, or gRPC/protobuf definition). | | **Composite schema** | The unified, client-facing GraphQL schema produced during composition. Clients query this schema as if it were a single API. | | **Gateway** | The public entry point for client requests. It receives queries against the composite schema, routes requests across subgraphs, and assembles responses. | -| **Entity** | A type with a stable key that can be referenced across GraphQL subgraphs. | +| **Entity** | A type with a stable key that can be referenced across GraphQL subgraphs. A subgraph can define an entity without resolving it locally. | | **Lookup** | A Query field annotated with a `@lookup` directive that resolves an entity by key in that subgraph. | | **Composition** | The offline step that validates source schemas and produces the composite schema and gateway configuration. Runs via the Nitro CLI or Aspire. | @@ -114,9 +114,9 @@ The cost of premature distribution is real: more services to deploy, more infras # Migrating from a Monolith -If you already have a HotChocolate server, you can adopt Fusion incrementally. +If you already have a Hot Chocolate server, you can adopt Fusion incrementally. -**Start with one upstream service.** Point the Fusion gateway at your existing HotChocolate server as the only subgraph. Composition works with one source schema. Your clients connect to the gateway instead of directly to your server, but behavior stays the same. +**Start with one upstream service.** Point the Fusion gateway at your existing Hot Chocolate server as the only subgraph. Composition works with one source schema. Your clients connect to the gateway instead of directly to your server, but behavior stays the same. **Add services incrementally.** When a new team or domain needs its own service, add another subgraph. The new service can extend types from the original service with entity stubs where needed. Composition merges both source schemas, and the gateway handles cross-service execution automatically. Your original service does not need a rewrite.