bramble is a free, open source api development & testing project written in Go and released under MIT. It has 512 GitHub stars, 55 forks and 28 open issues, and was last pushed 15 hours ago. On this registry it ranks #182 of 186 tracked projects in API Development & Testing, with 5 head-to-head comparisons available. It gained 1 stars over the last 30 tracked days.

What is bramble?

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

Go Reference Go Report Card codecov

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.

Frequently asked questions

Is bramble free to use?

bramble is open source under the MIT licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does bramble do?

A federated GraphQL API gateway

What is bramble written in?

bramble is primarily written in Go. Its source is publicly available at https://github.com/movio/bramble, and it has 512 GitHub stars.