Bramble is a production-ready, MIT-licensed federated GraphQL API gateway written in Go that aggregates multiple GraphQL services into a single endpoint for teams running federated GraphQL backends.
What it is
Bramble is an API gateway that sits in front of a set of GraphQL services and presents them to clients as one GraphQL server. It lives in the Go and GraphQL ecosystem — tagged golang, graphql, graphql-golang, graphql-server, api-gateway and federation — and is published by Movio under the MIT licence, with 511 stars and 56 forks at the time of writing. The gateway is stateless by design, and its configuration is loaded from a file passed at startup with ./bramble -config config.json.
The concrete problem it solves is federation without heavy machinery. Bramble replaces the Node.js Apollo Server gateway for teams that prefer Go and consider the full Apollo federation specification more complex than they need. It also occupies the space previously served by Nautilus, which provided a lot of inspiration for Bramble but from which Bramble has since diverged, adding fine-grained permissions, namespaces, easy plugin configuration and configuration hot-reloading. Instead of stitching schemas by hand, a team points Bramble at its GraphQL services and exposes one queryable endpoint.
Key capabilities
- Aggregates several independent GraphQL services behind a single endpoint, exposed at
http://localhost:8082/query in the bundled example.
- Supports shared types across services, so one type can be contributed to by more than one upstream service.
- Provides namespaces to group and scope federated services.
- Enforces field-level permissions at the gateway rather than inside every service.
- Ships a plugin system with JWT and CORS plugins, and allows custom plugins to be added.
- Hot-reloads configuration, so routing and plugin changes do not require a restart.
- Stays stateless, which is what makes it scale easily.
Who uses it and how
- Teams running polyglot GraphQL backends: the
examples directory wires Bramble to three services built on different stacks (nodejs, graphGophers and gqlgen) to demonstrate federation across languages.
- Platform teams that want one entry point for clients while individual service teams own their own schemas and deployments.
- Organisations standardising on Go for infrastructure and unwilling to put a Node.js runtime in the gateway tier.
- Movio, where Bramble is a central piece of software for its products, which is the reason the project is actively maintained and developed.
- Operators scaling read traffic horizontally: because the gateway holds no state, additional instances can be run side by side.
Getting started
The fastest route is the bundled docker-compose.yaml, which starts Bramble plus three example services with docker-compose up, after which a GraphQL client is pointed at http://localhost:8082/query. To build the binary directly, install Go 1.23 or newer, run go build -o bramble ./cmd/bramble, then start it with ./bramble -config config.json.
How it compares
Apollo Server is the better-known federation gateway, but Bramble exists partly because the Apollo federation specification was judged more complex than necessary and because Apollo Server is written in Node.js while Bramble's authors favour Go. Nautilus was an early inspiration, yet Bramble has since taken a different federated approach and supports fine-grained permissions, namespaces, simpler plugin configuration and configuration hot-reloading. The choice between these tools is largely a choice of runtime language and of how much of the federation specification a team wants to adopt.
When to use it — and when not to
Bramble fits teams that run several GraphQL services, prefer Go, and can work within the limits the README states plainly: subscriptions are not supported, and unions, interfaces, scalars, enums and inputs cannot be shared across services, so anyone needing either should treat that as a blocker rather than a workaround. A self-hoster must operate the gateway binary or container, maintain its configuration file, and keep the upstream services it federates running. The project currently carries 28 open issues, and the "Future work" section of the README is honest that the restriction list is real rather than temporary.
project readme (upstream, from github) — read inline


Full documentation
Bramble is a production-ready GraphQL federation gateway.
It is built to be a simple, reliable and scalable way to aggregate GraphQL services together.

Features
Bramble supports:
- Shared types across services
- Namespaces
- Field-level permissions
- Plugins:
- JWT, CORS, ...
- Or add your own
- Hot reloading of configuration
It is also stateless and scales very easily.
Future work/not currently supported
There is currently no support for:
- Subscriptions
- Shared unions, interfaces, scalars, enums or inputs across services
Check FAQ for details: https://movio.github.io/bramble/#/federation?id=restriction-on-subscription
Contributing
Contributions are always welcome!
If you wish to contribute please open a pull request. Please make sure to:
- include a brief description or link to the relevant issue
- (if applicable) add tests for the behaviour you're adding/modifying
- commit messages are descriptive
Before making a significant change we recommend opening an issue to discuss
the issue you're facing and the proposed solution.
Building and testing
Prerequisite: Go 1.23 or newer
To build the bramble command:
go build -o bramble ./cmd/bramble
./bramble -config config.json
To run the tests:
go test ./...
Running locally
There is a docker-compose file that will run bramble and three example services.
docker-compose up
The gateway will then be hosted on http://localhost:8082/query, be sure to point a GraphQL client to this address.
{
randomFoo {
nodejs
graphGophers
gqlgen
}
}
Comparison with other projects
Apollo Server
While Apollo Server is a popular tool we felt is was not the right tool for us as:
- the federation specification is more complex than necessary
- it is written in NodeJS where we favour Go
Nautilus
Nautilus provided a lot of inspiration for Bramble.
Although the approach to federation was initially similar, Bramble now uses
a different approach and supports for a few more things:
fine-grained permissions, namespaces, easy plugin configuration,
configuration hot-reloading...
Bramble is also a central piece of software for Movio
products and thus is actively maintained and developed.