This is an effort to advance the Dart GraphQL ecosystem.
It consists of multiple packages and libraries centered around GraphQL AST.
The core of this project is the GraphQL parser which parses GraphQL strings into an AST. The parsed AST can then be transformed, visited and printed back to GraphQL string.
Pub | Package | Library | Description |
---|---|---|---|
package:gql |
ast.dart |
GraphQL AST implementation with Visitor pattern and AST transformer | |
package:gql |
language.dart |
GraphQL source parser and printer. Recognizes both operations and SDL | |
package:gql |
document.dart |
Document and schema validation |
GraphQL language enables code generation to speed up development and move document processing to build-time.
We provide code builders to generate Dart source code and file builders which easily plug into standard Dart code generation pipeline.
Ideas for future work:
- Typed resolvers for field resolution on the client or server
Pub | Package | Library | Description |
---|---|---|---|
package:gql_code_builder |
Various builders | ||
package:gql_build |
File builders |
To enable development of GraphQL clients, we provide type definitions used to execute GraphQL operations. They include AST-based operation, request with per operation context, and response. These types are used by the Links.
Link is the current client implementation. Link is GraphQL AST-aware request/response middleware. They can be used to build a pipeline to deduplicate requests, conditionally transform requests and responses (including the context), and eventually send the requests to the server.
Ideas for future work:
- websocket link for subscriptions
- batched request HTTP link
- retry link to handle network issues transparently
- link for client-side request resolution
Pub | Package | Library | Description |
---|---|---|---|
package:gql_exec |
gql_exec.dart |
Implementation of types for GraphQL requests and responses | |
package:gql_link |
link.dart |
Base for modular GraphQL execution interface | |
package:gql_http_link |
gql_http_link.dart |
Link to execute GraphQL requests via HTTP | |
package:gql_dedupe_link |
gql_dedupe_link.dart |
De-duplicating Link to avoid execution of identical requests | |
package:gql_transform_link |
gql_transform_link.dart |
GQL Link to transform Requests and Responses. May be used to update context, document, variables, data, errors, etc. |
Pub | Package | Library | Description |
---|---|---|---|
package:gql_pedantic |
Lint rules used by all gql-dart/gql packages |
||
package:multipack |
Development tool to ease working in this monorepo setup |
Pub | Package | Library | Description |
---|---|---|---|
package:gql_example_cli |
Example usage in a CLI environment | ||
package:gql_example_flutter |
Example usage in a Flutter environment |
Project | Description |
---|---|
artemis | Build dart types from GraphQL schemas and queries (using Introspection Query). |
graphql | A stand-alone GraphQL client for Dart, bringing all the features from a modern GraphQL client to one easy to use package. |
graphql_flutter | A GraphQL client for Flutter, bringing all the features from a modern GraphQL client to one easy to use package. |
normalize | Normalization and denormalization of GraphQL responses in Dart |
gql_client | GraphQL Client for Dart |
graphql-to-dart | generate dart classes and respective JsonSerializable transcoders |
graphql_server | Base package for implementing GraphQL servers. |
Your project? | Open a PR to add it to this readme! |
The goal of this project is to expand Dart GraphQL ecosystem and building a community around this vendor-neutral implementation.
That said, this project is in it's early days and the best way to contribute currently is to open issues with questions about current and future scope and features of this project.
Please file feature requests and bugs at the GitHub.