Plugin API reference

Indico’s plugin system allows you to extend indico with additional modules which can be installed separately and do not require any modifications to the indico core itself.

class indico.core.plugins.IndicoPlugin(plugin_engine, app)

Base class for an Indico plugin.

All your plugins need to inherit from this class. It extends the Plugin class from Flask-PluginEngine with useful indico-specific functionality that makes it easier to write custom plugins.

When creating your plugin, the class-level docstring is used to generate the friendly name and description of a plugin. Its first line becomes the name while everything else goes into the description.

This class provides methods for some of the more common hooks Indico provides. Additional signals are defined in signals and can be connected to custom functions using connect().

acl_event_settings = frozenset({})

A set containing the names of event-specific settings which store ACLs

acl_settings = frozenset({})

A set containing the names of settings which store ACLs

category = None

The group category that the plugin belongs to

configurable = False

If the plugin should link to a details/config page in the admin interface

default_event_settings = {}

A dictionary containing default values for event-specific settings

default_settings = {}

A dictionary containing default values for settings

default_user_settings = {}

A dictionary containing default values for user-specific settings

property event_settings

EventSettingsProxy for the plugin’s event-specific settings.

event_settings_converters = {}

A dict containing custom converters for event-specific settings


Return blueprints to be registered on the application.

A single blueprint can be returned directly, for multiple blueprint you need to yield them or return an iterable.


Return a dictionary with variables to be added to vars.js file.


Called when the plugin is being loaded/initialized.

If you want to run custom initialization code, this is the method to override. Make sure to call the base method or the other overridable methods in this class will not be called anymore.

inject_bundle(name, view_class=None, subclasses=True, condition=None)

Inject an asset bundle into Indico’s pages.

  • name – Name of the bundle

  • view_class – If a WP class is specified, only inject it into pages using that class

  • subclasses – also inject into subclasses of view_class

  • condition – a callable to determine whether to inject or not. only called, when the view_class criterion matches


Return a string that will define variables for the plugin in the vars.js file.

property settings

SettingsProxy for the plugin’s settings.

settings_converters = {}

A dict containing custom converters for settings

settings_form = None

WTForm for the plugin’s settings (requires configurable=True). All fields must return JSON-serializable types.

settings_form_field_opts = {}

A dictionary which can contain the kwargs for a specific field in the settings_form.

strict_settings = True

If settings, event_settings and user_settings should use strict mode, i.e. only allow keys in default_settings, default_event_settings or default_user_settings (or the related acl_settings sets). This should not be disabled in most cases; if you need to store arbitrary keys, consider storing a dict inside a single top-level setting.

template_hook(name, receiver, priority=50, markup=True)

Register a function to be called when a template hook is invoked.

For details see register_template_hook().

property translation_domain

Return the domain for this plugin’s translation_path.

property translation_path

Return translation files to be used by the plugin.

By default, get <root_path>/translations, unless it does not exist.

property user_settings

UserSettingsProxy for the plugin’s user-specific settings.

user_settings_converters = {}

A dict containing custom converters for user-specific settings

class indico.core.plugins.IndicoPluginBlueprint(name, *args, **kwargs)

The Blueprint class all plugins need to use.

It contains the necessary logic to run the blueprint’s view functions inside the correct plugin context and to make the static folder work.

make_setup_state(app, options, first_registration=False)

Creates an instance of BlueprintSetupState() object that is later passed to the register callback functions. Subclasses can override this to return a subclass of the setup state.

class indico.core.plugins.IndicoPluginBlueprintSetupState(blueprint: Blueprint, app: App, options: t.Any, first_registration: bool)
add_url_rule(rule, endpoint=None, view_func=None, **options)

A helper method to register a rule (and optionally a view function) to the application. The endpoint is automatically prefixed with the blueprint’s name.

class indico.core.plugins.PluginCategory(value, names=None, *values, module=None, qualname=None, type=None, start=1, boundary=None)
class indico.core.plugins.WPJinjaMixinPlugin
static render_template_func(template_name_or_list, **context)

Renders a template from the plugin’s template folder with the given context.

If the template name contains a plugin name (pluginname:name), that name is used instead of the current plugin’s name.

  • template_name_or_list – the name of the template or an iterable containing template names (the first existing template is used)

  • context – the variables that should be available in the context of the template.

indico.core.plugins.get_plugin_template_module(template_name, **context)

Like get_template_module(), but using plugin templates.


Like url_rule_to_js() but prepending plugin name prefix to the endpoint.

indico.core.plugins.url_for_plugin(endpoint, *targets, **values)

Like url_for() but prepending 'plugin_' to the blueprint name.