igraph: C library for network analysis with R, Python and Mathematica interfaces
Library for the analysis of networks
At a glance
- What is it?
- igraph is a C library for complex network analysis and graph theory, emphasising efficiency, portability and ease of use. The R, Python and Mathematica interfaces each live in a separate repository, and the README sends users to igraph.org for installation instructions.
- Who is it for?
- igraph is a good fit for researchers and engineers who need an established C library for network analysis and graph theory, and for whom R, Python or Mathematica access via the wrapper projects is sufficient. It is not the right choice when you expect an algorithm reference in the source repository, when you need installation steps without an external website, or when a multi-repository setup for core and language wrappers adds overhead your team cannot absorb.
- Can I use it commercially?
- Yes, with conditions. GPL-2.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Yes. The repository last received commits 10 days ago.
- What is it written in?
- Mainly C, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 11, 2026, and from our analysis. They are not legal advice.
Editorial analysis
C library at the center, with three language-specific interfaces in separate repositories
igraph is a C library for complex network analysis and graph theory, with an emphasis on efficiency, portability and ease of use. Source lives in the src/ and include/ directories of this repository.
Three language interfaces are listed in the README, and all three are maintained in separate repositories. R users work through rigraph, hosted at github.com/igraph/rigraph. Python users work through python-igraph, at github.com/igraph/python-igraph. Mathematica users work through IGraphM, at github.com/szhorvat/IGraphM.
That structure matters when deciding which codebase to track for a bug report or a feature request. If your work is in Python, the python-igraph repository is where language-level issues belong, not here. Algorithm implementations live in the C repository's src/ directory, and all three language interfaces build on top of that core. Maintenance, versioning and documentation are handled independently for each interface.
CMake drives the build, with separate MSVC support and a pkg-config template
No installation instructions appear in the README itself. It directs users to igraph.org for both build steps and documentation. An INSTALL file is present at the repository root and may hold notes for building from source, though the primary pointer is the website.
CMake is the build system. CMakeLists.txt at the root is the top-level project file, and for developers targeting the Microsoft Visual C++ toolchain on Windows, an msvc/ directory provides a specific build path for that toolchain.
igraph.pc.in at the root is a pkg-config template. Once igraph is installed, a system that supports pkg-config can use the generated file to locate headers and link flags without manual configuration, which matters when adding igraph as a dependency in C projects that already use pkg-config. Example code is in examples/simple/ and examples/tutorial/.
Azure Pipelines and GitHub Actions carry active badges; Travis CI configuration is also present
Three continuous integration configurations coexist in the repository. Azure Pipelines is set up through a .azure/ directory and an azure-pipelines.yml file at the root. GitHub Actions runs through workflows in the .github/ directory. A .travis.yml file is also present, which is the Travis CI configuration format.
Only Azure Pipelines and GitHub Actions have build-status badges in the README. No Travis CI badge appears there. All three configuration files are versioned in the repository, and the codecov.yml file at the root handles code coverage reporting alongside the CI runs.
A fuzzing/ directory indicates fuzz testing as a practice separate from the standard test suite in tests/. A .pre-commit-config.yaml file defines pre-commit hooks for code quality checks, and a .devcontainer/ directory provides a standardised development container for contributors working in container-based editors.
The 2006 citation request applies to researchers, backed by two machine-readable formats
Researchers who use igraph are asked to cite the paper by Csardi and Nepusz titled 'The igraph software package for complex network research,' published in InterJournal, Complex Systems. That request is for academic attribution and applies to research publications rather than to software deployment. No clause in the README extends the citation request beyond academic work.
Two machine-readable citation formats are in the repository. CITATION.cff is the GitHub-supported citation metadata file, present at the root. A .zenodo.json file drives integration with Zenodo, and the README carries a DOI badge linking to the Zenodo record. Both files point researchers toward the same publication, keeping the citation target consistent.
CONTRIBUTORS.md, CONTRIBUTORS.txt, AUTHORS and ACKNOWLEDGEMENTS.md each document contributors in different formats. igraph is described in the README as a collaborative work of many people from all around the world.
What the interfaces/ and vendor/ directories indicate about the C core's structure
At the top level, interfaces/ is a directory separate from the three external language repositories listed in the README. Its presence inside the C repository means that some code relevant to the language binding build process lives alongside the core C implementation rather than entirely in the external repos.
vendor/ at the root bundles some C dependencies with the source. Bundling means those dependency versions are fixed to whatever is in the tree, which has implications for both build reproducibility and for tracking security updates to vendored code.
An .astylerc file is also present, which is an Artistic Style formatter configuration that sets C code formatting rules for contributors. An .editorconfig file at the root defines editor-level formatting defaults. Version 1.0.0 and 0.10.17 were both published on 2025-09-19, about ten hours apart, with 1.0.1 following on 2025-12-26; the code is distributed under GPL-2.0.
Algorithm scope comes from the repository topics, not from the README
Repository topics for igraph include c, complex-networks, graph-algorithms, graph-theory, mathematics, network-analysis and network-graph. None of those topics is accompanied by a list of specific algorithms in the README. No function names, no API surface and no description of which graph metrics or operations are available appear in the README text.
Documentation for the algorithm set lives at igraph.org. That is where the README's pointer for installation also leads, so both the build steps and the API reference are at the website rather than in the repository. A doc/ directory exists at the repository root and holds documentation source, but the README gives no breakdown of its contents.
For any project evaluating igraph, igraph.org is the only path the README itself identifies. Checking the algorithm list there before committing to igraph as a dependency is necessary, because the README cannot substitute for it.
ONEWS alongside NEWS in the root: a detail the README does not explain
NEWS and ONEWS both appear in the repository's top-level directory as distinct named files. Two files with nearly the same name in the same directory is a detail visible only by reading the directory listing, and the README makes no reference to either of them.
Neither file is a subdirectory or an archive of the other. A project that retains ONEWS as a file in the root rather than folding its entries into a single history has not merged those two files. The repository offers no explanation for why both exist rather than one.
A VERSIONING.md file also sits at the root, establishing a written versioning policy, though the README does not link to it. For contributors, CONTRIBUTING.md explains how to participate and SUPPORT.md documents where to get support. All three files sit at the root without any mention in the README.
Editorial conclusion
igraph is a good fit for researchers and engineers who need an established C library for network analysis and graph theory, and for whom R, Python or Mathematica access via the wrapper projects is sufficient. It is not the right choice when you expect an algorithm reference in the source repository, when you need installation steps without an external website, or when a multi-repository setup for core and language wrappers adds overhead your team cannot absorb. Before adopting igraph, verify that the specific algorithms you need are covered at igraph.org, since the README provides no function list.
Frequently asked questions
What is igraph?
igraph is a C library for complex network analysis and graph theory, with emphasis on efficiency, portability and ease of use. It has separately maintained interfaces for R, Python and Mathematica.
Does igraph have a Python interface?
Yes. python-igraph is a separate project at github.com/igraph/python-igraph. It wraps the C library and is maintained in its own repository.
How do I install igraph?
The README directs users to igraph.org for installation steps. CMakeLists.txt at the repository root is the CMake project file, and an INSTALL file is also present.
What licence does igraph use?
igraph is distributed under GPL-2.0, and the COPYING file at the repository root contains the licence text.
Where is the igraph API documentation?
igraph.org is where the README points for both installation instructions and documentation. A doc/ directory exists in the repository root, but the README itself contains no API reference.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/igraph-igraph)