Benzene

Fast, minimal, agnostic GraphQL Server

README

Stereo


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](https://github.com/zalando-incubator/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 itsapplyMiddleware 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.

License