A Rust GraphQL system with full support for subscriptions and authentication that works out of the box.
Pragmatic GraphQL that just works.
Diana is a GraphQL system for Rust that's designed to work as simply as possible out of the box, without sacrificing configuration ability. Unlike other GraphQL systems, Diana fully supports serverless functions and automatically integrates them with a serverful subscriptions system as needed, and over an authenticated channel. GraphQL subscriptions are stateful, and so have to be run in a serverful way. Diana makes this process as simple as possible.
Diana's documentation can be found in the book.
Getting started with Diana is really easy! Just install it by adding this to your
diana = "0.2.3"
Due to the complexity of its components, Diana does have a lot of dependencies, so you may want to go and have a cup of tea while you wait for the installation…
A while ago, I was thinking about how to get serverless GraphQL working with subscriptions. Unfortunately, you can't easily, because subscriptions are state*ful*, and so they have to be run on a server*ful* system. But there's nothing to stop a serverful subscriptions system from being connected to a serverless queries/mutations system!
Diana is a GraphQL system for Rust that does just this. It's mostly a high-level wrapper around the excellent work of async_graphql, but it adds authentication and a bridge between serverful and serverless systems.
Right now, Diana supports integration with Actix Web and AWS Lambda (including derivatives like Netlify) out of the box, with support for more platforms coming soon! You can read Diana's documentation in the book.
You can easily install Diana by adding this to your
diana = "0.2.3"
Diana is pretty easy to use, just define your configuration and set up the integration and you're good to go, with authentication built-in! There's more on how to do this in the docs here.
I've found Diana to be really useful so far for simplifying GraphQL in my own projects, so I hope it helps someone! Please open an issue on the repository if you find a bug or want to propose a new feature!