@leaven-graphql/leaven
v0.1.0
Published
A high-performance GraphQL library for the Bun runtime
Downloads
162
Maintainers
Readme
leaven
The meta-package that re-exports all Leaven modules - a high-performance GraphQL library for Bun.
Installation
bun add leaven graphqlOr install individual packages:
bun add @leaven-graphql/core @leaven-graphql/http @leaven-graphql/context @leaven-graphql/errorsQuick Start
import { createServer, LeavenExecutor } from 'leaven';
import { GraphQLSchema, GraphQLObjectType, GraphQLString } from 'graphql';
const schema = new GraphQLSchema({
query: new GraphQLObjectType({
name: 'Query',
fields: {
hello: {
type: GraphQLString,
resolve: () => 'Hello, world!',
},
},
}),
});
const server = createServer({
schema,
port: 4000,
playground: true,
});
server.start();
console.log('🚀 Server ready at http://localhost:4000/graphql');Included Packages
| Package | Description |
|---------|-------------|
| @leaven-graphql/core | Core execution engine |
| @leaven-graphql/http | HTTP server integration |
| @leaven-graphql/ws | WebSocket subscriptions |
| @leaven-graphql/context | Request context management |
| @leaven-graphql/errors | Error handling utilities |
| @leaven-graphql/schema | Schema building utilities |
| @leaven-graphql/plugins | Plugin system |
| @leaven-graphql/playground | GraphQL Playground |
| @leaven-graphql/nestjs | NestJS integration |
Usage
From Core
import { LeavenExecutor } from 'leaven';
const executor = new LeavenExecutor({
schema,
cache: true,
metrics: true,
});
const result = await executor.execute({
query: '{ hello }',
});From HTTP
import { createServer, createHandler } from 'leaven';
const server = createServer({
schema,
port: 4000,
playground: true,
cors: true,
});
server.start();From Context
import { createRequestContext, ContextStore } from 'leaven';
const context = createRequestContext(request);
console.log(context.requestId);From Errors
import {
AuthenticationError,
AuthorizationError,
NotFoundError
} from 'leaven';
throw new AuthenticationError('Please log in');From Schema
import { SchemaBuilder, mergeSchemas } from 'leaven';
const builder = new SchemaBuilder();
builder.addType('User', { id: 'ID!', name: 'String!' });
builder.addQuery('users', { type: '[User!]!' });
const schema = builder.build();From Plugins
import {
createLoggingPlugin,
createDepthLimitPlugin,
createComplexityPlugin
} from 'leaven';
const plugins = [
createLoggingPlugin({ logger: console }),
createDepthLimitPlugin({ maxDepth: 10 }),
createComplexityPlugin({ maxComplexity: 1000 }),
];From WebSocket
import { createPubSub } from 'leaven';
const pubsub = createPubSub();
pubsub.publish('MESSAGE_ADDED', message);
const iterator = pubsub.asyncIterator('MESSAGE_ADDED');Documentation
For full documentation, visit the Leaven Documentation.
Core Concepts
- Quick Start - Get up and running
- Executor - Core execution engine
- Schema Building - Build and merge schemas
- Request Context - Context management
Integrations
- HTTP Server - Bun HTTP integration
- WebSocket - Real-time subscriptions
- NestJS - NestJS framework integration
- Playground - GraphQL IDE
Advanced
- Plugin System - Extend with plugins
- Error Handling - Error formatting and masking
Why Leaven?
- Built for Bun - Native Bun APIs for maximum performance
- Type Safe - Full TypeScript support with strict types
- Modular - Use only what you need
- Extensible - Plugin system for customization
- Standards Compliant - Follows GraphQL specification
License
Apache 2.0 - Pegasus Heavy Industries LLC
