# 4.1. Overview

The main component is `alot.ui.UI`, which provides methods for user input and notifications, sets up the widget tree and maintains the list of active buffers. When you start up alot, `init.py` initializes logging, parses settings and commandline args and instantiates the `UI` instance of that gets passes around later. From its constructor this instance starts the `urwid` `mainloop` that takes over.

Apart from the central `UI`, there are two other “managers” responsible for core functionalities, also set up in `init.py`:

- `ui.dbman`: a `DBManager` to access the email database and

- `alot.settings.settings`: a `SettingsManager` oo access user settings

Every user action, triggered either by key bindings or via the command prompt, is given as commandline string that gets `translated` to a `Command` object which is then `applied`. Different actions are defined as a subclasses of `Command`, which live in `alot/commands/MODE.py`, where MODE is the name of the mode (`Buffer` type) they are used in.