High-performance GraphQL Binary Protocol (GBP) decoder and Apollo Client Link for TypeScript.
GBP is a structural binary encoding specifically designed for GraphQL responses, achieving up to 99% compression ratios by performing cross-request and intra-request structural deduplication.
- Structural Deduplication: Efficiently handles highly redundant GraphQL data.
- Columnar Encoding: Optimized for large arrays of objects.
- Ultra-Fast: ~75 MB/s decode throughput in JavaScript.
- Apollo Client Integration: Drop-in replacement for HttpLink.
- Multiple Compression: Supports raw GBP, Gzip, and LZ4.
npm install @protocol-lattice/graphql-binary-protocolFor Apollo Client support:
npm install @protocol-lattice/graphql-binary-protocol @apollo/client graphqlimport { GbpDecoder } from '@protocol-lattice/graphql-binary-protocol';
const decoder = new GbpDecoder();
// Decode raw GBP
const response = decoder.decode(uint8Array);
// Decode Gzip-compressed GBP
const gzipResponse = decoder.decodeGzip(gzipUint8Array);
// Decode LZ4-compressed GBP
const lz4Response = decoder.decodeLz4(lz4Uint8Array);
console.log(response.data);import { ApolloClient, InMemoryCache } from '@apollo/client';
import { GbpLink } from '@protocol-lattice/graphql-binary-protocol';
const client = new ApolloClient({
link: new GbpLink({
uri: 'http://localhost:4000/graphql',
// Optional: prefer specific compression
compression: 'gzip' // 'raw' | 'gzip' | 'lz4'
}),
cache: new InMemoryCache()
});
// Use as normal - GBP compression is automatic!
const { data } = await client.query({
query: gql`{ users { id name } }`
});interface GbpLinkOptions {
uri: string; // GraphQL endpoint
useGbp?: boolean; // Enable GBP (default: true)
compression?: 'raw' | 'gzip' | 'lz4'; // Preferred compression
headers?: Record<string, string>; // Additional headers
credentials?: RequestCredentials; // Fetch credentials mode
fetch?: typeof fetch; // Custom fetch (for SSR)
}| Metric | Value |
|---|---|
| Decode Throughput | ~75 MB/s |
| Compression Ratio | 90-99% |
| Bundle Size | 4KB gzipped |
GBP (v8) uses a multi-pass encoding strategy:
- String Pooling: All strings are deduplicated and indexed.
- Shape Pooling: Object keys are hashed and indexed into "shapes".
- Value Pooling: Identical sub-trees (objects/arrays) are deduplicated.
- Columnar Transformation: Large arrays of objects are transposed for better compression.
GBP encoding is provided by grpc_graphql_gateway.
MIT