2018-09-13 13:56:18 -05:00
< img src = "https://github.com/graphql-rust/juniper/raw/master/assets/logo/juniper-dark-word.png" alt = "Juniper" width = "500" / >
2017-09-23 12:20:54 -05:00
2016-09-11 11:41:29 -05:00
> GraphQL server library for Rust
2018-10-08 16:45:49 -05:00
[![Build Status ](https://dev.azure.com/graphql-rust/GraphQL%20Rust/_apis/build/status/graphql-rust.juniper )](https://dev.azure.com/graphql-rust/GraphQL%20Rust/_build/latest?definitionId=1)
2017-11-18 07:02:49 -06:00
[![codecov ](https://codecov.io/gh/graphql-rust/juniper/branch/master/graph/badge.svg )](https://codecov.io/gh/graphql-rust/juniper)
2016-10-09 09:55:18 -05:00
[![Crates.io ](https://img.shields.io/crates/v/juniper.svg?maxAge=2592000 )](https://crates.io/crates/juniper)
2023-08-24 17:40:15 -05:00
[![Gitter chat ](https://badges.gitter.im/juniper-graphql/gitter.svg )](https://gitter.im/juniper-graphql/Lobby)
2016-09-11 11:48:53 -05:00
2016-09-11 11:41:29 -05:00
---
[GraphQL][graphql] is a data query language developed by Facebook intended to
2018-09-05 12:51:09 -05:00
serve mobile and web application frontends.
2017-12-02 09:09:08 -06:00
2018-10-08 16:45:49 -05:00
_Juniper_ makes it possible to write GraphQL servers in Rust that are
2018-09-05 12:51:09 -05:00
type-safe and blazingly fast. We also try to make declaring and resolving
2020-02-21 00:22:40 -06:00
GraphQL schemas as convenient as Rust will allow.
2016-09-11 11:41:29 -05:00
Juniper does not include a web server - instead it provides building blocks to
make integration with existing servers straightforward. It optionally provides a
2020-04-21 12:31:35 -05:00
pre-built integration for the [Actix][actix], [Hyper][hyper], [Iron][iron], [Rocket], and [Warp][warp] frameworks, including
2019-01-25 22:58:01 -06:00
embedded [Graphiql][graphiql] and [GraphQL Playground][playground] for easy debugging.
2016-09-11 11:41:29 -05:00
2018-10-08 16:45:49 -05:00
- [Cargo crate ](https://crates.io/crates/juniper )
- [API Reference][docsrs]
2019-05-14 09:04:29 -05:00
- [Book][book]: Guides and Examples ([current][book] | [master][book_master])
2017-06-15 09:53:27 -05:00
2019-03-23 08:17:25 -05:00
The book is also available for the master branch and older versions published after 0.11.1. See the [book index][book_index].
2017-12-02 09:09:08 -06:00
## Getting Started
2017-08-28 01:02:56 -05:00
2018-09-05 12:51:09 -05:00
The best place to get started is the [Juniper Book][book], which contains
2017-12-03 06:12:41 -06:00
guides with plenty of examples, covering all features of Juniper. (very much WIP)
2016-09-11 11:41:29 -05:00
2018-09-05 12:51:09 -05:00
To get started quickly and get a feel for Juniper, check out the
2017-12-02 09:09:08 -06:00
[Quickstart][book_quickstart] section.
2016-09-11 11:41:29 -05:00
2018-09-05 12:51:09 -05:00
For specific information about macros, types and the Juniper api, the
2017-12-02 09:09:08 -06:00
[API Reference][docsrs] is the best place to look.
2016-09-11 11:41:29 -05:00
2020-08-01 18:54:35 -05:00
You can also check out the [Star Wars schema][test_schema_rs] to see a complex
example including polymorphism with traits and interfaces.
2018-09-05 12:51:09 -05:00
For an example of web framework integration,
2020-04-21 12:31:35 -05:00
see the [actix][actix_examples], [hyper][hyper_examples], [rocket][rocket_examples], [iron][iron_examples], and [warp][warp_examples] examples folders.
2016-09-11 11:41:29 -05:00
2017-12-02 09:09:08 -06:00
## Features
2016-09-11 11:41:29 -05:00
2017-12-02 09:09:08 -06:00
Juniper supports the full GraphQL query language according to the
2022-06-28 10:32:08 -05:00
[specification (October 2021)][graphql_spec], including interfaces, unions, schema
2020-06-05 22:43:11 -05:00
introspection, and validations. It can also output the schema in the [GraphQL Schema Language][schema_language].
2016-09-11 11:41:29 -05:00
2017-12-02 09:09:08 -06:00
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>>>` .
2016-09-11 11:41:29 -05:00
2021-07-08 02:25:31 -05:00
Juniper is agnostic to serialization format and network transport.
2021-07-06 18:33:30 -05:00
Juniper supports both asynchronous and synchronous execution using `execute()` and `execute_sync()` respectively. Asynchronous execution is runtime agnostic.
2020-06-05 22:43:11 -05:00
Juniper follows a [code-first approach][schema_approach] to defining GraphQL schemas. If you would like to use a [schema-first approach][schema_approach] instead, consider [juniper-from-schema][] for generating code from a schema file.
2017-12-02 09:09:08 -06:00
## Integrations
2016-09-11 11:41:29 -05:00
2017-12-02 09:09:08 -06:00
### Data types
2016-09-11 11:41:29 -05:00
2017-12-02 09:09:08 -06:00
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.
2016-09-11 11:41:29 -05:00
2018-10-08 16:45:49 -05:00
- [uuid][uuid]
- [url][url]
- [chrono][chrono]
2020-10-19 07:30:17 -05:00
- [chrono-tz][chrono-tz]
2021-12-16 14:43:15 -06:00
- [time][time]
2020-02-13 00:49:50 -06:00
- [bson][bson]
2016-09-11 11:41:29 -05:00
2017-12-02 09:09:08 -06:00
### Web Frameworks
2016-09-11 11:41:29 -05:00
2020-04-21 12:31:35 -05:00
- [actix][actix]
2023-11-09 04:57:00 -06:00
- [axum][axum]
2018-10-08 16:45:49 -05:00
- [hyper][hyper]
- [rocket][rocket]
- [iron][iron]
- [warp][warp]
2016-09-11 11:41:29 -05:00
2018-04-29 07:58:38 -05:00
## Guides & Examples
2021-02-25 20:57:45 -06:00
- [Juniper + actix-web example ](https://github.com/actix/examples/tree/master/graphql/juniper )
2016-09-11 11:41:29 -05:00
## API Stability
Juniper has not reached 1.0 yet, thus some API instability should be expected.
2020-04-21 12:31:35 -05:00
[actix]: https://actix.rs/
2023-11-09 04:57:00 -06:00
[axum]: https://docs.rs/axum
2016-09-11 11:41:29 -05:00
[graphql]: http://graphql.org
2017-12-02 09:09:08 -06:00
[graphiql]: https://github.com/graphql/graphiql
2019-01-25 22:58:01 -06:00
[playground]: https://github.com/prisma/graphql-playground
2021-03-01 21:26:44 -06:00
[iron]: https://github.com/iron/iron
2022-06-28 10:32:08 -05:00
[graphql_spec]: https://spec.graphql.org/October2021
2020-06-05 22:43:11 -05:00
[schema_language]: https://graphql.org/learn/schema/#type-language
[schema_approach]: https://blog.logrocket.com/code-first-vs-schema-first-development-graphql/
2020-08-01 18:54:35 -05:00
[test_schema_rs]: https://github.com/graphql-rust/juniper/blob/master/juniper/src/tests/fixtures/starwars/schema.rs
2016-09-11 11:41:29 -05:00
[tokio]: https://github.com/tokio-rs/tokio
2020-04-21 12:31:35 -05:00
[actix_examples]: https://github.com/graphql-rust/juniper/tree/master/juniper_actix/examples
2018-09-05 12:51:09 -05:00
[hyper_examples]: https://github.com/graphql-rust/juniper/tree/master/juniper_hyper/examples
2017-12-02 09:09:08 -06:00
[rocket_examples]: https://github.com/graphql-rust/juniper/tree/master/juniper_rocket/examples
[iron_examples]: https://github.com/graphql-rust/juniper/tree/master/juniper_iron/examples
2018-10-08 16:45:49 -05:00
[hyper]: https://hyper.rs
[rocket]: https://rocket.rs
2021-12-09 10:07:46 -06:00
[book]: https://graphql-rust.github.io
2019-05-14 09:04:29 -05:00
[book_master]: https://graphql-rust.github.io/juniper/master
2021-12-09 10:07:46 -06:00
[book_index]: https://graphql-rust.github.io
[book_quickstart]: https://graphql-rust.github.io/quickstart.html
2017-12-02 09:09:08 -06:00
[docsrs]: https://docs.rs/juniper
2018-09-07 16:28:56 -05:00
[warp]: https://github.com/seanmonstar/warp
[warp_examples]: https://github.com/graphql-rust/juniper/tree/master/juniper_warp/examples
2017-12-02 09:09:08 -06:00
[uuid]: https://crates.io/crates/uuid
[url]: https://crates.io/crates/url
[chrono]: https://crates.io/crates/chrono
2020-10-19 07:30:17 -05:00
[chrono-tz]: https://crates.io/crates/chrono-tz
2021-12-16 14:43:15 -06:00
[time]: https://crates.io/crates/time
2020-02-13 00:49:50 -06:00
[bson]: https://crates.io/crates/bson
2019-07-19 15:19:42 -05:00
[juniper-from-schema]: https://github.com/davidpdrsn/juniper-from-schema