The Jami team is happy to announce a native plugin system for Jami, along with a plugin Software Development Kit (SDK) for third-party developers.

What are Jami Plugins?

Jami plugins provide to our community of developers the tools to contribute to the rise of Jami by transforming ideas into real features.

Our main idea behind the Plugins is to allow third-party developers to easily add custom functionalities to Jami. This feature is inspired by other applications allowing users to select video filters, or link a robot to a chat. Those applications though, do not enable the user to go beyond and create as they wish. With Jami, you can choose to use one of our available plugins or you can create whatever you want with the help of our Jami Plugins SDK. Another advantage is also the fact that Jami Plugins always run directly on the user's devices (never on a server), giving people full control over what’s going on with their conversations.

As from our last release, Jami offers support for in-call plugins in Android, GNU/Linux, and Windows platforms.

Our first published plugin is the GreenScreen plugin that, based on deep learning models, allows users to hide the backgrounds of their video during a call session.

Furthermore, we are progressively adding support for audio and chat functionalities. Our published plugins can be found here and the source code of all our plugins is open and can be accessed here. Also, you can access Jami Documentation for more technical information about the Jami Plugin System and the plugins build process.

The Software Development Kit

More than offering plugins, we want to encourage third-party developers to create their own. For that purpose, we created a Plugin SDK allowing us to build and package native Jami plugins for multiple platforms. The SDK is available as a part of the Jami Plugins repository. In order to use it, you only have to clone the daemon and plugins repositories, have python3 installed, and use pip to install some modules.

Here is how to prepare your development environment for the Jami SDK:

 mkdir jami-plugins && cd jami-plugins

git clone https://review.jami.net/ring-daemon daemon
git clone https://review.jami.net/jami-plugins plugins
cd plugins
pip3 install -r SDK/requirements.txt
cd ../daemon/contrib && mkdir native && cd native && ../bootstrap && make .ffmpeg

Check here for the full documentation.

The SDK  is modular and provides tools to generate all the plugin necessary files. Plugins generated by the SDK command-line interface already include metadata with information like name, a list of plugin preferences, base code for various functionalities you might want to ship inside the plugin, and more. All information required to implement these customizations is asked from you by the CLI during the plugin creation steps. Furthermore, more than a code generation tool, the SDK also allows you to build plugins files (.jpl) and merge different JPL files for various platforms to create universal/multi-platform JPL files. The documentation for each one of the SDK functionalities can be accessed through the CLI, and if needed, more detailed information is available here.

Create your first plugin with the SDK

Creating and building a first plugin template is as simple as running the embedded CLI wizard from the plugins folder, calling the module to create the plugin, and building it:

Step 1: Prepare your development environment following instructions above.

Step 2: Open the SDK command line interface.

python3 SDK/pluginMainSDK.py

Step 3: Create your first plugin, follow the wizard and provide the requested information.

(Jami Plugins SDK) plugin

Step 4: Compile your Plugin

 (Jami Plugins SDK) build

Leave Empty or Press 'q' to quit this option.
Plugin to pass build related step: Foo

A .jpl file of your new plugin has been built for your architecture at <plugins>build/Foo.jpl

We invite you to also read the steps to create a HelloWorld plugin, available here.

This is just the beginning of the Plugin System. We’ll keep working in the future to add plugin functionalities and improve the SDK and documentation. Come to discuss with us and share your experience with the plugin SDK on the Jami forum!

By Aline Gondim Santos - Jami developer