Architecture
============

Baleen CLI uses a series of 3rd-party components to power its functionality and make it as flexible as possible. Here's
a quick overview of the main components being used and how. Throughout the rest of the guide we will assume you know
how those components work, so we recommend reading up on each component's documentation on an as-needed basis.

Core Components
---------------

:php:ns:`Baleen\\Migrations`
    See section below.

:php:ns:`League\\Container`
    Allows for easy customization of almost every aspect of the framework.

:php:ns:`League\\Flysystem`
    For filesystem operations (e.g. read/write config).

:php:ns:`League\\Tactician`
    More about it in the :doc:`commands` section.

:php:ns:`Symfony\\Config`
    More about it in the :doc:`configuration` section.

:php:ns:`Symfony\\Console`
    Command-line wrapper.

Migrations
----------

Migrations are powered by the Baleen Migrations "domain library", and therefore a lot of the architectural concepts
from that library also apply to Baleen CLI. We recommend reading up on the Baleen Migrations documentation for a better
understanding of how this library works. For example, you might want to know what the "Storage" is meant to do.
