{"id":25644272,"url":"https://github.com/joaomlneto/byzzbench","last_synced_at":"2026-06-24T09:31:34.650Z","repository":{"id":278330517,"uuid":"774969707","full_name":"joaomlneto/byzzbench","owner":"joaomlneto","description":"BFT Protocol Testing Benchmarking Suite","archived":false,"fork":false,"pushed_at":"2026-06-18T20:01:44.000Z","size":5803,"stargazers_count":2,"open_issues_count":18,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-06-18T22:05:51.306Z","etag":null,"topics":["bft-algorithms","bft-protocols","bft-smr","bug-reproduction","byzantine-consensus","byzantine-failures","byzantine-fault-tolerance","concurrency-testing"],"latest_commit_sha":null,"homepage":"https://joaomlneto.github.io/byzzbench/","language":"Java","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/joaomlneto.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,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"joaomlneto","patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"lfx_crowdfunding":null,"custom":null}},"created_at":"2024-03-20T14:29:20.000Z","updated_at":"2026-05-12T20:36:02.000Z","dependencies_parsed_at":"2025-11-14T09:07:03.703Z","dependency_job_id":"2e318674-0c5a-40e4-9599-c529879af20e","html_url":"https://github.com/joaomlneto/byzzbench","commit_stats":null,"previous_names":["joaomlneto/byzzbench"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/joaomlneto/byzzbench","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joaomlneto%2Fbyzzbench","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joaomlneto%2Fbyzzbench/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joaomlneto%2Fbyzzbench/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joaomlneto%2Fbyzzbench/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/joaomlneto","download_url":"https://codeload.github.com/joaomlneto/byzzbench/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joaomlneto%2Fbyzzbench/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34724746,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-24T02:00:07.484Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["bft-algorithms","bft-protocols","bft-smr","bug-reproduction","byzantine-consensus","byzantine-failures","byzantine-fault-tolerance","concurrency-testing"],"created_at":"2025-02-23T07:34:28.756Z","updated_at":"2026-06-24T09:31:34.640Z","avatar_url":"https://github.com/joaomlneto.png","language":"Java","funding_links":["https://github.com/sponsors/joaomlneto"],"categories":[],"sub_categories":[],"readme":"# ByzzBench - a BFT Protocol Benchmarking Suite\n\n[Documentation Website](https://joaomlneto.github.io/byzzbench/)\n\n[![Build Docker Image](https://github.com/joaomlneto/byzzbench/actions/workflows/docker-build.yml/badge.svg)](https://github.com/joaomlneto/byzzbench/actions/workflows/docker-build.yml)\n\n\u003e ByzzBench is a benchmark suite designed to evaluate the performance of testing algorithms in detecting bugs in\n\u003e Byzantine\n\u003e Fault Tolerance (BFT) protocols. It is designed to be modular and extensible, allowing for easy integration of new\n\u003e protocols and scenarios.\n\u003e\n\u003e ByzzBench is designed for a standardized implementation of BFT protocols and their execution in a controlled testing\n\u003e environment, controlling the nondeterminism in concurrency, network and process faults in the protocol execution,\n\u003e enabling the functionality to enforce particular execution scenarios and thereby facilitating the implementation of\n\u003e testing algorithm for BFT protocols.\n\nThis is a Gradle monorepo that contains the following modules:\n\n- `simulator`: The core benchmarking suite, written in Java/Spring Boot. It currently also includes the protocol\n  implementations.\n- `webui`: A web interface for the benchmarking suite, written in React/NextJS.\n\n## Prerequisites\n\nFor the benchmarking suite to work, you need to have the following installed on your system:\n\n- Java 21\n\nFor the user interface to work, you need to have the following installed on your system:\n\n- Node.js\n- pnpm\n\n### MacOS\n\nInstalling everything on macOS using HomeBrew can be done with the following commands:\n\n```\nbrew install openjdk@17 node pnpm\n```\n\n### Windows\n\nInstalling JDK:\n\n1. Through Eclipse Adoptium:\n\n    - Download the version you need (JDK-21)\n    - When installing, select \"Set or override JAVA_HOME variable\"\n\n2. Through Windows Package Manager - \"winget\":\n\n```\n// Eclipse Temurin from Eclipse Adoptium\nwinget install EclipseAdoptium.Temurin.21.JDK\n\n// from Microsoft Build\nwinget install Microsoft.OpenJDK.21\n```\n\n\u003e [!NOTE]\n\u003e You might need to set a PATH and JAVA_HOME!\n\nTo verify the installation execute the following in cmd (should match the installed version):\n\n```\njava -version\n```\n\n\u003e [!NOTE]\n\u003e If it displays a different version, then the PATH or JAVA_HOME could be set incorrectly (pointing to another version)!\n\nInstalling Node.js:\n\n1. Through installer: https://nodejs.org/en/download/prebuilt-installer\n2. Through package managers: https://nodejs.org/en/download/package-manager\n\nTo install pnpm, you can use npm package manager (installed alongside Node.js):\n\n```\nnpm install -g pnpm\n```\n\nor Corepack:\n\n```\ncorepack enable pnpm\n```\n\nor PowerShell:\n\n```\nInvoke-WebRequest https://get.pnpm.io/install.ps1 -UseBasicParsing | Invoke-Expression\n```\n\n\u003e [!WARNING]\n\u003e Windows Defender may block this option!\n\u003e\n\u003e Using npm or Corepack is the recommended way!\n\nReference: https://pnpm.io/installation\n\nFor other operating systems, please refer to the respective installation instructions.\n\n## Benchmark Suite\n\nTo build and run the benchmarking suite, run the following command:\n\n```\n./gradlew bootRun\n```\n\n### Configuring\n\nTo configure the simulator, you can modify the [\n`application.properties` file](simulator/src/main/resources/application.yml) in the `simulator` module.\n\nIt has two main subsections:\n\n- `explorationStrategy`: The explorationStrategy configuration: which explorationStrategy to use, and its parameters\n  such as the probability of\n  dropping messages.\n- `scenario`: The scenario configuration: which scenario to run, and its parameters such as conditions to stop the\n  simulation.\n\n## Web Interface\n\nThe web UI is a simple React application (using NextJS/TypeScript) that allows you to interact with the simulator. It is\na work in progress, but provides useful insights into the behavior of the protocols.\n\nTo build the web interface, run the following command **while the simulator is running**:\n\n```\n(cd webui \u0026\u0026 pnpm install \u0026\u0026 pnpm run kubb:generate \u0026\u0026 pnpm run build)\n```\n\n\u003e [!NOTE]\n\u003e The simulator must be running for `kubb:generate` to succeed.\n\nThe above command will generate the necessary TypeScript bindings for the simulator and build the web interface. You\nonly need to run it once.\n\nThen, to start the web server, run the following command:\n\n```\n(cd webui \u0026\u0026 pnpm run start)\n```\n\nThe UI should then be available at http://localhost:3000\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoaomlneto%2Fbyzzbench","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjoaomlneto%2Fbyzzbench","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoaomlneto%2Fbyzzbench/lists"}