Benzene is a new take on GraphQL server that gives us the control we need while staying blazing fast.
Features
The @benzene/http
and @benzene/ws
packages allow us to build a full-featured GraphQL server, featuring:
- Super minimal (~4kB) and performant.
@benzene/http
and@benzene/ws
purely wrap@benzene/core
, which includes minimal dependencies and features no third-party integrations, thus avoiding unnecessary overheads. - Transport & Framework agnostic. Each package features generic Request, Response, or WebSocket interfaces to easily plug into any JavaScript frameworks or runtimes: Node.js, Deno, Cloudflare Worker, etc.
- Customizable runtime. Use custom GraphQL implementation such as
graphql-jit
or rolling our own for performance and cutting-edge features. - Unopinionated and observable APIs. Benzene does not include any middleware or configurations, so we can be in total control of logging, parsing, and error handling.
- Unified pipeline. Write error handling or context creation function only once. Every transport handler inherits the same Benzene instance and takes advantage of its shared configuration.
- Fully extensible. Despite not being battery-included, it can be extended with recipes (like Persisted queries) or @benzene/extra.
We are taking an approach opposite to Apollo Server, which abstracts everything behind its applyMiddleware
function that includes unexpected and hard-to-customized "defaults".
While our approach requires a bit more boilerplate, we achieve an observable and customizable server integration.
Documentation
Documentation is available at benzene.vercel.app
There is also a Getting Started section
which shows how to build a real-time book voting app using both @benzene/http
and @benzene/ws
.
Examples
There are also various examples for integrations with different tools and frameworks.
Contributing
This repository uses the new npm v7 workspaces (yarn 1 workspace may also work). Please see contributing.md.