At it's core it's a node app. Though I also include a small web server that wraps around it (and a UI frontend).
1. It allows people to write scripts (js) that receives inputs and passes on events based on an API (the strategy API)[1].
2. It has extensive configuration[2] that sometimes changes form (the config API).
3. It talks to a number of external services (crypto exchanges), over a "common" protocol called the "exchange wrapper API"[3] (I am ignoring the version of the exchange API being consumed).
4. The wrapped webserver comes with an API (REST + WS)[4].
5. The "core app" is a chain of plugins, when they change the required config/events also change (usually breaking changes 1 and 4)[5].
I could take all of these components apart (microservice way) and version them separately, but I like the monorepo style I use now where pulling one repo means that everything is working together. Also the fact that (in bug reports) people only have to refer to one version (and when on nightly maybe the git commit if I need more details).
But versioning is a mess.
[1]: https://gekko.wizb.it/docs/strategies/creating_a_strategy.ht...
[2]: https://github.com/askmike/gekko/blob/develop/sample-config....
[3]: https://gekko.wizb.it/docs/extending/add_an_exchange.html#Ge...
[4]: https://gekko.wizb.it/docs/internals/server_api.html#REST-AP...
[5]: https://gekko.wizb.it/docs/internals/events.html#List-of-eve...
-------
This is not a criticism, I typed this out in the hope that someone can point me in a sane direction (given the discussion on versioning)