{"id":18485004,"url":"https://github.com/weso/pregel-rs","last_synced_at":"2025-12-12T13:45:58.022Z","repository":{"id":152578651,"uuid":"623377638","full_name":"weso/pregel-rs","owner":"weso","description":"A Graph library written in Rust for implementing your own algorithms in a Pregel fashion","archived":false,"fork":false,"pushed_at":"2024-12-23T12:53:03.000Z","size":401,"stargazers_count":9,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-31T11:18:10.077Z","etag":null,"topics":["algorithms","duckdb","graph","libray","pagerank","polars","pregel","rust"],"latest_commit_sha":null,"homepage":"https://crates.io/crates/pregel-rs","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/weso.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2023-04-04T08:51:41.000Z","updated_at":"2025-02-04T04:32:22.000Z","dependencies_parsed_at":"2023-04-27T10:35:30.475Z","dependency_job_id":null,"html_url":"https://github.com/weso/pregel-rs","commit_stats":null,"previous_names":["angelip2303/pregel-rs"],"tags_count":13,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weso%2Fpregel-rs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weso%2Fpregel-rs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weso%2Fpregel-rs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weso%2Fpregel-rs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/weso","download_url":"https://codeload.github.com/weso/pregel-rs/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247912685,"owners_count":21017035,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["algorithms","duckdb","graph","libray","pagerank","polars","pregel","rust"],"created_at":"2024-11-06T12:44:03.104Z","updated_at":"2025-12-12T13:45:53.001Z","avatar_url":"https://github.com/weso.png","language":"Rust","funding_links":[],"categories":["Rust"],"sub_categories":[],"readme":"# `pregel-rs`\n\n[![CI](https://github.com/angelip2303/pregel-rs/actions/workflows/ci.yml/badge.svg)](https://github.com/angelip2303/pregel-rs/actions/workflows/ci.yml)\n[![codecov](https://codecov.io/gh/angelip2303/pregel-rs/branch/main/graph/badge.svg?token=8SCDSSPH13)](https://codecov.io/gh/angelip2303/pregel-rs)\n[![latest_version](https://img.shields.io/crates/v/pregel-rs)](https://crates.io/crates/pregel-rs)\n[![documentation](https://img.shields.io/docsrs/pregel-rs/latest)](https://docs.rs/pregel-rs/latest/pregel_rs/)\n\n`pregel-rs` is a Graph processing library written in Rust that features\na Pregel-based Framework for implementing your own algorithms in a\nmessage-passing fashion. It is designed to be efficient and scalable,\nmaking it suitable for processing large-scale graphs.\n\n## Features\n\n- _Pregel-based framework_: `pregel-rs` is a powerful graph processing model\n  that allows users to implement graph algorithms in a message-passing fashion,\n  where computation is performed on vertices and messages are passed along edges.\n  `pregel-rs` provides a framework that makes it easy to implement graph\n  algorithms using this model.\n\n- _Rust-based implementation_: `pregel-rs` is implemented in Rust, a systems\n  programming language known for its safety, concurrency, and performance.\n  Rust's strong type system and memory safety features help ensure that `pregel-rs`\n  is robust and reliable.\n\n- _Efficient and scalable_: `pregel-rs` designed to be efficient and scalable,\n  making it suitable for processing large-scale graphs. It uses parallelism and\n  optimization techniques to minimize computation and communication overhead,\n  allowing it to handle graphs with millions or even billions of vertices and edges.\n  For us to achieve this, we have built it on top of [polars](https://github.com/pola-rs/polars)\n  a blazingly fast DataFrames library implemented in Rust using Apache Arrow\n  Columnar Format as the memory model.\n\n- _Graph abstraction_: `pregel-rs` provides a graph abstraction that makes\n  it easy to represent and manipulate graphs in Rust. It supports both directed and\n  undirected graphs, and provides methods for adding, removing, and querying vertices\n  and edges.\n\n- _Customizable computation_: `pregel-rs` allows users to implement their own\n  computation logic by defining vertex computation functions. This gives users the\n  flexibility to implement their own graph algorithms and customize the behavior\n  of `pregel-rs` to suit their specific needs.\n\n## Getting started\n\nTo get started with `pregel-rs`, you can follow these steps:\n\n1. _Install Rust_: `pregel-rs` requires Rust to be installed on your system.\n   You can install Rust by following the instructions on the official Rust website:\n   https://www.rust-lang.org/tools/install\n\n2. _Create a new Rust project_: Once Rust is installed, you can create a new Rust\n   project using the Cargo package manager, which is included with Rust. You can\n   create a new project by running the following command in your terminal:\n\n```sh\ncargo new my_pregel_project\n```\n\n3. _Add `pregel-rs` as a dependency_: Next, you need to add `pregel-rs` as a\n   dependency in your `Cargo.toml` file, which is located in the root directory\n   of your project. You can add the following line to your `Cargo.toml` file:\n\n```toml\n[dependencies]\npregel-rs = \"0.0.13\"\n```\n\n4. _Implement your graph algorithm_: Now you can start implementing your graph\n   algorithm using the `pregel-rs` framework. You can define your vertex computation\n   functions and use the graph abstraction provided by `pregel-rs` to manipulate the graph.\n\n5. _Build and run your project_: Once you have implemented your graph algorithm, you\n   can build and run your project using the Cargo package manager. You can build your\n   project by running the following command in your terminal:\n\nYou could also run one of the examples to check how this library works:\n\n```sh\ncargo build\ncargo run --example pagerank\n```\n\n## Acknowledgments\n\nRead [Pregel: A System for Large-Scale Graph Processing](https://15799.courses.cs.cmu.edu/fall2013/static/papers/p135-malewicz.pdf)\nfor a reference on how to implement your own Graph processing algorithms in a Pregel fashion. If you want to take some\ninspiration from some curated-sources, just explore the [/examples](https://github.com/angelip2303/graph-rs/tree/main/examples)\nfolder of this repository.\n\n## Related projects\n\n1. [GraphX](https://github.com/apache/spark/tree/master/graphx) is a library enabling Graph processing in the context of\n   Apache Spark.\n2. [GraphFrames](https://github.com/graphframes/graphframes) is the DataFrame-based equivalent to GraphX.\n\n## License\n\nCopyright \u0026copy; 2023 Ángel Iglesias Préstamo (\u003cangel.iglesias.prestamo@gmail.com\u003e)\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program. If not, see \u003chttps://www.gnu.org/licenses/\u003e.\n\n**By contributing to this project, you agree to release your\ncontributions under the same license.**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fweso%2Fpregel-rs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fweso%2Fpregel-rs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fweso%2Fpregel-rs/lists"}