a high-performance graphql server library that's fully specification compliant
Feature Comparison • Book • 中文文档 • Docs • GitHub repository • Cargo package
This crate uses #![forbid(unsafe_code)]
to ensure everything is implemented in 100% safe Rust.
struct Query;
#[Object]
impl Query {
fn howdy(&self) -> &'static str {
"partner"
}
}
async fn main() {
let schema = Schema::build(Query, EmptyMutation, EmptySubscription).finish();
let app = Route::new()
.at("/",
get(graphiql)
.post(GraphQL::new(schema))
);
println!("GraphiQL: http://localhost:8000");
Server::new(TcpListener::bind("0.0.0.0:8000"))
.run(app)
.await
.unwrap();
}
- Fully supports async/await
- Type safety
- Rustfmt friendly (Procedural Macro)
- Custom scalars
- Minimal overhead
- Easy integration (poem, actix_web, tide, warp, rocket ...)
- Upload files (Multipart request)
- Subscriptions (WebSocket transport)
- Custom extensions
- Error extensions
- Limit query complexity/depth
- Batch queries
- Apollo Persisted Queries
- Apollo Tracing extension
- Apollo Federation
Note: Minimum supported Rust version: 1.59.0 or later
All examples are in the sub-repository, located in the examples directory.
git submodule update # update the examples repo
cd examples && cargo run --bin [name]
Integrations are what glue async-graphql
with your web server, here are provided ones, or you can build your own!
- Poem async-graphql-poem
- Actix-web async-graphql-actix-web
- Warp async-graphql-warp
- Tide async-graphql-tide
- Rocket async-graphql-rocket
- Axum async-graphql-axum
This crate offers the following features, all of which are not activated by default:
feature | enables |
---|---|
apollo_tracing |
Enable the Apollo tracing extension. |
apollo_persisted_queries |
Enable the Apollo persisted queries extension. |
log |
Enable the logger extension. |
tracing |
Enable the tracing extension. |
opentelemetry |
Enable the OpenTelemetry extension. |
unblock |
Support asynchronous reader for Upload |
bson |
Integrate with the bson crate. |
chrono |
Integrate with the chrono crate. |
chrono-tz |
Integrate with the chrono-tz crate. |
url |
Integrate with the url crate. |
uuid |
Integrate with the uuid crate. |
uuid08 |
Integrate with the uuid 0.8 crate. |
string_number |
Enable the StringNumber. |
dataloader |
Support DataLoader. |
secrecy |
Integrate with the secrecy crate. |
decimal |
Integrate with the rust_decimal crate. |
bigdecimal |
Integrate with the bigdecimal crate. |
cbor |
Support for serde_cbor. |
smol_str |
Integrate with the smol_str crate. |
hashbrown |
Integrate with the hashbrown crate. |
time |
Integrate with the time crate. |
tokio-sync |
Integrate with the tokio::sync::RwLock and tokio::sync::Mutex . |
fast_chemail |
Integrate with the fast_chemail crate. |
One of the tools used to monitor your graphql server in production is Apollo Studio. Apollo Studio is a cloud platform that helps you build, monitor, validate, and secure your organization's data graph.
Add the extension crate async_graphql_apollo_studio_extension
to make this avaliable.
- Vector
- DiveDB
- Kairos Sports tech
- AxieInfinity
- Nando's
- Prima.it
- VoxJar
- Zenly
- Brevz
- thorndyke
- My Data My Consent
- rust-actix-graphql-sqlx-postgresql Using GraphQL with Rust and Apollo Federation
- entity-rs A simplistic framework based on TAO, Facebook's distributed database for Social Graph.
- vimwiki-server Provides graphql server to inspect and manipulate vimwiki files.
- Diana Diana is a GraphQL system for Rust that's designed to work as simply as possible out of the box, without sacrificing configuration ability.
- cindythink
- sudograph
- Async GraphQL with Rust
- GraphQL in Rust
- How to implement a Rust micro-service using Rocket, GraphQL, PostgreSQL
- Running GraphQL on Lambda with Rust
- GraphQL
- GraphQL Multipart Request
- GraphQL Cursor Connections Specification
- GraphQL over WebSocket Protocol
- Apollo Tracing
- Apollo Federation
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT) at your option.