diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst
new file mode 100644
index 0000000000000000000000000000000000000000..bebfcf4641cc528f726d2abfe66ba89afdb8df6e
--- /dev/null
+++ b/CONTRIBUTING.rst
@@ -0,0 +1,185 @@
+Contact Us
+----------
+Join the KM3Pipe channel here: https://chat.km3net.de/channel/km3pipe
+
+
+Filing Bugs or Feature Requests
+-------------------------------
+
+Please **always** create an issue when you encounter any bugs, problems or
+need a new feature. Emails and private messages are not meant to communicate
+such things!
+
+Use the appropriate template and file a new issue here:
+https://git.km3net.de/km3py/km3io/issues
+
+You can browse all the issues here: https://git.km3net.de/km3py/km3io/issues
+
+Please follow the instructions in the templates to provide all the
+necessary information which will help other people to understand the
+situation.
+
+Improve km3io
+---------------
+
+Check out our KanBan board http://git.km3net.de/km3py/km3io/boards,
+which shows all the open issues in three columns:
+
+- *discussion*: The issues which are yet to be discussed (e.g. not clear how to proceed)
+- *todo*: Issues tagged with this label are ready to be tackled
+- *doing*: These issues are currently "work in progress". They can however be
+  put tossed back to *todo* column at any time if the development is suspended.
+
+Here is the recommended workflow if you want to improve km3io. This is a
+standard procedure for collaborative software development, nothing exotic!
+
+Feel free to contribute ;)
+
+Make a Fork of km3io
+~~~~~~~~~~~~~~~~~~~~~~
+
+You create a fork (your full own copy of the
+repository), change the code and when you are happy with the changes, you create
+a merge request, so we can review, discuss and add your contribution.
+Merge requests are automatically tested on our GitLab CI server and you
+don't have to do anything special.
+
+Go to http://git.km3net.de/km3py/km3io and click on "Fork".
+
+After that, you will have a full copy of km3io with write access under an URL
+like this: ``http://git.km3net.de/your_git_username/km3io``
+
+Clone your Fork to your PC
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Get a local copy to work on (use the SSH address `git@git...`, not the HTTP one)::
+
+    git clone git@git.km3net.de:your_git_username/km3io.git
+
+Now you need to add a reference to the original repository, so you can sync your
+own fork with the km3io repository::
+
+    cd km3io
+    git remote add upstream git@git.km3net.de:km3py/km3io.git
+
+
+Keep your Fork Up to Date
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+To get the most recent commits (including all branches), run::
+
+    git fetch upstream
+
+This will download all the missing commits and branches which are now accessible
+using the ``upstream/...`` prefix::
+
+    $ git fetch upstream
+    From git.km3net.de:km3py/km3io
+     * [new branch]        gitlab_jenkins_ci_test -> upstream/gitlab_jenkins_ci_test
+     * [new branch]        legacy                 -> upstream/legacy
+     * [new branch]        master                 -> upstream/master
+
+
+If you want to update for example your **own** ``master`` branch
+to contain all the changes on the official ``master`` branch of km3io,
+switch to it first with::
+
+    git checkout master
+
+and then merge the ``upstream/master`` into it::
+
+    git merge upstream/master
+
+Make sure to regularly ``git fetch upstream`` and merge changes to your own branches.
+
+Push your changes to Gitlab regularly
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Make sure to keep your fork up to date on the GitLab server by pushing
+all your commits regularly using::
+
+    git push
+
+
+Install in Developer Mode
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+km3io can be installed in ``dev-mode``, which means, it links itself to your
+site-packages and you can edit the sources and test them without the need
+to reinstall km3io all the time. Although you will need to restart any
+``python``, ``ipython`` or ``jupyter``-notebook (only the kernel!) if you
+imported km3io before  you made the changes.
+
+Go to your own fork folder (as described above) and check out the branch you
+want to work on::
+
+    git checkout master  # the main development branch (should always be stable)
+    make install-dev
+
+
+Running the Test Suite
+~~~~~~~~~~~~~~~~~~~~~~
+
+Make sure to run the test suite first to see if everything is working
+correctly::
+
+    $ make test
+
+This should give you a green bar, with an output like this::
+
+    $ make test
+    py.test --junitxml=./reports/junit.xml -o junit_suite_name=km3io tests
+    =========================================== test session starts ===========================================
+    platform linux -- Python 3.8.5, pytest-5.3.5, py-1.8.1, pluggy-0.13.1
+    rootdir: /home/tgal/Dev/km3io
+    plugins: flake8-1.0.4, pylint-0.15.0, cov-2.8.1
+    collected 126 items
+
+    tests/test_gseagen.py .....                                                                         [  3%]
+    tests/test_km3io.py .                                                                               [  4%]
+    tests/test_offline.py ................................s.............                                [ 41%]
+    tests/test_online.py ...................................                                            [ 69%]
+    tests/test_tools.py .......................................                                         [100%]
+
+    ----------------------- generated xml file: /home/tgal/Dev/km3io/reports/junit.xml ------------------------
+    =============================== 125 passed, 1 skipped, 4 warnings in 6.54s ================================
+
+
+Run the tests every time you make changes to see if you broke anything! It usually
+takes just a few seconds and ensures that you don't break existing code. It's
+also an easy way to spot syntax errors ;)
+
+You can also start a script which will watch for file changes and retrigger
+a test suite run every time for you. It's a nice practice to have a terminal
+open running this script to check your test results continuously::
+
+    make test-loop
+
+Time to Code
+~~~~~~~~~~~~
+
+We develop new features and fix bugs on separate branches and merge them
+back to ``master`` when they are stable. Merge requests (see below) are also
+pointing towards this branch.
+
+If you are working on your own fork, you can stay on your own ``master`` branch
+and create merge requests from that.
+
+Code Style
+~~~~~~~~~~
+
+Make sure to run ``black`` over the code, which ensures that the code style
+matches the one we love and respect. We have a tool which makes it easy::
+
+    make black
+
+Create a Merge Request (aka Pull Request)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Go to https://git.km3net.de/km3py/km3io/merge_requests/new and select
+your source branch, which contains the changes you want to be included in km3io
+and select the ``master`` branch as target branch.
+
+That's it, the merge will be accepted if everything is OK ;)
+
+If you want to join the km3io dev-team, let us know!:)
diff --git a/doc/contribute.rst b/doc/contribute.rst
new file mode 100644
index 0000000000000000000000000000000000000000..3d2a51a56c89b8fe793021a778dfec3d231d3ff2
--- /dev/null
+++ b/doc/contribute.rst
@@ -0,0 +1,4 @@
+Contribute
+==========
+
+.. include:: ../CONTRIBUTING.rst
diff --git a/doc/index.rst b/doc/index.rst
index 152d2fdd3b94959670b0e77d996b87d4abd0d3f5..ef947cd31bc80ed59e8b1e66cefd37752b073b3b 100644
--- a/doc/index.rst
+++ b/doc/index.rst
@@ -11,6 +11,7 @@
    :caption: Contents:
 
    examples
+   contribute
    changelog
 
    autoapi/index