{"id":13595308,"url":"https://github.com/stateright/stateright","last_synced_at":"2025-05-14T03:09:08.716Z","repository":{"id":37470262,"uuid":"123727116","full_name":"stateright/stateright","owner":"stateright","description":"A model checker for implementing distributed systems.","archived":false,"fork":false,"pushed_at":"2025-04-28T03:18:33.000Z","size":2825,"stargazers_count":1629,"open_issues_count":11,"forks_count":59,"subscribers_count":23,"default_branch":"master","last_synced_at":"2025-05-07T22:42:10.559Z","etag":null,"topics":["actor-model","distributed-systems","model-checker","paxos"],"latest_commit_sha":null,"homepage":"https://docs.rs/stateright","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stateright.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES.md","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,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-03-03T20:05:53.000Z","updated_at":"2025-05-06T22:10:34.000Z","dependencies_parsed_at":"2024-01-06T07:48:37.535Z","dependency_job_id":"1accfa8a-a8cc-44d1-9e5b-89c434a2e15c","html_url":"https://github.com/stateright/stateright","commit_stats":{"total_commits":401,"total_committers":8,"mean_commits":50.125,"dds":0.1371571072319202,"last_synced_commit":"10b34cb9c7086b52e0e9122db608fce551768d68"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stateright%2Fstateright","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stateright%2Fstateright/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stateright%2Fstateright/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stateright%2Fstateright/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stateright","download_url":"https://codeload.github.com/stateright/stateright/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254059508,"owners_count":22007768,"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":["actor-model","distributed-systems","model-checker","paxos"],"created_at":"2024-08-01T16:01:47.443Z","updated_at":"2025-05-14T03:09:08.671Z","avatar_url":"https://github.com/stateright.png","language":"Rust","funding_links":[],"categories":["Projects","Rust"],"sub_categories":["Verification"],"readme":"[![chat](https://img.shields.io/discord/781357978652901386)](https://discord.gg/JbxGSVP4A6)\n[![crates.io](https://img.shields.io/crates/v/stateright.svg)](https://crates.io/crates/stateright)\n[![docs.rs](https://docs.rs/stateright/badge.svg)](https://docs.rs/stateright)\n[![LICENSE](https://img.shields.io/crates/l/stateright.svg)](https://github.com/stateright/stateright/blob/master/LICENSE)\n\nCorrectly implementing distributed algorithms such as the\n[Paxos](https://en.wikipedia.org/wiki/Paxos_%28computer_science%29) and\n[Raft](https://en.wikipedia.org/wiki/Raft_%28computer_science%29) consensus\nprotocols is notoriously difficult due to inherent nondetermism such as message\nreordering by network devices. Stateright is a\n[Rust](https://www.rust-lang.org/) actor library that aims to solve this\nproblem by providing an embedded [model\nchecker](https://en.wikipedia.org/wiki/Model_checking), a UI for exploring\nsystem behavior ([demo](http://demo.stateright.rs:3000/)), and a lightweight\nactor runtime. It also features a linearizability tester that can be run within\nthe model checker for more exhaustive test coverage than similar solutions such\nas [Jepsen](https://jepsen.io/).\n\n![Stateright Explorer screenshot](https://raw.githubusercontent.com/stateright/stateright/master/explorer.png)\n\n## Getting Started\n\n1. **Please see the book, \"[Building Distributed Systems With\n   Stateright](https://www.stateright.rs).\"**\n2. A [video\n   introduction](https://youtube.com/playlist?list=PLUhyBsVvEJjaF1VpNhLRfIA4E7CFPirmz)\n   is also available.\n3. Stateright also has detailed [API docs](https://docs.rs/stateright/).\n4. Consider also joining the [Stateright Discord\n   server](https://discord.gg/JbxGSVP4A6) for Q\u0026A or other feedback.\n\n## Examples\n\nStateright includes a variety of\n[examples](https://github.com/stateright/stateright/tree/master/examples), such\nas a [Single Decree Paxos\ncluster](https://github.com/stateright/stateright/blob/master/examples/paxos.rs)\nand an [abstract two phase commit\nmodel](https://github.com/stateright/stateright/blob/master/examples/2pc.rs).\n\nPassing a `check` CLI argument causes each example to validate itself using\nStateright's model checker:\n\n```sh\n# Two phase commit with 3 resource managers.\ncargo run --release --example 2pc check 3\n# Paxos cluster with 3 clients.\ncargo run --release --example paxos check 3\n# Single-copy (unreplicated) register with 3 clients.\ncargo run --release --example single-copy-register check 3\n# Linearizable distributed register (ABD algorithm) with 2 clients\n# assuming ordered channels between actors.\ncargo run --release --example linearizable-register check 2 ordered\n```\n\nPassing an `explore` CLI argument causes each example to spin up the Stateright\nExplorer web UI locally on port 3000, allowing you to browse system behaviors:\n\n```sh\ncargo run --release --example 2pc explore\ncargo run --release --example paxos explore\ncargo run --release --example single-copy-register explore\ncargo run --release --example linearizable-register explore\n```\n\nPassing a `spawn` CLI argument to the examples leveraging the actor\nfunctionality will cause each to spawn actors using the included runtime,\ntransmitting JSON messages over UDP:\n\n```sh\ncargo run --release --example paxos spawn\ncargo run --release --example single-copy-register spawn\ncargo run --release --example linearizable-register spawn\n```\n\nThe `bench.sh` script runs all the examples with various settings for\nbenchmarking the performance impact of changes to the library.\n\n```sh\n./bench.sh\n```\n\n# Features\n\nStateright contains a general purpose model checker offering:\n\n- Invariant checks via \"always\" properties.\n- Nontriviality checks via \"sometimes\" properties.\n- Liveness checks via \"eventually\" properties (experimental/incomplete).\n- A web browser UI for interactively exploring state space.\n- [Linearizability](https://en.wikipedia.org/wiki/Linearizability)\n  and [sequential consistency](https://en.wikipedia.org/wiki/Sequential_consistency)\n  testers.\n- Support for symmetry reduction to reduce state spaces.\n\nStateright's actor system features include:\n\n- An actor runtime that can execute actors outside the model checker in the\n  \"real world.\"\n- A model for lossy/lossless duplicating/non-duplicating networks with the\n  ability to capture actor message\n  [history](https://lamport.azurewebsites.net/tla/auxiliary/auxiliary.html) to\n  check an actor system against an expected consistency model.\n- Pluggable network semantics for model checking, allowing you to choose\n  between fewer assumptions (e.g. \"lossy unordered duplicating\") or more\n  assumptions (speeding up model checking; e.g. \"lossless ordered\").\n- An optional network adapter that provides a lossless non-duplicating ordered\n  virtual channel for messages between a pair of actors.\n\nIn contrast with other actor libraries, Stateright enables you to [formally\nverify](https://en.wikipedia.org/wiki/Formal_verification) the correctness of\nyour implementation, and in contrast with model checkers such as TLC for\n[TLA+](https://lamport.azurewebsites.net/tla/tla.html), systems implemented\nusing Stateright can also be run on a real network without being reimplemented\nin a different language.\n\n## Contribution\n\nContributions are welcome! Please [fork the\nlibrary](https://github.com/stateright/stateright/fork), push changes to your\nfork, and send a [pull\nrequest](https://help.github.com/articles/creating-a-pull-request-from-a-fork/).\nAll contributions are shared under an MIT license unless explicitly stated\notherwise in the pull request.\n\n## License\n\nStateright is copyright 2018 Jonathan Nadal and other\n[contributors](https://github.com/stateright/stateright/graphs/contributors).\nIt is made available under the MIT License.\n\nTo avoid the need for a Javascript package manager, the Stateright repository\nincludes code for the following Javascript dependency used by Stateright\nExplorer:\n\n- [KnockoutJS](https://knockoutjs.com/) is copyright 2010 Steven Sanderson, the\n  Knockout.js team, and other contributors. It is made available under the MIT\n  License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstateright%2Fstateright","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstateright%2Fstateright","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstateright%2Fstateright/lists"}