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:
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:
bash
# 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>
master
branch or the develop
branch.If you cloned a while ago, get the latest changes from upstream:
bash
git checkout <dev-branch>
git pull --rebase upstream <dev-branch>
bash
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 with git 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:
bash
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.
bash
git push origin <topic-branch-name>
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.
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.