Managed Plugins for OpenCPN

This guide should be read alongside the README files in the ShipDriver repository.

A simplified guide is available as a 'cheat sheet'.

The overall managed plugin flow

A managed plugin becomes available for an OpenCPN user in the Plugins options dialog. Here, a number of plugins are available for users so they can just click on a plugin to install it. The managed plugins workflow is the way a plugin becomes available for users in this UI dialog.

In general, plugin code flows like this:

  • Source code is stored and eventually tagged and released on Github

  • As soon as a change is committed a number of builder services build the code for around 10 platforms.

  • The compiled plugins are stored on cloudsmith. Here, they get a url which can be used to download them.

  • The builds also produce metadata files with plugin data such as name, platform, various info and the download URL.

  • The metadata files are used to create a catalog. This catalog is the underpinning for the list of plugins in the OpenCPN plugin dialog.


Alec Leamas is the main architect of the managed plugin system for OpenCPN. His guide is here.

has extensive documentation for managed plugins but the workflow described in the manual differs significantly from the process described in this guide.

A managed plugin will nearly always start as a 'legacy' plugin that installs locally on the developers machine. Alec has provided new scripts to build a managed version of the plugin for OpenCPN. The legacy plugin is the starting point and the purpose of this guide is to describe the steps involved. The aim is to simplify the workflow.

The reference plugin where the development work has been carried out is shipdriver_pi (Master branch). To show the process from the start TideFinder is used as an illustration.

Mike Rossiter, who developed the ShipDriver and TideFinder plugins, assisted by testing the workflow. He has produced this guide to assist developers in making a managed plugin. Please report any errors or omissions using the issues tab of this GitHub repository.