The basic mechanics of extending the workbench requires first creating an Ide.WorkbenchAddin. Your subclass will created for each instance of the Ide.Workbench. This conveniently allows you to track the state needed for your plugin for each workbench.

A Basic WorkbenchAddin to demonstrate scaffolding
import gi

from gi.repository import GObject
from gi.repository import Ide

class BasicWorkbenchAddin(GObject.Object, Ide.WorkbenchAddin):

    def do_load(self, workbench: Ide.Workbench):

    def do_unload(self, workbench: Ide.Workbench):

    def do_workspace_added(self, workspace: Ide.Workspace):

    def do_workspace_removed(self, workspace: Ide.Workspace):

class BasicWorkspaceAddin(GObject.Object, Ide.WorkspaceAddin):

    def do_load(self, workspace: Ide.Workspace):

    def do_unload(self, workspace: Ide.Workspace):

    def do_surface_set(self, surface: Ide.Surface):

You will notice that at the top we import the packages we’ll be using. Here we use the GObject and Ide packages from GObject Introspection.

We then create a class which inherits from GObject.Object and implements the Ide.WorkbenchAddin interface. The Ide.WorkbenchAddin interface has two virtual methods to override, Ide.WorkbenchAddin.load() and Ide.WorkbenchAddin.unload().


PyGObject uses do_ prefix to indicate we are overriding a virtual method.

The load virtual method is called to allow the plugin to initialize itself. This method is called when the workbench is setup or your plugin is loaded.

When the unload virtual method is called the plugin should clean up after itself to leave Builder and the workbench in a consistent state. This method is called when the workbench is destroyed or your plugin is unloaded.

To simplify tracking workspace surface changes, you can use Ide.WorkspaceAddin as the second class implements. This plugin instance will be created for each workspace window.


You can limit the types of workspaces that the Ide.WorkspaceAddin will be instantiated for using X-Workspace-Kind=primary;editor;greeter; in the .plugin file.