Thank you for being interested in contributing to igraph
! We need the help of
volunteers to keep the package going, so every little bit is welcome. You can help out
the project in several different ways.
This repository only hosts the C code of the igraph
project. Even if you are not so
experienced with C, you can contribute in a number of ways:
- Respond to user questions on our support forum.
- Correct or improve our documentation.
- Go over open issues:
- Are some older issues still relevant in the most recent version? If not, write a comment to the issue stating that you feel that the issue is not relevant any more.
- Can you reproduce some of the bugs that are reported? If so, write a comment to the issue stating that this is still a problem in version X.
- Some issues point out problems with the documentation; perhaps you could help correct these?
- Some issues require clarifying a mathematical problem, or some literature research, before any programming can begin. Can you contribute through your theoretical expertise?
- Looking to contribute code? Take a look at some good first issues.
-
The issue tracker is the preferred channel for bug reports, feature requests and submitting pull requests.
-
Do you have a question? Please use our igraph support forum for support requests.
-
Please keep the discussion on topic and respect the opinions of others, and adhere to our Code of Conduct.
A bug is a demonstrable problem that is caused by the code in the repository. Good bug reports are extremely helpful — thank you for reporting!
Guidelines for bug reports:
-
Make sure that the bug is in the C code of igraph and not in one of the higher level interfaces — if you are using igraph from R, Python or Mathematica, consider submitting your issue in igraph/rigraph, igraph/python-igraph or szhorvat/IGraphM instead. If you are unsure whether your issue is in the C layer, submit a bug report in the repository of the higher level interface — we will transfer the issue here if it indeed affects the C layer.
-
Use the GitHub issue search — check if the issue has already been reported.
-
Check if the issue has been fixed — try to reproduce it using the latest
master
or development branch in the repository. -
Isolate the problem — create a short, self-contained, correct example.
Please try to be as detailed as possible in your report and provide all necessary information. What is your environment? What steps will reproduce the issue? What would you expect to be the outcome? All these details will help us to fix any potential bugs.
Example:
Short and descriptive example bug report title
A summary of the issue and the compiler/OS environment in which it occurs. If suitable, include the steps required to reproduce the bug.
- This is the first step
- This is the second step
- Further steps, etc.
<url>
- a link to the reduced test caseAny other information you want to share that is relevant to the issue being reported. This might include the lines of code that you have identified as causing the bug, and potential solutions (and your opinions on their merits).
Feature requests are always welcome. First, take a moment to find out whether your idea fits with the scope and aims of the project. Please provide as much detail and context as possible, and where possible, references to relevant literature. Having said that, implementing new features can be quite time consuming, and as such they might not be implemented quickly. In addition, the development team might decide not to implement a certain feature. It is up to you to make a case to convince the project's developers of the merits of this feature.
Note: The wiki has a lot of useful information for newcomers, as well as a quick start guide!
Good pull requests - patches, improvements, new features - are a fantastic help. They should remain focused in scope and avoid containing unrelated commits. Please also take a look at our tips on writing igraph code before getting your hands dirty.
Please ask first before embarking on any significant pull request (e.g. implementing features, refactoring code, porting to a different language), otherwise you risk spending a lot of time working on something that the project's developers might not want to merge into the project.
Please adhere to the coding conventions used throughout a project (indentation, accurate comments, etc.) and any other requirements (such as test coverage).
Follow the following steps if you would like to make a new pull request:
-
Fork the project, clone your fork, and configure the remotes:
# Clone your fork of the repo into the current directory git clone https://github.com/<your-username>/<repo-name> # Navigate to the newly cloned directory cd <repo-name> # Assign the original repo to a remote called "upstream" git remote add upstream https://github.com/<upstream-owner>/<repo-name>
-
Please checkout the section on branching to see whether you need to branch off from the
master
branch or thedevelop
branch.If you cloned a while ago, get the latest changes from upstream:
git checkout <dev-branch> git pull --rebase upstream <dev-branch>
-
Create a new topic branch (off the targeted branch, see branching section) to contain your feature, change, or fix:
git checkout -b <topic-branch-name>
-
Please commit your changes in logical chunks, and try to provide clear commit messages. It helps us during the review process if we can follow your thought process during the implementation. If you hit a dead end, use
git revert
to revert your commits or just go back to an earlier commit withgit checkout
and continue your work from there. -
We have a checklist for new igraph functions. If you have added any new functions to igraph, please go through the checklist to ensure that your functions play nicely with the rest of the library.
-
Make sure that your PR is based off the latest code and locally merge (or rebase) the upstream development branch into your topic branch:
git pull [--rebase] upstream <dev-branch>
Rebasing is preferable over merging as you do not need to deal with merge conflicts; however, if you already have many commits, merging the upstream development branch may be faster.
-
WHen your topic branch is up-to-date with the upstream development branch, you can push your topic branch up to your fork:
git push origin <topic-branch-name>
-
Open a pull request with a clear title and description.
IMPORTANT: By submitting a pull request, you agree to allow the project owner to license your work under the same license as that used by the project, see also Legal Stuff.
igraph
is committed to semantic versioning. We are
currently still in the development release (0.x), which in principle is a mark
that the public API is not yet stable. Regardless, we try to maintain semantic
versioning also for the development releases. We do so as follows. Any released
minor version (0.x.z) will be API backwards-compatible with any previous release
of the same minor version (0.x.y, with y < z). This means that if there is
an API incompatible change, we will increase the minor version. For example,
release 0.8.1 is API backwards-compatible with release 0.8.0, while release
0.9.0 might be API incompatible with version 0.8.1. Note that this only concerns
the public API, internal functions may change also within a minor version.
There will always be two versions of igraph
: the most recent released version,
and the next upcoming minor release, which is by definition not yet released.
The most recent release version is in the master
branch, while the next
upcoming minor release is in the develop
branch. If you make a change that is
API incompatible with the most recent release, it must be merged to
the develop
branch. If the change is API backwards-compatible, it can be
merged to the master
branch. It is possible that you build on recent
improvements in the develop
branch, in which case your change should of course
target the develop
branch. If you only add new functionality, but do not
change anything of the existing API, this should be backwards-compatible, and
can be merged in the master
branch.
When you make a new pull request, please specify the correct target branch. The
maintainers of igraph
may decide to retarget your pull request to the correct
branch. Retargeting you pull request may result in merge conflicts, so it is
always good to decide before starting to work on something whether you
should start from the master
branch or from the develop
branch. In most
cases, changes in the master
branch will also be merged to the develop
branch by the maintainers.
If you are unsure about the branch to target, open an issue about your proposed feature and we can discuss the appropriate target branch in the issue before you send a PR.
Some tips on writing igraph code.
In general, if you are not sure about something, please ask! You can open an issue on GitHub, open a thread in our igraph support forum, or write to @ntamas, @vtraag, @szhorvat, @iosonofabio or @gaborcsardi. We prefer open communication channels, because others can then learn from it too.
This is a pain to deal with, but we can't avoid it, unfortunately.
igraph
is licensed under the "General Public License (GPL) version 2, or
later". The igraph manual is licensed under the "GNU Free Documentation
License". By submitting a patch or pull request, you agree to allow the project
owner to license your work under the same license as that used by the project.