Modules load in dependency order: a module that requires another module always initializes after it. Modules publish services to each other — the settings module publishes the settings store, the installer module publishes the game installer, and the launcher builds on both. If a required module is missing or fails, the depending module is skipped with a reason in the console, and CT-Main keeps running with the rest.
Minimal setups: only settings + installer + versions + launcher is enough to install and launch the game. Add account-offline or account-microsoft for accounts, console to watch the output, and modman plus ctloader to manage and load mods.
Modules are jars with a ct.module.json manifest and a small installer entry point, which is what makes them runnable. CT-Main loads any jar that follows the manifest format, so you can write your own: build a runnable module walks through it from an empty folder, and the API page documents what a module can use.