Skip to content


An application built using tremor (and the new linked transports feature new in 0.9) allowing for centralized configuration across services and their component nodes.

This is an exploration project meant to push what we can do with the current tremor feature set and as such, there are/will be rough edges.



All the application code here is available from the docs git repository.

# start everything
docker-compose up

Following services should be now accessible:

Using the Configurator

List routes

$ curl http://localhost:9139

      Welcome to the Configurator!

      Available routes:

      GET /services
      POST /service/<id>

      HEAD /ping
      GET /stats


List services

$ curl http://localhost:9139/services


Set service configuration

# change quotas for the quota service
$ curl -XPOST -H'Content-Type: application/json' http://localhost:9139/service/quota_service -d'{"application_default": 11}'

# should have now applied to all the nodes in the quota service.
# if the delivery fails on a node (eg: it's down or there's network issues), it will be retried until it's successful
# (this works even if the configurator gets restarted during the process, since the undelivered updates are stored on disk)

$ curl http://localhost:8139/quotas

$ curl http://localhost:8140/quotas

Debug request

$ curl -XPOST localhost:9139/echo -d'{"snot": "badger"}'

{"body":"{\"snot\": \"badger\"}","meta":{"method":"POST","headers":{"content-length":["18"],"content-type":["application/x-www-form-urlencoded"],"user-agent":["curl/7.65.3"],"accept":["*/*"],"host":["localhost:9139"]},"url":{"scheme":"http","host":"localhost","port":9139,"path":"/echo"}}}


  • aggregate responses from service constituents (from tremor-script for now)
  • explore pull model for configuration sync
  • generate per-service config routes from openapi specs
  • templatize new service addition/boilerplate

In the context of configuring tremor nodes, problems around configuration sync/distribution will be easier to solve after tremor becomes truly clustered, but for now, we can try and tackle it with what we have and see how far we go (eg: via guaranteed delivery or periodic updates).