---
description:
  Learn about GraphQL Mesh - a configuration-based gateway solution that supports a wide range of
  sub-services and databases for a productive and maintainable unified schema.
---

# What is the difference between Mesh, Federation, Hasura, and GraphQL Tools?

As stated in the introduction page, many approaches exist to build a GraphQL Gateway:

- creating an Apollo Server with Apollo DataSource to query sub-services
- creating a [GraphQL Gateway](https://the-guild.dev/graphql/hive/federation) from scratch using
  GraphQL tools (ex: `stitchSchemas()`)
- use Apollo Federation
- use Hasura on top of a Postgres with custom Actions

The comparison table below evaluates all those solutions based on 3 criteria:

1. How is the solution helping you build Unified Schema Gateway in a **productive and maintainable
   way**?
2. Is the solution provides all the features to build a **well-designed Unified GraphQL Schema**?
   (comprehensive, simplified abstraction of a set of sub-services)
3. Which **sub services types** the solution supports?

|                                    | Productivity / Maintainability                                                                                                               | Unified Schema design                                                                                  | Sub-services support                                                                                                                            |
| :--------------------------------: | -------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------- |
|          **GraphQL Mesh**          | 🟢<br/>Packages with a server, caching, Envelop plugins, and large sub-service types support.<br/>Configuration-based with custom resolvers. | 🟢<br/>Flexible Schema design with Transforms and custom resolvers support.                            | 🟢<br/>Support for a large range of types of sub-service and databases.                                                                         |
|         **GraphQL Tools**          | 🟠<br/>Programmatic approach at the Gateway level.<br/>Type merging makes it easier to deal with sub-services conflicts.                     | 🟢<br/>Access to all GraphQL Schema building libraries.                                                | 🟠<br/>Only supports GraphQL sub-services out of the box. Other sub-service types can be supported with Schema extensions at the Gateway level. |
| **Apollo Server with DataSources** | 🔴<br/>Requires a lot of coding and maintenance work at the DataSources level.                                                               | 🟢<br/>Access to all GraphQL Schema building libraries.                                                | 🟠<br/>Integrating with some type of sub-services might require some extra work.                                                                |
|       **Apollo Federation**        | 🟢<br/>Rover CLI and Apollo Studio. Only the Apollo Gateway needs maintenance.                                                               | 🟢<br/>Access to all GraphQL Schema building libraries.                                                | 🔴<br/>Only supports "Federation compliant" GraphQL sub-services.                                                                               |
|             **Hasura**             | 🟢<br/>Plug and play solution. Configuration-based with custom resolvers.                                                                    | 🟠<br/>The Unified Schema is directly linked to the underlying database schema or sub-services design. | 🟠<br/>Only supports GraphQL and REST sub-services and, a set of databases.                                                                     |
