Rootsystem starts the first time a server.garden system boots, and it uses provided credentials and options to create, plan & apply multiple [terraform](https://www.terraform.io/) projects based on its own collection of terraform modules & [ansible](https://www.ansible.com/) roles. It is responsible for installing and configuring the required base-system components of a server.garden datacenter, such as:
Rootsystem will create one `terraform-global` project first, where it configures DNS entries and an optional cloud instance to act as an ingress gateway.
Then, it will create a `terraform-local-<node-name>` project on each node, which will set up node-specific elements of the system, both in the cloud (node-specific DNS entries, threshold configurations, etc) and locally on the node itself.
In the future, rootsystem will also have a continuous-integration-ish role, where it handles configuration changes as they are posted & re-runs builds as needed.
Rootsystem has no user-interface of its own, however, it is tightly coupled to the [seedpacket](https://git.sequentialread.com/forest/seedpacket) desktop application. Rootsystem posts status updates to object storage, which seedpacket can read & display to the user in real time via polling.