Introduction

Volumio2 introduces the concept of plugins to expand its functionality, and allow an easy sharing of the tweaks and improvements usually generated by the community. We've worked hard to create a standardized layout to make it easier to develop any kind of plugin. If you feel that your particular use case is not covered, please open an issue or discussion at the plugins repo:

https://github.com/volumio/volumio-plugins

What is plugin ?

A plugin is meant to add one specific functionality. It is provided as zip file which contains all needed files for it to work, either directly included in the zip file or available via a an install script that will download them autoatically. Plugins can be installed via Volumio's UI, by selecting the "Plugins" menu entry. From there you will be able to browse the Online Plugin Repository, or upload a plugin .zip file from your disk if not in the list.

Plugins are located under

/data/plugins/

And they are organized in subfolder per categories. When installing plugin, a folder is created in:

/data/plugins/mycategory/myplugins

All plugins related files (extracted from zip and resulting from install sh script will be found here).

Existing Plugin Categories

PLEASE NOTE: Categories name must be lowercase and separated by _ .

audio_interface

This typically collects plugins that add an audio interface, aka an external and not browsable music source. Typical examples are:

  • Airplay
  • UpNp
  • Bluetooth
music_service

Those are browsable music sources, typically:

  • MPD (for local files)
  • Webradios Directories
  • Streaming Services like Spotify

miscellanea

Those plugins that are too general purpose to classify. Furthermore they are meant to work as standalone units, and they don't require interaction with other plugins. Examples:

  • Appearance Plugins

system_controller

Those are usually core-plugins, meant to handle vital parts of Volumio.

  • Networking
  • Network Attached Storage
  • Core updater services

user_interface

Those plugins are meant to allow external communication to Volumio. Developing a new one will be useful to add API Rest Capability, or to extend Volumio interoperability with third party apps and controllers. Some examples:

  • MPD Client Protocol emulation
  • Squeeze Box emulation
  • Phisical button controller

What features can be added

This features could be miscellaneous, such as new online music provider, new radio stream, management of the GPIO (for supported devices), various DSP, display and plenty of other useful things ! The only limitation is your imagination !

A good way to understand how is made a plugin, is to browse /volumio/app/plugins folder and /data/plugins folder. You’ll find inspiration for your own dev !

Plugin Configuration files

While first start, Volumio will create a folder that contains saved parameter in a config.json stored in:

/data/configuration/mycategory/myplugins

The plugins.json file

The plugins.json file stores the status of core (found in /volumio/app/plugins/plugins.json folder) and extra (found in /data/plugins/plugins.json ) plugins.

IMPORTANT : If you create a new plugin MANUALLY, you MUST add a plugin reference to plugins.json files (in /data/plugins/plugins.json). If such reference is not found, volumio will automatically delete your plugin folder.

The plugins json contains informations on plugins status:

  • Enabled, which can be true or false
  • Started, which can be true or false

Add your information under your plugin relevant category. For example, if I'm adding a music_service plugin called "google_music", the relevant section will look like

{
  "music_service": {
    "google_music": {
      "enabled": {
        "type": "boolean",
        "value": true
      },
      "status": {
        "type": "string",
        "value": "STARTED"
      }
    },
    ...