  <chapter id="anjuta-architecture">
  	<title>Anjuta Architecture</title>
	<para>
		libanjuta defines a component-based plugin framework for Anjuta. In
		its core is the shell
		(<link linkend="AnjutaShell"><type>AnjutaShell</type></link>)
		in which all plugins are loaded. Plugins can also merge
		thier UI and preferences in
		<link linkend="AnjutaUI"><type>AnjutaUI</type></link>
		and
		<link linkend="AnjutaPreferences"><type>AnjutaPreferences</type></link>,
		respectively.
	</para>
	<para>
		Plugins subclass <link linkend="AnjutaPlugin"><type>AnjutaPlugin</type></link>
		abstract class and interact with each other using predefined interfaces.
		They can also export objects with <emphasis>Values Sytem</emphasis> in
		<link linkend="AnjutaShell"><type>AnjutaShell</type></link>.
	</para>
	<para>
		Following diagram illustrates the architecture more clearly.
		<figure id="anjuta-architecture-diagram">
			<title>Architecture diagram</title>
			<mediaobject>
				<imageobject>
					<imagedata fileref="anjuta-architecture.png" format="PNG"/>
				</imageobject>
			</mediaobject>
		</figure>
	</para>
	<sect1>
		<title>Plugins</title>
		<para>
			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.
		</para>
	</sect1>
  </chapter>
