GraphQL server library for Rust

GraphQL server library for Rust
[GraphQL][graphql] is a data query language developed by Facebook intended to serve mobile and web application frontends.
Juniper makes it possible to write GraphQL servers in Rust that are type-safe and blazingly fast. We also try to make declaring and resolving GraphQL schemas as convenient as Rust will allow.
Juniper does not include a web server - instead it provides building blocks to make integration with existing servers straightforward. It optionally provides a pre-built integration for the [Actix][actix], [Hyper][hyper], [Rocket], and [Warp][warp] frameworks, including embedded [Graphiql][graphiql] and [GraphQL Playground][playground] for easy debugging.
- Cargo crate
- [API Reference][docsrs]
- [Book][book]: Guides and Examples ([current][book] | [master][book_master])
Getting Started
The best place to get started is the [Juniper Book][book], which contains guides with plenty of examples, covering all features of Juniper. (very much WIP)
To get started quickly and get a feel for Juniper, check out the [Quickstart][book_quickstart] section.
For specific information about macros, types and the Juniper api, the [API Reference][docsrs] is the best place to look.
You can also check out the [Star Wars schema][testschemars] to see a complex example including polymorphism with traits and interfaces. For an example of web framework integration, see the [actix][actixexamples], [axum][axumexamples], [hyper][hyperexamples], [rocket][rocketexamples], and [warp][warp_examples] examples folders.
Features
Juniper supports the full GraphQL query language according to the [specification (October 2021)][graphql_spec], including interfaces, unions, schema introspection, and validations. It can also output the schema in the [GraphQL Schema Language][schema_language].
As an exception to other GraphQL libraries for other languages, Juniper builds non-null types by default. A field of type Vec<Episode> will be converted into [Episode!]!. The corresponding Rust type for e.g. [Episode] would be Option<Vec<Option<Episode>>>.
Juniper is agnostic to serialization format and network transport.
Juniper supports both asynchronous and synchronous execution using execute() and execute_sync() respectively. Asynchronous execution is runtime agnostic.
Juniper follows a [code-first approach][schemaapproach] to defining GraphQL schemas. If you would like to use a [schema-first approach][schemaapproach] instead, consider [juniper-from-schema][] for generating code from a schema file.
Integrations
Data types
Juniper has automatic integration with some very common Rust crates to make building schemas a breeze. The types from these crates will be usable in your Schemas automatically.
- [uuid][uuid]
- [url][url]
- [chrono][chrono]
- [chrono-tz][chrono-tz]
- [jiff][jiff]
- [time][time]
- [bson][bson]
Web Frameworks
- [actix][actix]
- [axum][axum]
- [hyper][hyper]
- [rocket][rocket]
- [warp][warp]
Guides & Examples
API Stability
Juniper has not reached 1.0 yet, thus some API instability should be expected.
[actix]: https://actix.rs/ [axum]: https://docs.rs/axum [graphql]: http://graphql.org [graphiql]: https://github.com/graphql/graphiql [playground]: https://github.com/prisma/graphql-playground [graphql_spec]: https://spec.graphql.org/October2021 [schema_language]: https://graphql.org/learn/schema/#type-language [schema_approach]: https://blog.logrocket.com/code-first-vs-schema-first-development-graphql/ [testschemars]: https://github.com/graphql-rust/juniper/blob/master/juniper/src/tests/fixtures/starwars/schema.rs [tokio]: https://github.com/tokio-rs/tokio [actixexamples]: https://github.com/graphql-rust/juniper/tree/master/juniperactix/examples [axumexamples]: https://github.com/graphql-rust/juniper/tree/master/juniperaxum/examples [hyperexamples]: https://github.com/graphql-rust/juniper/tree/master/juniperhyper/examples [rocketexamples]: https://github.com/graphql-rust/juniper/tree/master/juniperrocket/examples [hyper]: https://hyper.rs [rocket]: https://rocket.rs [book]: https://graphql-rust.github.io/juniper [book_master]: https://graphql-rust.github.io/juniper/master [book_index]: https://graphql-rust.github.io/juniper [book_quickstart]: https://graphql-rust.github.io/juniper/quickstart.html [docsrs]: https://docs.rs/juniper [warp]: https://github.com/seanmonstar/warp [warpexamples]: https://github.com/graphql-rust/juniper/tree/master/juniperwarp/examples [uuid]: https://crates.io/crates/uuid [url]: https://crates.io/crates/url [chrono]: https://crates.io/crates/chrono [chrono-tz]: https://crates.io/crates/chrono-tz [jiff]: https://crates.io/crates/jiff [time]: https://crates.io/crates/time [bson]: https://crates.io/crates/bson [juniper-from-schema]: https://github.com/davidpdrsn/juniper-from-schema