The evolution of GraphQL frameworks18 Jul 2020
The origins of GraphQL #
The first GraphQL-focused companies emerge #
Graphcool, founded in 2016, was one of the earliest companies to develop frameworks and systems that accelerated and made possible wider adoption of GraphQL in applications. Graphcool developed a framework comprised of a GraphQL database that could be hosted on the Graphcool Cloud, essentially a backend-as-a-service (BAAS). While this service was easy to use, it wasn't flexible or powerful enough for all use cases.
Apollo is another major player, founded by the same founders who brought us the Meteor framework. Apollo-server v1 was announced in July 2017, and brought a complete backend that was open source and extensible.
Client-side libraries #
To accommodate these server-side libraries, client-side libraries soon followed that enabled web frontends, mobile apps, and other clients to be able to easily consume GraphQL APIs.
[Apollo-client] reached v1 on March 30, 2017. Apollo-client v2 (released October 2017) was rewritten to be much more modular, and moved to using observables instead of promises. It also introduced Apollo-link as a client-side network layer.
Server-side libraries continue to evolve #
In January 2018, Graphcool released a new library called Prisma, a GraphQL layer over the database.
On May 15, 2018, Graphcool rebranded as Prisma to focus on the "engine" that originally powered Graphcool, allowing developers to build their own backend systems using a powerful database querying layer with GraphQL.
Apollo-engine was in conjunction with Apollo-client v2, enabling monitoring and visualizing the health and errors of applications.
Apollo-server 2.0 was released in July 2018. Compared to the first version of Apollo-server, it focused on improving developer experience, including best development patterns for common uses, and further abstractions.
Apollo-server v2 seems to have taken a lot of inspiration from Graphql-yoga, so much so that graphql yoga has effectively been deprecated.
GraphiQL is the reference implementation of the GraphQL IDE.
Prisma's GraphQL Playground then joined forces with GraphiQL, so that Playground 2.0 would be integrated.
Graphcool also introduced graphql-yoga which sought to eliminate the boilerplate and manual work in configuring
Apollo Federation is an infrastructure-level technology. It allows microservices to individually implement separate schemas, and uses a "gateway" to present a unified API to the client.
Prisma 2.0 was released in Jan 21, 2020, after a rename: Photon.js became Prisma Client, and Lift became Prisma Migrate.
Even Amazon has jumped in with AWS Appsync in November 2017, offering real-time data sync between web and mobile applications, as a fully-managed hosted GraphQL solution.
Apollo-boost which advertises to be "The fastest, easiest way to get started with Apollo Client!" contains
apollo-link, the in-memory cache, and more, is a fast way to get started with Apollo-client.
Present day news #
Apollo-client is now on v3.0 which focused the library on caching.
Nexus was originally created by Tim Griesser. On February 5, 2020, the original nexus transitioned to becoming
@nexus/schema. And the Nexus package itself became a framework on top of
@nexus/schema and moved to a new site, https://nexusjs.org/. This aligned with a new line of thinking around how to best develop GraphQL software, a shift from schema-first to code-first.
Update (10/1/2020): Nexus Framework is now no longer maintained, so that the Nexus team could focus on
@nexus/schema again. The nexus plugin for prisma will continue to work.
Update (10/9/2020): trojanowski/react-apollo-hooks became deprecated in Aug. 2019 when the official react-apollo hooks released a stable version, which then was moved inside Apollo Client in January 2020.
Alternative frameworks #
On the other hand, there are software that seek to be a batteries-included GraphQL API layer over an existing database, with little or no configuration or coding involved, such as Hasura and Postgraphile, both of which are open-source.
Blitz.js aims to entirely remove the concept of an API, enabled by full server-side rendering and templating with Next.js.
Redwood.js aims to be a fully serverless platform.
The future looks bright #
GraphQL tooling is still in its youth, and the future looks pretty exciting.