NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #2436 most downloaded on PyPI
High performance graph data structures and algorithms
Last release 11 months ago
23 Oct 2025
Ships fairly regularly
a new release about every 3 months
Nearly every release is documented
notes for 20 of 20 stable releases
15 versions withdrawn
withdrawn after publishing
12 years old
35 releases · first in 2014
Added Graph.Nearest_Neighbor_Graph() .
Added Graph.Nearest_Neighbor_Graph().
Added node_in_weights argument to Graph.community_leiden().
Added align_layout() to align the principal axes of a layout nicely with screen dimensions.
Added Graph.commnity_voronoi().
Added Graph.commnity_fluid_communities().
The C core of igraph was updated to version 1.0.0.
Most layouts are now auto-aligned using align_layout().
Dropped support for PyPy 3.9 and PyPy 3.10 as they are now EOL.
Documentation improvements.
This is the last version that supports Python 3.9 as it will reach its end of life at the end of October 2025.
Full Changelog: 0.11.9...1.0.0
Dropped support for Python 3.8 as it has now reached its end of life.
One column per quarter.
Dropped support for Python 3.8 as it has now reached its end of life.
The C core of igraph was updated to version 0.10.16.
Added Graph.simple_cycles() to find simple cycles in the graph.
Added Graph.feedback_vertex_set() to calculate a feedback vertex set of the graph.
Graph.feedback_vertex_set() to calculate a feedback vertex set of the graph.Graph.feedback_arc_set() that allows the user to select the specific integer problem formulation used by the underlying solver.Graph.get_shortest_path_astar() heuristic function callback.Full Changelog: 0.11.6...0.11.8
Added Graph.Hypercube() for creating n-dimensional hypercube graphs.
Graph.Hypercube() for creating n-dimensional hypercube graphs.Graph.Chung_Lu() for sampling from the Chung-Lu model as well as several related models.Graph.is_complete() to test if there is a connection between all distinct pairs of vertices.Graph.is_clique() to test if a set of vertices forms a clique.Graph.is_independent_vertex_set() to test if some vertices form an independent set.Graph.mean_degree() for a convenient way to compute the average degree of a graph.Graph.rewire() now attempts to perform edge swaps 10 times the number of edges by default.Full Changelog: 0.11.5...0.11.6
The old name of the function is deprecated but will be kept around until at least 0.12.0.
prefixattr=... keyword argument to Graph.write_graphml() that allows the user to strip the g_, v_ and e_ prefixes from GraphML files written by igraph.Graph.are_connected() has now been renamed to Graph.are_adjacent(), following up a similar change in the C core. The old name of the function is deprecated but will be kept around until at least 0.12.0.
The C core of igraph was updated to version 0.10.12.
Deprecated PyCObject API calls in the C code were replaced by calls to PyCapsule, thanks to @DavidRConnell in #763
get_shortest_path() documentation was clarified by @JDPowell648 in #764
It is now possible to link to an existing igraph C core on MSYS2, thanks to @Kreijstal in #770
Full Changelog: 0.11.4...0.11.5
Added Graph.Prufer() to construct a graph from a Prüfer sequence.
Added Graph.Prufer() to construct a graph from a Prüfer sequence.
Added Graph.Bipartite_Degree_Sequence() to construct a bipartite graph from a bidegree sequence.
Fixed import of graph-tool graphs for vertex properties where each property has a vector value.
Graph.Adjacency() now accepts Matrix instances and other sequences as an input, it is not limited to lists-of-lists-of-ints any more.
Added Graph.__invalidate_cache() for debugging and benchmarking purposes.
Graph.__invalidate_cache() for debugging and benchmarking purposes.loops=... argument of Graph.is_bigraphical().python-igraph is now tested in Python 3.12.
python-igraph is now tested in Python 3.12.
Added weights=... keyword argument to Graph.layout_kamada_kawai().
matplotlib plotting infrastructure underwent major surgery and is now able to show consistent vertex and edge drawings at any level of zoom, including with animations, and for any aspect ratio.vertex_size=25 is a reasonable size for igraph.plot.edge_loop_size argument in igraph.plot.matplotlib backend when plotting a graph, igraph.plot now does not return the Axes anymore. Instead, it returns a container artist called GraphArtist, which contains as children the elements of the graph plot: a VertexCollection for the vertices, and EdgeCollection for the edges, and so on. These objects can be used to modify the plot after the initial rendering, e.g. inside a Jupyter notebook, to fine tune the appearance of the plot. While documentation on specific graphic elements is still scant, more descriptive examples will follow in the future.Fixed drawing order of vertices in the Plotly backend (#691).
Fixed plotting of null graphs with the Matplotlib backend.
Yes, the version number is correct - igraph 0.10.7 has never made it to PyPI. It is tagged in the repository, but it has never been released officiall
Yes, the version number is correct - igraph 0.10.7 has never made it to PyPI. It is tagged in the repository, but it has never been released officially. The changelog below lists the changes between igraph 0.10.6 and 0.10.8.
Added is_bigraphical() to test whether a pair of integer sequences can be the degree sequence of some bipartite graph.
Added weights=... keyword argument to Graph.radius() and Graph.eccentricity().
Graph.distances(), Graph.get_shortest_path() and Graph.get_shortest_paths() now allow the user to select the algorithm to be used explicitly.
The C core of igraph was updated to version 0.10.7.
Graph.distances() now uses Dijkstra's algorithm when there are zero weights but no negative weights. Earlier versions switched to Bellman-Ford or Johnson in the presence of zero weights unnecessarily.
Fixed a bug in EdgeSeq.select(_incident=...) for undirected graphs.
Fixed a memory leak in Graph.distances() when attempting to use Johnson's algorithm with mode != "out"
Graph.Incidence() is now deprecated in favour of Graph.Biadjacency() as it constructs a bipartite graph from a _bipartite adjacency_ matrix. (The prev…
The C core of igraph was updated to version 0.10.6.
Graph.Incidence() is now deprecated in favour of Graph.Biadjacency() as it constructs a bipartite graph from a bipartite adjacency matrix. (The previous name was a mistake). Future versions might re-introduce Graph.Incidence() to construct a graph from its incidence matrix.
Graph.get_incidence() is now deprecated in favour of Graph.get_biadjacency() as it returns the bipartite adjacency matrix of a graph and not its incidence matrix. (The previous name was a mistake). Future versions might re-introduce Graph.get_incidence() to return the incidence matrix of a graph.
Reverted the change in 0.10.5 that prevented adding vertices with integers as vertex names. Now we show a deprecation warning instead, and the addition of vertices with integer names will be prevented from version 0.11.0 only.
Fixed a minor memory leak in Graph.decompose().
The default vertex size of the Plotly backend was fixed so the vertices are now visible by default without specifying an explicit size for them.
Removed defunct Graph.community_leading_eigenvector_naive() method. Not a breaking change because it was already removed from the C core a long time a…
The plot() function now takes a backend keyword argument that can be used to specify the plotting backend explicitly.
The VertexClustering object returned from Graph.community_leiden() now contains an extra property named quality that stores the value of the internal quality function optimized by the algorithm.
Graph.Adjacency() and Graph.Weighted_Adjacency() now supports loops="once", loops="twice" and loops="ignore" to control how loop edges are handled in a more granular way. loops=True and loops=False keep on working as in earlier versions.
Added Graph.get_shortest_path() as a convenience function for cases when only one shortest path is needed between a given source and target vertices.
Added Graph.get_shortest_path_astar() to calculate the shortest path between two vertices using the A-star algorithm and an appropriate heuristic function.
Added Graph.count_automorphisms() to count the number of automorphisms of a graph and Graph.automorphism_group() to calculate the generators of the automorphism group of a graph.
The VertexCover constructor now allows referring to vertices by names instead of IDs.
resolution parameter is now correctly taken into account when calling Graph.modularity()
VertexClustering.giant() now accepts the null graph. The giant component of a null graph is the null graph according to our conventions.
Graph.layout_reingold_tilford() now accepts vertex names in the roots=... keyword argument.
The plotting of curved directed edges with the Cairo backend is now fixed; arrowheads were placed at the wrong position before this fix.
Graph.community_leading_eigenvector_naive() method. Not a breaking change because it was already removed from the C core a long time ago so the function in the Python interface did not do anything useful either.Added Graph.vertex_coloring_greedy() to calculate a greedy vertex coloring for the graph.
Graph.vertex_coloring_greedy() to calculate a greedy vertex coloring for the graph.VertexDendrogram instances, both in the Cairo and the Matplotlib backends.cutoff and normalized arguments of Graph.closeness() did not function correctly.The old variant still works with a deprecation warning, but will be removed in a future version.
The C core of igraph was updated to version 0.10.3.
UMAP layout now exposes the computation of the symmetrized edge weights via umap_compute_weights(). The layout function, Graph.layout_umap(), can now be called either on a directed graph with edge distances, or on an undirected graph with edge weights, typically computed via umap_compute_weights() or precomputed by the user. Moreover, the sampling_prob argument was faulty and has been removed. See PR #613 for details.
The resolution_parameter argument of Graph.community_leiden() was renamed to resolution for sake of consistency. The old variant still works with a deprecation warning, but will be removed in a future version.
Graph.Data_Frame() now handles the Int64 data type from pandas, thanks to @Adriankhl. See PR #609 for details.
Graph.layout_lgl() root argument is now optional (as it should have been).
The VertexClustering class now handles partial dendrograms correctly.
Unit tests updated to get rid of deprecation warnings in Python 3.11.
python-igraph is now tested in Python 3.11.Graph.modularity_matrix() to calculate the modularity matrix of a graph.Graph.get_k_shortest_paths(), thanks to @sombreslames. See PR #577 for details.setup.py script now also accepts environment variables instead of command line arguments to configure several aspects of the build process (i.e. whether a fully static extension is being built, or whether it is allowed to use pkg-config to retrieve the compiler and linker flags for an external igraph library instead of the vendored one). The environment variables are named similarly to the command line arguments but in uppercase, dashes replaced with underscores, and they are prefixed with IGRAPH_ (i.e. --use-pkg-config becomes IGRAPH_USE_PKG_CONFIG).Graph.decompose() that was accidentally introduced in 0.10.0 during the transition to igraph_graph_list_t in the C core.Clustering.sizes() now works correctly even if the membership vector contains None items.Graph.modularity() and Graph.community_multilevel() now correctly expose the resolution parameter.Graph.is_chordal() that decreased the reference count of Python's built-in True and False constants unnecessarily.Added Graph.minimum_cycle_basis() and Graph.fundamental_cycles()
Graph.minimum_cycle_basis() and Graph.fundamental_cycles()Graph.average_path_length() now supports edge weights.igraph.__all__ that used to be in the main igraph package before 0.10.0.Removed deprecated UbiGraphDrawer.
More robust support for Matplotlib and initial support for plotly as graph plotting backends, controlled by a configuration option. See PR #425 for more details.
Added support for additional ways to construct a graph, such as from a dictionary of dictionaries, and to export a graph object back to those data structures. See PR #434 for more details.
Graph.list_triangles() lists all triangles in a graph.
Graph.reverse_edges() reverses some or all edges of a graph.
Graph.Degree_Sequence() now supports the "no_multiple_uniform" generation method, which generates simple graphs, sampled uniformly, using rejection sampling.
Graph.Lattice() now supports per-dimension periodicity control.
Graph.get_adjacency() now allows the user to specify whether loop edges should be counted once or twice, or not at all.
Graph.get_laplacian() now supports left-, right- and symmetric normalization.
The C core of igraph was updated to version 0.10.0.
We now publish abi3 wheels on PyPI from CPython 3.9 onwards, making it possible to use an already-built Python wheel with newer minor Python releases (and also reducing the number of wheels we actually need to publish). Releases for CPython 3.7 and 3.8 still use version-specific wheels because the code of the C part of the extension contains conditional macros for CPython 3.7 and 3.8.
Changed default value of the use_vids=... argument of Graph.DataFrame() to True, thanks to @fwitter.
Graph.Degree_Sequence() now accepts all sorts of sequences as inputs, not only lists.
edge_color and edge_width to be set
on an edge-by-edge basis.Dropped support for Python 3.6.
Removed deprecated UbiGraphDrawer.
Removed deprecated show() method of Plot instances as well as the feature that automatically shows the plot when plot() is called with no target.
Removed the eids keyword argument of get_adjacency().
Graph.clusters() is now deprecated; use Graph.connected_components() or its already existing shorter alias, Graph.components().
Graph.shortest_paths() is now deprecated; use Graph.distances() instead.
We now publish musllinux wheels on PyPI.
musllinux wheels on PyPI.Graph union and intersection (by name) operators now verify that there are no duplicate names within the individual graphs.
Fixed a memory leak in Graph.union() when edge maps were used; see #534 for details.
Fixed a bug in the Cairo and Matplotlib backends that prevented edges with labels from being drawn properly; see #535 for details.
Vendored igraph was updated to version 0.9.8.
Fixed plotting of curved edges in the Cairo plotting backend.
setup.py now looks for igraph.pc recursively in vendor/install; this fixes building igraph from source in certain Linux distributions
Graph.shortest_paths() does not crash with zero-length weight vectors any more
Fix a memory leak in Graph.delete_vertices() and other functions that convert a list of vertex IDs internally to an igraph_vs_t object, see #503 for details.
Fixed potential memory leaks in Graph.maximum_cardinality_search(), Graph.get_all_simple_paths(), Graph.get_subisomorphisms_lad(), Graph.community_edge_betweenness(), as well as the union and intersection operators.
Fix a crash that happened when subclassing Graph and overriding __new__() in the subclass; see #496 for more details.
Documentation now mentions that we now support graphs of size 5 or 6 for isomorphism / motif calculations if the graph is undirected
Vendored igraph was updated to version 0.9.6.
Fixed a performance bottleneck in VertexSeq.select() and EdgeSeq.select() for the case when the VertexSeq or the EdgeSeq represents the whole graph. See #494 for more details.
Edge labels now take the curvature of the edge into account, thanks to @Sriram-Pattabiraman. (#457)
🎉 `python-igraph` is now simply `igraph`, at least on PyPI.
🎉 python-igraph is now simply igraph, at least on PyPI.
❗ If you use python-igraph in the dependencies of any of your projects, please replace it with igraph instead. python-igraph is now a stub package on PyPI that depends on the matching version of the Python package named igraph. We will keep on updating python-igraph until Sep 1, 2022, after which python-igraph will not receive any updates.
🙏🏼 Many thanks to @patrickfuller for allowing us to useigraph as the package name on PyPI.
Other than that, the only change in this release compared to python-igraph 0.9.7 is that the setup script does not use distutils any more.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →