# Anjuta Architecture

libanjuta defines a component-based plugin framework for Anjuta. In its core is the shell (AnjutaShell) in which all plugins are loaded. Plugins can also merge their UI and preferences in AnjutaUI and AnjutaPreferences, respectively.

Plugins subclass AnjutaPlugin abstract class and interact with each other using predefined interfaces. They can also export objects with Values System in AnjutaShell.

Following diagram illustrates the architecture more clearly.

Figure 1. Architecture diagram

## Plugins

Plugins are components which are loaded in shell at run time. libanjuta framework provides a very generic communication framework for plugins to interact and therefore it is upto the plugins to device their own communication protocols. Essentially, it means defining clear interfaces for the plugins. Plugins can also control other plugins, like load, activate, deactivate or unload.