Webware for Python supports “plug-ins” to extend the framework and provide additional capabilities.

In Webware for Python 3, plug-ins are implemented as packages with metadata (“entry points”) through which they can be automatically discovered, even if they have been installed independetly of Webware. You only need to specify which plug-ins shall be loaded in the PlugIns configuration setting, and Webware will automatically load them if they are installed.

Every Webware plug-in is a Python package, i.e. a directory that contains a file and optionally other files. As a Webware plugin, it must also contain a special file. You can disable a specific plug-in by placing a dontload file in its package directory.

If you want to distribute a Webware plug-in, you should advertize it as an entry point using the webware.plugins identifier in the file used to install the plug-in.

The __init.py__ file of the plug-in must contain at least a function like this:

def installInWebware(application):

The function doesn’t need to do anything, but this gives it the opportunity to do something with the global Webware Application object. For instance, the PSP plugin uses addServletFactory.addServletFactory to add a handler for .psp files.

The file should contain a number of assignments:

name = "Plugin name"
version = (1, 0, 0)
status = 'beta'
requiredPyVersion = (3, 6)
requiredOpSys = 'posix'
synopsis = """A paragraph-long description of the plugin"""
webwareConfig = {
    'examplePages': [
def willRunFunc():
    if softwareNotInstalled:
        return "some message to that effect"
        return None

If you want to provide some examples for using your plug-in, they should be put in an Examples/ subdirectory.

A plugin who’s requiredPyVersion or requiredOpSys aren’t satisfied will simply be ignored. requiredOpSys should be something returned by, like posix or nt. Or you can define a function willRunFunc to test. If there aren’t requirements you can leave these variables and functions out.

If you plan to write your own Webware plug-in, also have a look at our Style Guidelines and the source code of the built-in plug-ins (PSP, TaskKit, UserKit, WebUtils, MiscUtils) which can serve as examples. We also recommend to add some tests to your plug-in, see the section on Testing.