A module is a group of files (PHP classes, test classes, configuration files, CSS files, etc) that refer to one concept and it’s written in a way that it makes it usable by other modules. Modules can be logically divided into categories where some are mandatory and necessary for running the OS and the rest either provide functionality, connectivity to external interfaces, internal communication or support development. In most cases, modules serve more than one purpose and they have a series of interrelations between them. We refer to these relationships as dependencies.
All modules are available on GitHub and each module has a dedicated git repository and release number.
Modules communicate with each other via internal APIs (facade pattern). Each module includes a part of the database schema, so when you remove a module, all tables and relations will also disappear.
Most modules have very few or absolutely no dependencies to other modules, so they can be replaced by another implementation which provides the same API. A clean dependency structure without cycles or illogicalities has a high priority in our work, meaning that you can easily replace Zed’s user management with a module that connects to your local LDAP.
The term 'bundle' has been replaced with the term 'module' to reflect the modular nature of our application.