# petgraph **Repository Path**: trusted-list/petgraph ## Basic Information - **Project Name**: petgraph - **Description**: Graph data structure library for Rust. - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: https://docs.rs/petgraph/ - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-18 - **Last Updated**: 2026-04-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

Petgraph Logo

petgraph === > **Warning:** The version currently on the trunk branch is the new development version which is currently in the process of transitioning to a multi-crate layout and new architecture. The previous release is available under the `0.8` branch. Petgraph provides fast, flexible graph data structures and algorithms in Rust. Supporting both directed and undirected graphs with arbitrary node and edge data. It comes with: * **Multiple Graph Types**: Graph, StableGraph, GraphMap, and MatrixGraph to suit various use cases. * **Algorithms Included & Extensible**: For tasks like path-finding, minimum spanning trees, graph isomorphisms, and more - with traits exposed for implementing custom algorithms. * **Graph Visualization support**: Export/import graphs to/from [DOT][dot-url] format for visualization with [Graphviz][graphviz-url]. Supports Rust 1.64 and later. This will only change on major releases. [![Crates.io][crates-badge]][crates-url] [![docs.rs][docsrs-badge]][docsrs] ![MSRV][msrv-badge] [![Discord chat][discord-badge]][discord-url] [![Build Status][build-status]][ci-url] ## Example For more examples, see the [documentation on docs.rs][docsrs-examples]. ```rust use petgraph::graph::UnGraph; use petgraph::algo::{dijkstra, min_spanning_tree}; use petgraph::data::FromElements; use petgraph::dot::{Dot, Config}; use petgraph::visit::NodeIndexable; fn main() { // Create an undirected graph with associated data // of type `i32` for the nodes and `()` for the edges. let g = UnGraph::::from_edges(&[ (0, 1), (1, 2), (2, 3), (0, 3) ]); // The graph looks like this: // 0 -- 1 // | | // 3 -- 2 // Find the shortest path from `0` to `2` using `1` as the cost for every edge. let node_map = dijkstra(&g, 0.into(), Some(2.into()), |_| 1); assert_eq!(&2i32, node_map.get(&g.from_index(2)).unwrap()); // Get the minimum spanning tree of the graph as a new graph, and check that // one edge was trimmed. let mst = UnGraph::<_, _>::from_elements(min_spanning_tree(&g)); assert_eq!(g.raw_edges().len() - 1, mst.raw_edges().len()); // Output the tree to `graphviz` `DOT` format println!("{:?}", Dot::with_config(&mst, &[Config::EdgeNoLabel])); // graph { // 0 [ label = "0" ] // 1 [ label = "0" ] // 2 [ label = "0" ] // 3 [ label = "0" ] // 0 -- 1 [ ] // 2 -- 3 [ ] // 1 -- 2 [ ] // } } ``` ## Documentation * [API documentation on docs.rs][docsrs] * [Examples on docs.rs][docsrs-examples] * [Changelog][changelog] ### Crate features petgraph is built with these features enabled by default: - `graphmap` - Enables [`GraphMap`][docsrs-graph-map]. - `stable_graph` - Enables [`StableGraph`][docsrs-stable-graph]. - `matrix_graph` - Enables [`MatrixGraph`][docsrs-matrix-graph]. - `std` - Enables the Rust Standard Library. Disabling the `std` feature makes it possible to use `petgraph` in `no_std` contexts. Optionally, the following features can be enabled: - `serde-1` - Enables serialization for `Graph, StableGraph, GraphMap` using [serde 1.0][docsrs-serde]. Requires Rust version as required by serde. - `rayon` - Enables parallel iterators for the underlying data in `GraphMap`. Requires Rust version as required by [rayon][docsrs-rayon]. - `dot_parser` - Enables parsing graph from [DOT/Graphviz][dot-url] strings and files. - `generate` - Enables graph generators. - `unstable` - Enables unstable crate features (currently only `generate`). The API of functionality behind this flag is subject to change at any time. ## Getting Help First, see if the answer to your question can be found in the [API documentation][docsrs]. If the answer is not there, feel free to ask your question on the [discussions page][github-discussions]. We would be happy to try to answer your question. If you find a bug, or have a feature request, please [open an issue][github-new-issue]. ## Contributing 🦕 Thanks for your help improving the project! We are so happy to have you! We have a [contributing guide][contributing] to help you get started. ## Logo The mascot is named "Sir Paul Rustory Graphosaurus" (close friends call him Paul). The logo has been created by the talented Aren. ## License Dual-licensed to be compatible with the Rust project. Licensed under the [Apache License, Version 2.0][apache-license] or the [MIT license][mit-license], at your option. This file may not be copied, modified, or distributed except according to those terms. [apache-license]: http://www.apache.org/licenses/LICENSE-2.0 [build-status]: https://github.com/petgraph/petgraph/actions/workflows/ci.yml/badge.svg [changelog]: CHANGELOG.md [ci-url]: https://github.com/petgraph/petgraph/actions/workflows/ci.yml [contributing]: CONTRIBUTING.md [crates-badge]: https://img.shields.io/crates/v/petgraph.svg [crates-url]: https://crates.io/crates/petgraph [discord-badge]: https://img.shields.io/discord/1166289348384280616?logo=discord&style=flat [discord-url]: https://discord.gg/n2tc79tJ4e [docsrs]: https://docs.rs/petgraph/latest/petgraph/ [docsrs-badge]: https://img.shields.io/docsrs/petgraph [docsrs-examples]: https://docs.rs/petgraph/latest/petgraph/index.html#examples [docsrs-graph-map]: https://docs.rs/petgraph/latest/petgraph/graphmap/struct.GraphMap.html [docsrs-matrix-graph]: https://docs.rs/petgraph/latest/petgraph/matrix_graph/struct.MatrixGraph.html [docsrs-rayon]: https://docs.rs/rayon/latest/rayon/ [docsrs-serde]: https://docs.rs/serde/latest/serde/index.html [docsrs-stable-graph]: https://docs.rs/petgraph/latest/petgraph/stable_graph/struct.StableGraph.html [dot-url]: https://www.graphviz.org/doc/info/lang.html [github-discussions]: https://github.com/petgraph/petgraph/discussions [github-new-issue]: https://github.com/petgraph/petgraph/issues/new [graphviz-url]: https://www.graphviz.org/ [mit-license]: http://opensource.org/licenses/MIT [msrv-badge]: https://img.shields.io/badge/rustc-1.64+-blue.svg