Welcome | Get started | Dive | Contribute | Topics | Reference | Changes | More

The Plugin class

See also More about plugins.

class lino.core.plugin.Plugin

The base class for all plugin descriptors.


The verbose name of this plugin, as shown to the user. This can be a lazily translated string.


The abbreviated name of this plugin, shown to the user in places where shortness is important, e.g. as the label of the tabs of a detail layout. This can be a lazily translated string. Defaults to verbose_name.


A list of names of plugins needed by this plugin.

The default implementation of get_required_plugins() returns this list.


If not None, then it is the Plugin instance that caused this plugin to automatically install. As the application developer you do not set this yourself


If specified, a list of model names for which this app provides a subclass.

For backwards compatibility this has no effect when override_modlib_models is set.


The name of another plugin to be used as menu group.

See get_menu_group(), How plugins build the application menu.


Remote URL base for media files.


Either None (default) or a non-empty string with the name of the subdirectory of your media directory which is expected to contain media files for this app.

None means that there this app has no media files of her own.

Best practice is to set this to the app_label. Will be ignored if media_base_url is nonempty.


The url prefix under which this plugin should ask to install its url patterns.


List of js snippets to be injected into the lino_*.js file.


Whether this plugin uses lino.core.utils.DelayedValue.


The renderer used by this plugin. See Introduction to Front end Renderers.


Whether this plugin is hidden.

A hidden attribute is installed, but not visible.


Whether this plugin is hidden.


Mark this plugin as hidden.


Currently implemented by lino.modlib.extjs, lino.modlib.bootstrap3.

__init__(self, site, app_label, app_name, app_module, needed_by, configs: dict)

This is called when the Site object instantiates, i.e. you may not yet import django.conf.settings. But you get the site object being instantiated.



The Site instance


e.g. “contacts”


e.g. “lino_xl.lib.contacts”


The module object corresponding to the __init__.py file.

configure(self, **kw)

Set the given parameter(s) of this Plugin instance. Any number of parameters can be specified as keyword arguments.

Raise an exception if caller specified a key that does not have a corresponding attribute.


Return a list of names of plugins needed by this plugin.

The default implementation returns needs_plugins.

Lino will automatically install these plugins if necessary.

Note that Lino will add them before your plugin.

Note that only the app_label (not the full plugin name) is used when testing whether a plugin is installed. In other words, if a plugin says it requires a plugin “stdlib.foo” and an application already has some plugin “mylib.foo” installed, then “mylib.foo” satisfies “stdlib.foo”.

get_used_libs(self, html=None)

Yield a series of tuples (verbose_name, version, url) that describe the libraries used by this Lino site.

get_site_info(self, ar=None)

Return a string to show in lino.modlib.about.About.

TODO: move this and the use_contacts setting to about.


This will be called when the Plugin is being instantiated (i.e. even before the Site instantiation has finished. Used by lino.modlib.users to set user_model.

on_plugins_loaded(self, site)

Called exactly once on each installed plugin, when the Site has loaded all plugins, but before calling setup_plugins(). All this happens before settings are ready and long before the models modules start to load.

This is used for initializing default values of plugin attributes that (a) depend on other plugins but (b) should be overridable in lino.core.site.Site.setup_plugins().

For example groups uses this to set a default value to the commentable_model for comments plugin.

Or lino.modlib.checkdata uses it to set responsible_user to “robin” when it is a demo site.

pre_site_startup(self, site)

This is called exactly once when models are ready.

install_django_settings(self, site)

Install Django settings


This is called exactly once during site startup, when models are ready. Used by lino.modlib.help

post_site_startup(self, site)

This will be called exactly once, when models are ready.


Return the plugin from which this plugin inherits.

get_subdir(cls, name)

Get the absolute path of the named subdirectory if it exists.


This is called during startup, when all models modules have been imported, and before Lino starts to analyze them.

on_ui_init(self, kernel)

This is called when the kernel is being instantiated.


Override this to return a list of url patterns to be added to the Site’s patterns.

get_requirements(self, site)

Return a list of optionally required Python packages to be installed during install.

See also About requirements.

get_head_lines(cls, site, request)

Yield or return a list of textlines to add to the <head> of the html page.

on_initdb(self, site, force=False, verbosity=1)

This is called during SITE.build_site_cache().


Return the plugin (a Plugin instance) into the menu of which this plugin should add its menu commands. See How plugins build the application menu.

This returns self by default, unless

  • this plugin defines an explicit menu_group. In this case return the named plugin.

  • this plugin was automatically installed because some other plugin needs it. In this case return that other plugin.

setup_user_prefs(self, up)

Called when a lino.core.userprefs.UserPrefs get instantiated.

Return or yield a sequence of quick link descriptors to be added to the list of quick links.

A quick link descriptor is a string that identifies either an actor or a bound action.

Add quicklinks to the list of quick links.

get_dashboard_items(self, user)

Return or yield a sequence of items to be rendered on the dashboard.

Called by lino.core.site.Site.get_dashboard_items().

Every item is expected to be either an instance of lino.core.dashboard.DashboardItem, or a lino.core.actors.Actor.

Tables are shown with a limit of lino.core.tables.AbstractTable.preview_limit rows.

get_detail_url(self, ar, actor, pk, *args, **kw)

Return the URL to the given database row.

This is only a relative URL. Get the fully qualified URI by prefixing lino.core.site.Site.server_url.

The extjs frontend overrides this and returns different URIs depending on whether ar.request is set or not.