Bramble is a production-ready GraphQL federation gateway. It is built to be a simple, reliable and scalable way to aggregate GraphQL services together.
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.
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
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.
Prerequisite: Go 1.17 or newer
To build the bramble
command:
go build -o bramble ./cmd/bramble
./bramble -conf config.json
To run the tests:
go test ./...
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
}
}
-
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 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.