📣 GraphQLConf 2025 • Sept 08-10 • Amsterdam • Early bird tickets available & sponsorship opportunities open • Learn more
Sort by:
ballerina-graphql
The Ballerina Standard Library Package for consume GraphQL services.
README

To run a ballerina-graphql client:

  • Download and install Ballerina Language
  • Then run bal run graphql_client.bal to run the service, with this code in the graphql_client.bal file:
import ballerina/graphql;
import ballerina/io;
 
type Response record {
    record { string hello; } data;
};
 
public function main() returns error? {
    graphql:Client helloClient = check new ("localhost:9090/graphql");
    string document = "{ hello }";
    Response response = check helloClient->execute(document);
    io:println(response.data.hello);
}
Features
  • Dependently-typed response retrieval with Ballerina type inferring
  • Custom client generation support
GraphQL.Client
A GraphQL Client for .NET.
graphql-net-client
Basic example GraphQL client for .NET.
Linq2GraphQL
A straightforward Linq to GraphQL Client
README

Linq2GraphQL generates C# classes from the GraphQL schema and and togheter with the nuget package Linq2GraphQL.Client it makes it possible to query the server using Linq expressions.

A simple query that will get the first 10 orders with the primitive properties of orders and the connected customer

var orders = await sampleClient
    .Query
        .Orders(first: 10)
        .Include(e => e.Orders.Select(e => e.Customer))
        .Select(e => e.Orders)
        .ExecuteAsync();

An example mutation where we add a new customer and return the Customer Id.

 var customerId = await sampleClient
     .Mutation
     .AddCustomer(new CustomerInput
     {
         CustomerId = Guid.NewGuid(),
         CustomerName = "New Customer",
         Status = CustomerStatus.Active
     })
     .Select(e=> e.CustomerId)
     .ExecuteAsync();
SAHB.GraphQLClient
GraphQL client which supports generating queries from C# classes
Strawberry Shake
Strawberry Shake is a open-source reactive GraphQL client for .NET
README

Strawberry Shake removes the complexity of state management and lets you interact with local and remote data through GraphQL.

You can use Strawberry Shake to:

  • Generate a C# client from your GraphQL queries.
  • Interact with local and remote data through GraphQL.
  • Use reactive APIs to interact with your state.
client.GetHero
    .Watch(ExecutionStrategy.CacheFirst)
    .Subscribe(result =>
    {
        Console.WriteLine(result.Data.Name);
    })
ZeroQL
ZeroQL is a open-source GraphQL client for C#
README

The ZeroQL is a high-performance C#-friendly GraphQL client. It supports Linq-like syntax, and doesn’t require Reflection.Emit or expressions. As a result, at runtime provides performance very close to a raw HTTP call.

You can use ZeroQL to:

  • Generate a C# client from GraphQL schema.
  • Generate and execute graphql queries from your C# code.
  • Don’t require writing GraphQL manually.
  • Supports .Net Core, .Net Framework, Xamarin, Unity apps.
var userId = 10;
var response = await qlClient.Query(q => q
    .User(userId, o => new
    {
        o.Id,
        o.FirstName,
        o.LastName
    }));
regraph
A GraphQL client implemented in Clojurescript with support for websockets.
common_graphql_client
Elixir GraphQL Client with HTTP and WebSocket support
Neuron
A GraphQL client for Elixir
dillonkearns/elm-graphql
Library and command-line code generator to create type-safe Elm code for a GraphQL endpoint.
Ferry
Ferry is a simple, powerful GraphQL Client for Flutter and Dart.
graphql
A GraphQL client implementation in Flutter.
genqlient
A truly type-safe Go GraphQL client.
README

genqlient is a Go library to easily generate type-safe code to query a GraphQL API. It takes advantage of the fact that both GraphQL and Go are typed languages to ensure at compile-time that your code is making a valid GraphQL query and using the result correctly, all with a minimum of boilerplate.

genqlient provides:

  • Compile-time validation of GraphQL queries: never ship an invalid GraphQL query again!
  • Type-safe response objects: genqlient generates the right type for each query, so you know the response will unmarshal correctly and never need to use interface{}.
  • Production-readiness: genqlient is used in production at Khan Academy, where it supports millions of learners and teachers around the world.
go-graphql-client
A GraphQL Go client with Mutation, Query and Subscription support.
graphql
A GraphQL client implementation in Go.
machinebox/graphql
An elegant low-level HTTP client for GraphQL.
morpheus-graphql-client
A strongly-typed GraphQL client implementation in Haksell.
Apollo Kotlin
A strongly-typed, caching GraphQL client for the JVM, Android, and Kotlin multiplatform.
README

Apollo Kotlin (formerly known as Apollo Android) is a GraphQL client with support for Android, Java8+, iOS and Kotlin multiplatform in general. It features:

  • Java and Kotlin Multiplatform code generation
  • Queries, Mutations and Subscriptions
  • Reflection-free parsing
  • Normalized cache
  • Custom scalar types
  • HTTP cache
  • Auto Persisted Queries
  • Query batching
  • File uploads
  • Espresso IdlingResource
  • Fake models for tests
  • AppSync and graphql-ws websockets
  • GraphQL AST parser
graphql-kotlin
A set of libraries for running GraphQL client and server in Kotlin.
README

GraphQL Kotlin provides a set of lightweight type-safe GraphQL HTTP clients. The library provides Ktor HTTP client and Spring WebClient based reference implementations as well as allows for custom implementations using other engines. Jackson and kotlinx-serialization type-safe data models are generated at build time by the provided Gradle and Maven plugins.

To generate Jackson models that will be used with GraphQL Kotlin Spring WebClient, add following to your Gradle build file:

// build.gradle.kts
import com.expediagroup.graphql.plugin.gradle.graphql
 
plugins {
    id("com.expediagroup.graphql") version $latestGraphQLKotlinVersion
}
 
dependencies {
  implementation("com.expediagroup:graphql-kotlin-spring-client:$latestGraphQLKotlinVersion")
}
 
graphql {
    client {
        // target GraphQL endpoint
        endpoint = "http://localhost:8080/graphql"
        // package for generated client code
        packageName = "com.example.generated"
    }
}

By default, GraphQL Kotlin plugins will look for query files under src/main/resources. Given HelloWorldQuery.graphql sample query:

query HelloWorldQuery {
  helloWorld
}

Plugin will generate classes that are simple POJOs implementing GraphQLClientRequest interface and represent a GraphQL request.

package com.example.generated
 
import com.expediagroup.graphql.client.types.GraphQLClientRequest
import kotlin.String
import kotlin.reflect.KClass
 
const val HELLO_WORLD_QUERY: String = "query HelloWorldQuery {\n    helloWorld\n}"
 
class HelloWorldQuery: GraphQLClientRequest<HelloWorldQuery.Result> {
    override val query: String = HELLO_WORLD_QUERY
 
    override val operationName: String = "HelloWorldQuery"
 
    override fun responseType(): KClass<HelloWorldQuery.Result> = HelloWorldQuery.Result::class
 
    data class Result(
        val helloWorld: String
    }
}

We can then execute our queries using target client.

package com.example.client
 
import com.expediagroup.graphql.client.spring.GraphQLWebClient
import com.expediagroup.graphql.generated.HelloWorldQuery
import kotlinx.coroutines.runBlocking
 
fun main() {
    val client = GraphQLWebClient(url = "http://localhost:8080/graphql")
    runBlocking {
        val helloWorldQuery = HelloWorldQuery()
        val result = client.execute(helloWorldQuery)
        println("hello world query result: ${result.data?.helloWorld}")
    }
}

See graphql-kotlin client docs for additional details.

Nodes
A GraphQL JVM Client designed for constructing queries from standard model definitions. By American Express.
Apollo Client
A powerful JavaScript GraphQL client, designed to work well with React, React Native, Angular 2, or just plain JavaScript.
AWS Amplify
A JavaScript library for application development using cloud services, which supports GraphQL backend and React components for working with GraphQL data.
gq-loader
A simple JavaScript GraphQL client,Let the *.gql file be used as a module through webpack loader.
GQty
The No-GraphQL client for TypeScript.
README

GQty is a query builder, a query fetcher and a cache manager solution all-in-one.

You interact with your GraphQL endpoint via Proxy objects. Under the hood, GQty captures what is being read, checks cache validity, fetch missing contents and then updates the cache for you.

Start using GQty by simply running our interactive codegen:

# npm
npx @gqty/cli
 
# yarn
yarn dlx @gqty/cli
 
# pnpm
pnpm dlx @gqty/cli

GQty also provides framework specific integrations such as @gqty/react and @gqty/solid, which can be installed via our CLI.

Grafoo
An all purpose GraphQL client with view layer integrations for multiple frameworks in just 1.6kb.
GraphQLBox client
An extensible GraphQL client with modules for react, caching, request parsing, web workers, websockets and more...
README

The example below installs and initializes the GraphQLBox client with a persisted cache and debugging enabled.

npm install @graphql-box/core @graphql-box/client @graphql-box/request-parser @graphql-box/cache-manager @graphql-box/debug-manager @graphql-box/fetch-manager @graphql-box/helpers @cachemap/core @cachemap/reaper @cachemap/indexed-db @cachemap/constants @cachemap/types
import Cachemap from "@cachemap/core"
import indexedDB from "@cachemap/indexed-db"
import reaper from "@cachemap/reaper"
import CacheManager from "@graphql-box/cache-manager"
import Client from "@graphql-box/client"
import DebugManager from "@graphql-box/debug-manager"
import FetchManager from "@graphql-box/fetch-manager"
import RequestParser from "@graphql-box/request-parser"
import introspection from "./introspection-query"
 
const requestManager = new FetchManager({
  apiUrl: "/api/graphql",
  batchRequests: true,
  logUrl: "/log/graphql",
})
 
const client = new Client({
  cacheManager: new CacheManager({
    cache: new Cachemap({
      name: "client-cache",
      reaper: reaper({ interval: 300000 }),
      store: indexedDB(/* configure */),
    }),
    cascadeCacheControl: true,
    typeCacheDirectives: {
      // Add any type specific cache control directives in the format:
      // TypeName: "public, max-age=3",
    },
  }),
  debugManager: new DebugManager({
    environment: "client",
    log: (message, data, logLevel) => {
      requestManager.log(message, data, logLevel)
    },
    name: "CLIENT",
    performance: self.performance,
  }),
  requestManager,
  requestParser: new RequestParser({ introspection }),
})
 
// Meanwhile... somewhere else in your code
 
const { data, errors } = await client.request(queryOrMutation)
graphql-hooks
Minimal React hooks-first GraphQL client with a tiny bundle, SSR support and caching
README
  • 🥇 First-class hooks API
  • ⚖️ Tiny bundle: only 7.6kB (2.8 gzipped)
  • 📄 Full SSR support: see graphql-hooks-ssr
  • 🔌 Plugin Caching: see graphql-hooks-memcache
  • 🔥 No more render props hell
  • ⏳ Handle loading and error states with ease
Quickstart
npm install graphql-hooks

First you’ll need to create a client and wrap your app with the provider:

import { GraphQLClient, ClientContext } from "graphql-hooks"
 
const client = new GraphQLClient({
  url: "/graphql",
})
 
function App() {
  return (
    <ClientContext.Provider value={client}>
      {/* children */}
    </ClientContext.Provider>
  )
}

Now in your child components you can make use of useQuery:

import { useQuery } from "graphql-hooks"
 
const HOMEPAGE_QUERY = `query HomePage($limit: Int) {
  users(limit: $limit) {
    id
    name
  }
}`
 
function MyComponent() {
  const { loading, error, data } = useQuery(HOMEPAGE_QUERY, {
    variables: {
      limit: 10,
    },
  })
 
  if (loading) return "Loading..."
  if (error) return "Something Bad Happened"
 
  return (
    <ul>
      {data.users.map(({ id, name }) => (
        <li key={id}>{name}</li>
      ))}
    </ul>
  )
}
GraphQL-HTTP
Simple, pluggable, zero-dependency, GraphQL over HTTP spec compliant server, client and audit suite.
GraphQL Request
A simple and flexible JavaScript GraphQL client that works in all JavaScript environments (the browser, Node.js, and React Native) - basically a lightweight wrapper around fetch.
GraphQL-SSE
Zero-dependency, HTTP/1 safe, simple, GraphQL over Server-Sent Events Protocol server and client.
graphql-ts-client
GraphQL client for TypeScript, automatically infers the type of the returned data according to the strongly typed query request
GraphQL-WS
Coherent, zero-dependency, lazy, simple, GraphQL over WebSocket Protocol compliant server and client.
graphqurl
curl for GraphQL with autocomplete, subscriptions and GraphiQL. Also a dead-simple universal javascript GraphQL client.
Lokka
A simple JavaScript GraphQL client that works in all JavaScript environments (the browser, Node.js, and React Native).
nanographql
Tiny GraphQL client library using template strings.
Relay
Facebook's framework for building React applications that talk to a GraphQL backend.
README

Relay is a JavaScript framework for building data-driven React applications.

  • Declarative: Never again communicate with your data store using an imperative API. Simply declare your data requirements using GraphQL and let Relay figure out how and when to fetch your data.
  • Colocation: Queries live next to the views that rely on them, so you can easily reason about your app. Relay aggregates queries into efficient network requests to fetch only what you need.
  • Mutations: Relay lets you mutate data on the client and server using GraphQL mutations, and offers automatic data consistency, optimistic updates, and error handling.

See how to use Relay in your own project.

urql
A highly customizable and versatile GraphQL client with which you add on features like normalized caching as you grow.
README

urql is a GraphQL client that exposes a set of helpers for several frameworks. It’s built to be highly customisable and versatile so you can take it from getting started with your first GraphQL project all the way to building complex apps and experimenting with GraphQL clients.

  • Currently supports React, React Native, Preact, Svelte, and Vue, and is supported by GraphQL Code Generator.
  • Logical yet simple default behaviour and document caching, and normalized caching via @urql/exchange-graphcache
  • Fully customizable behaviour via “exchanges” (addon packages)
Diana.jl
A Julia GraphQL server implementation.
GraphQLClient.jl
A Julia GraphQL client for seamless integration with a GraphQL server
README
  • Querying, mutating and subscribing without manual writing of query strings (unless you want to!)
  • Deserializing responses directly into Julia types
  • Construction of Julia types from GraphQL objects
  • Using introspection to help with querying
Quickstart

Install with Julia’s package manager

using Pkg; Pkg.add("GraphQLClient")
using GraphQLClient

Connect to a server

client = Client("https://countries.trevorblades.com")

Build a Julia type from a GraphQL object

Country = GraphQLClient.introspect_object(client, "Country")

And query the server, deserializing the response into this new type

response = query(client, "countries", Vector{Country}, output_fields="name")

Alternatively write the query string manually

query_string = """
    {
    countries{
        name
    }
}"""
 
response = GraphQLClient.execute(client, query_string)
Ariadne Codegen
Generate fully typed Python GraphQL client from any schema and queries.
README

Install Ariadne Codegen:

$ pip install ariadne-codegen

Create queries.graphql file:

mutation CreateToken($username: String!, $password: String!) {
  createToken(username: $username, password: $password) {
    token
    errors {
      field
      message
    }
  }
}

Add [ariadne-codegen] section to your pyproject.toml:

[ariadne-codegen]
queries_path = "queries.graphql"
remote_schema_url = "http://example.com/graphql/"

Generate client:

$ ariadne-codegen

And use it in your Python projects:

from graphql_client import Client
 
with Client("http://example.com/graphql/") as client:
    result = client.create_token(username="Admin", password="Example123)
 
    if result.errors:
        error = result.errors[0]
        raise ValidationError({error.field: error.message})
 
    auth_token = result.token
GQL
A GraphQL client in Python.
graphql-query
Complete GraphQL query string generation for python.
README

graphql_query is complete GraphQL query string builder for python. With graphql_query you can The documentation for graphql_query can be found at https://denisart.github.io/graphql-query.

$ pip install graphql_query

Code for the simple query

{
  hero {
    name
  }
}

it is

from graphql_query import Operation, Query
 
hero = Query(name="hero", fields=["name"])
operation = Operation(type="query", queries=[hero])
 
print(operation.render())
"""
query {
  hero {
    name
  }
}
"""

For generation of the following query

query Hero($episode: Episode, $withFriends: Boolean!) {
  hero(episode: $episode) {
    name
    friends @include(if: $withFriends) {
      name
    }
  }
}

we have

from graphql_query import Argument, Directive, Field, Operation, Query, Variable
 
episode = Variable(name="episode", type="Episode")
withFriends = Variable(name="withFriends", type="Boolean!")
 
arg_episode = Argument(name="episode", value=episode)
arg_if = Argument(name="if", value=withFriends)
 
hero = Query(
    name="hero",
    arguments=[arg_episode],
    fields=[
        "name",
        Field(
            name="friends",
            fields=["name"],
            directives=[Directive(name="include", arguments=[arg_if])]
        )
    ]
)
operation = Operation(
    type="query",
    name="Hero",
    variables=[episode, withFriends],
    queries=[hero]
)
print(operation.render())
"""
query Hero(
  $episode: Episode
  $withFriends: Boolean!
) {
  hero(
    episode: $episode
  ) {
    name
    friends @include(
      if: $withFriends
    ) {
      name
    }
  }
}
"""
python-graphql-client
Simple GraphQL client for Python 2.7+.
ql
Non intrusive python GraphQL client wrapped around pydantic.
README

GraphQL client library, wrapped around pydantic classes for type validation, provides a safe and simple way to query data from a GraphQL API.

Features:

  • python objects to valid GraphQL string
  • scalar query responses
  • type-safety
Install
pip3 install pydantic-graphql
Qlient
A fast and modern graphql client designed with simplicity in mind.
README

Here’s an example of a qlient hello world.

first install the library:

pip install qlient

Create a swapi_client_example.py file with this content:

from qlient.http import HTTPClient, GraphQLResponse
 
client = HTTPClient("https://swapi-graphql.netlify.app/.netlify/functions/index")
 
res: GraphQLResponse = client.query.film(
    # swapi graphql input fields
    id="ZmlsbXM6MQ==",
 
    # qlient specific
    _fields=["id", "title", "episodeID"]
)
 
print(res.request.query)  # query film($id: ID) { film(id: $id) { id title episodeID } }
print(res.request.variables)  # {'id': 'ZmlsbXM6MQ=='}
print(res.data)  # {'film': {'id': 'ZmlsbXM6MQ==', 'title': 'A New Hope', 'episodeID': 4}}

Close the file and run it using python:

python swapi_client_example.py
sgqlc
A simple Python GraphQL client. Supports generating code generation for types defined in a GraphQL schema.
cynic
A bring your own types GraphQL client for Rust
README

A client library for rust that generates queries from types you provide, verifying that the types match the shape of your schema.

It provides a generator to bootstrap types from existing GraphQL queries.

Usage example:

#[derive(cynic::QueryFragment, Debug)]
#[cynic(
    schema_path = "../schemas/starwars.schema.graphql",
    query_module = "query_dsl",
    graphql_type = "Root",
    argument_struct = "FilmArguments"
)]
struct FilmDirectorQuery {
    #[arguments(id = &args.id)]
    film: Option<Film>,
}
 
#[derive(cynic::QueryFragment, Debug)]
#[cynic(
    schema_path = "../schemas/starwars.schema.graphql",
    query_module = "query_dsl",
    graphql_type = "Film"
)]
struct Film {
    title: Option<String>,
    director: Option<String>,
}
 
#[derive(cynic::FragmentArguments)]
struct FilmArguments {
    id: Option<cynic::Id>,
}
 
fn main() {
    use cynic::{QueryBuilder, http::ReqwestBlockingExt};
 
    let query = FilmDirectorQuery::build(&FilmArguments {
        id: Some("ZmlsbXM6MQ==".into()),
    })
 
    reqwest::blocking::Client::new()
        .post("https://swapi-graphql.netlify.com/.netlify/functions/index")
        .run_graphql(query)
        .unwrap()
}
 
mod query_dsl {
    cynic::query_dsl!("../schemas/starwars.schema.graphql");
}
gql_client
Minimal GraphQL client for Rust
README

Usage example

use gql_client::Client;
 
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
  let endpoint = "https://graphqlzero.almansi.me/api";
  let query = r#"
    query AllPostsQuery {
      posts {
        data {
          id
        }
      }
    }
  "#;
 
  let client = Client::new(endpoint);
  let data: AllPosts = client.query::<AllPosts>(query).await.unwrap();
 
  println!("{:?}" data);
 
  Ok(())
}
Caliban
Caliban is a functional library for building GraphQL servers and clients in Scala. It offers with client code generation and type-safe queries.
README

An example of defining a GraphQL query and running it with caliban:

// define your query using Scala
val query: SelectionBuilder[RootQuery, List[CharacterView]] =
  Query.characters {
    (Character.name ~ Character.nicknames ~ Character.origin)
      .mapN(CharacterView)
  }
 
import sttp.client3._
// run the query and get the result already parsed into a case class
val result = query.toRequest(uri"http://someUrl").send(HttpClientSyncBackend()).body
Apollo iOS
A GraphQL client for iOS that returns results as query-specific Swift types, and integrates with Xcode to show your Swift source and GraphQL side by side, with inline validation errors.
Graphaello
A Tool for Writing Declarative, Type-Safe and Data-Driven Applications in SwiftUI using GraphQL and Apollo
GraphQL iOS
An Objective-C GraphQL client for iOS.
GraphQLite iOS
GraphQLite iOS SDK is a toolkit to work with GraphQL servers easily. It also provides several other features to make life easier during iOS application development.
SwiftGraphQL
A GraphQL client that lets you forget about GraphQL.
README

SwiftGraphQL is a Swift code generator and a lightweight GraphQL client. It lets you create queries using Swift, and guarantees that every query you create is valid.

The library is centered around three core principles:

🚀 If your project compiles, your queries work. 🦉 Use Swift in favour of GraphQL wherever possible. 🌳 Your application model should be independent of your schema.

Here’s a short preview of the SwiftGraphQL code

import SwiftGraphQL
 
// Define a Swift model.
struct Human: Identifiable {
    let id: String
    let name: String
    let homePlanet: String?
}
 
// Create a selection.
let human = Selection.Human {
    Human(
        id: try $0.id(),
        name: try $0.name(),
        homePlanet: try $0.homePlanet()
    )
}
 
// Construct a query.
let query = Selection.Query {
    try $0.humans(human.list)
}
 
// Perform the query.
send(query, to: "http://swift-graphql.heroku.com") { result in
    if let data = try? result.get() {
        print(data) // [Human]
    }
}