C/igraph 0.10.11 is now released. As usual, the source can be obtained from the GitHub releases page. This release brings a large number of quality enhancements, including many bug fixes and performance improvements. Upgrading is highly recommended for all igraph users.

This will be one of the last—if not *the* last—releases of the 0.10 series, with igraph 1.0 planned for release early summer this year. Pre-releases will be made available for feedback from the community.

A summary of changes in 0.10.11 is below.

### Added

`igraph_is_complete()`

checks whether there is a connection between all pairs of vertices (experimental function, contributed by Aymeric Agon-Rambosson @aagon in #2510).`igraph_join()`

creates the*join*of two graphs (experimental function, contributed by Quinn Buratynski @GanzuraTheConsumer in #2508).

### Fixed

- Fixed a corruption of the “finally” stack in
`igraph_write_graph_gml()`

for certain invalid GML files. - Fixed a memory leak in
`igraph_write_graph_lgl()`

when vertex names were present but edge weights were not. - Fixed the handling of duplicate edge IDs in
`igraph_subgraph_from_edges()`

. - Fixed conversion of sparse matrices to dense with
`igraph_sparsemat_as_matrix()`

when sparse matrix object did not make use of its full allocated capacity. `igraph_write_graph_ncol()`

and`igraph_write_graph_lgl()`

now refuse to write vertex names which would result in an invalid file that cannot be read back in.`igraph_write_graph_gml()`

now ignores graph attributes called`edge`

or`node`

with a warning. Writing these would create an invalid GML file that igraph couldn’t read back.`igraph_disjoint_union()`

and`igraph_disjoint_union_many()`

now check for overflow.`igraph_read_graph_graphml()`

now correctly compares attribute values with certain expected values, meaning that prefixes of valid values of`attr.type`

are not accepted anymore.- Empty IDs are not allowed any more in
`<key>`

tags of GraphML files as this is a violation of the GraphML specification. `igraph_is_separator()`

and`igraph_is_minimal_separator()`

now work correctly with disconnected graphs.`igraph_linegraph()`

now considers self-loops to be self-adjacent in undirected graphs, bringing consistency with how directed graphs were already handled in previous versions.`igraph_all_st_mincuts()`

now correctly returns all minimum cuts. This also fixes a problem with`igraph_minimum_size_separators()`

.- Corrected minor error in
`igraph_community_label_propagation()`

when adding labels to isolated nodes with some fixed labels present. `igraph_community_spinglass()`

no longer crashes when passing an edgeless graph and an empty weight vector.`igraph_rewire()`

no longer crashes on graphs with more than three vertices but fewer than two edges.

### Changed

`igraph_rewire()`

on longer throws an error on graphs with fewer than four vertices. These graphs are now returned unchanged, just like other graphs which are the unique realization of their degree sequence.

### Other

- Performance:
`igraph_is_simple()`

now makes more granular use of the cache. - Performance:
`igraph_degree()`

now makes use of the cache when checking for self-loops. - The performance of
`igraph_is_minimal_separator()`

was improved. `igraph_is_graphical()`

now performs graphicality checks for degree sequences of simple directed graphs in linear time, an improvement from the previously used quadratic algorithm (contributed by Arnar Bjarni Arnarson @Tagl in #2537).- Documentation improvements.