<page xmlns="http://projectmallard.org/1.0/"
      type="topic"
      id="plugin-management">
  <info>

    <desc>Extending the user interface functionality with plugins</desc>
  </info>

  Plugin Management

    The <app>Entangle</app> application is intended to have a relatively simple core
    interface, providing the top 90% of features that 90% of users will wish to have.
    Features which serve a more specialized use case are to be provided via the
    plugin system. While the core of the application is written in the low level C
    programming language, the plugin system uses the higher level Python 3 language.
    The intent is to facilitate the creation of plugins by a broader group of
    users. For further information on writing and distributing plugins, consult the
    plugin development guide.

    Plugins that are distributed as part of the <app>Entangle</app> application codebase
    are always installed in the system plugin directories <file>/usr/share/entangle</file>
    and either <file>/usr/lib/entangle</file> or <file>/usr/lib64/entangle</file>. A
    user wishing to install further plugins should use the local directory
    <file>$HOME/.config/entangle/plugins/</file>. Simply download the ZIP file
    associated with the plugin, and extract it in the local plugin directory, then
    restart <app>Entangle</app>.

    When <app>Entangle</app> starts up it will scan both the system and user private
    plugin directories and attempt to load any plugin it finds, however, new plugins
    will not be activated by default. To see what plugins are available, bring up the
    preferences dialog from the <guiseq><gui>Edit</gui><gui>Preferences</gui></guiseq>
    menu, then select the <gui>Plugins</gui> tab of the dialog.

    Individual plugins can be turned on or off simply by ticking or unticking the
    checkbox along side each plugin name. If a plugin has any configurable
    preferences of its own, the <gui>Preferences</gui> button will be sensitive
    when the corresponding plugin is selected. If code changes are made to an
    existing plugin, it is sufficient to disable it and then enable it, in order
    to reload its code. There is no requirement to restart Entangle
    to reload plugins.
  
</page>
