How to contribute to the MNE-CPP Project
Before you start, there are a few basic concepts that should be understood. We use a variety of different tools to develop and maintain MNE-CPP.
Before you start
Learn C++ and the Qt Framework.
We mainly use C++ programming language and Qt, for development purposes. We are very happy with the choice, but these technologies can be quite tricky. There are plenty of fantastic resources out there to be able to learn both, but if you feel stuck, go ahead and ask us. Since you intend to become a contributor, we recommend you to start using Github and open an issue in the MNE-CPP project, in order to communicate with the development team.
Know the tools and services used by the development team
We use GitHub to host the source code for MNE-CPP. Continuous integration tools are provided by GitHub Actions, Codecov and Coverity. For communication and project management we use GitHub Projects, Gitter as well as Slack. MNE-CPP’s API documentation is build with Doxygen.
Please contact us with any questions you may have.
Understand the structure of MNE-CPP
MNE-CPP is designed as a two-layer framework. The library API provides the core functionalities, which can be used during development. The stand-alone applications, examples and tests are realized within the application layer of MNE-CPP. For example, as a stand-alone software, MNE Scan is part of the application layer and makes use of the functionality of the library layer. We use make use of the Eigen library, which is integrated into our repository. Qt provides tools for GUI creation whereas Eigen provides mathematical operations for linear algebra.
Below are some resources to get you started developing within MNE-CPP. Depending on which application you intend to develop for, you will find specific resources in this section. You can use use our API documentation to guide you while understanding the responsabilities of each class.
It is a good idea to go through the contribution tutorial and make sure that you can build from source. Understand the continious integration pipeline we have in place and how to write a unit test. Make sure that your changes don’t break the project compilation before submitting your contribution to the project itself.