Creating new plugins

The recommended way of contributing to the Orthanc code consists in extending it by creating new plugins.

Overview

Orthanc plugins must use the plugin SDK and must be written in C or C++. They must also fullfil the terms of the GPLv3 license that is used by the core of Orthanc. Sample code for plugins can be found in the official Orthanc repository (in the Plugins/Samples folder). A tutorial showing how to implement a basic WADO server is available on CodeProject.

We suggest developers to adopt the coding style of the Orthanc core, although this is of course not required.

Do not hesitate to contact us if you wish your plugin to be indexed in the dedicated part of the Orthanc Book!

Structure of the plugins

A plugin takes the form of a shared library (.DLL under Windows, .so under GNU/Linux, .dylib under Apple OS X...) that uses the ABI of the C language to declare 4 public functions/symbols:

  • int32_t OrthancPluginInitialize(OrthancPluginContext* context). This callback function is responsible for initializing the plugin. The context argument gives access to the API of Orthanc.
  • void OrthancPluginFinalize(). This function is responsible for finalizing the plugin, releasing all the allocated resources.
  • const char* OrthancPluginGetName(). This function must give a name to the plugin.
  • const char* OrthancPluginGetVersion(). This function must provide the version of the plugin.

Remark: The size of the memory buffers that are exchanged between the Orthanc core and the plugins must be below 4GB. This is a consequence of the fact that the Orthanc plugin SDK uses uint32_t to encode the size of a memory buffer. We might extend the SDK in the future to deal with buffers whose size if above 4GB.