> For the complete documentation index, see [llms.txt](https://docs.lmms.io/developer-guides/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.lmms.io/developer-guides/core/the-structure-of-the-lmms-core/initializations-and-cleanups.md).

# Initializations and cleanups

### Initialization

The following steps are the outline of the startup steps of LMMS:

1. Parse command-line arguments to check if LMMS needs GUI.
2. Initialize `QCoreApplication` for command-line-only tasks, `MainApplication` otherwise.
3. Complete parsing command-line arguments.
4. Setup miscellaneous environments, e.g., RNG, HiDPI scaling.
5. Load the configuration file and translations.
6. Initialize the core by calling `Engine::init()` for CLI cases. When running with GUI, `GuiApplication` will initialize it later.
7. Complete remaining steps.
   * For command-line tasks, handle it in the `main()`.
   * Otherwise:
   * Start the GUI by instantiating `GuiApplication`.
   * Show the GUI and create/load a project.

### Main routine

After initializing everything, LMMS runs the main event loop by calling `app->exec()`. Once the event loop returns, the cleanup steps start.

### Cleanup

The following steps are the outline of the shutdown steps of LMMS:

1. Delete the application instance(either `QCoreApplication` or `MainApplication`)
2. In the CLI case, destroy the core. It's not the case if the GUI was launched because the destructor of `MainWindow` calls `Engine::destroy()`.
