Where is the source code

The source code of the OpenMS library as well as the TOPP tools and TOPPView are hosted on GitHub. The most important repositories for starting developers will be OpenMS itself and its contrib (i.e. its dependencies). The source code is released under a three-clause BSD license.


A good starting point for developers is the OpenMS GitHub wiki. For a quick dive into developing your own, see the Developer FAQ and the Adding your own tool to the TOPP suite.


There are two ways to obtain the OpenMS/TOPP documentation.

  • The documentation is contained in the OpenMS source package and binary packages.
  • The documentation of the latest release is available online.
  • The TOPP documentation can be found here.

Your tool in C++

If you want to develop your own OpenMS tool with C++, you will profit on the use of OpenMS’ own:

  • build system,
  • documentation system,
  • tool system

For more information, take a look at our Developer FAQ, especially the TOPP section,  and the OpenMS C++ guide. Be sure to also check out our OpenMS style guide.

Your tool in python

pyOpenMS provides Python bindings for a large part of the OpenMS library for mass spectrometry based proteomics. It thus provides access to the feature-rich, open-source algorithm library for mass-spectrometry based proteomics analysis. These Python bindings allow raw access to the data-structures and algorithms implemented in OpenMS, specifically those for

  • file access (mzXML, mzML, TraML, mzIdentML among others),
  • basic signal processing (smoothing, filtering, de-isotoping and peak-picking) and
  • complex data analysis (including label-free, SILAC, iTRAQ and SWATH analysis tools).

Make sure you build the pyOpenMS bindings (not enabled by default).

After importing pyopenms in your python tool, you can use the python bindings of almost all OpenMS classes. This means you can use methods and classes as they would be python methods or classes. You can access the stored values in objects using the provided functions of the respective class.

Calling methods from pyOpenMS objects works just as with other python objects. The pyOpenMS bindings ensure that c++ types that are mappable are being mapped to their python ‘equivalent’. This means that you can e.g. use your data, already in python lists as input to a OpenMS class object function (i.e. often either an accessor or algorithm implementation) or the output of such to further process the data in your python code.