{"id":28581072,"url":"https://github.com/dimforge/distributed-physics-prototype","last_synced_at":"2025-10-08T10:16:22.804Z","repository":{"id":239415528,"uuid":"799236248","full_name":"dimforge/distributed-physics-prototype","owner":"dimforge","description":"Experiments on distributed physics with Rapier","archived":false,"fork":false,"pushed_at":"2024-10-13T20:51:51.000Z","size":157,"stargazers_count":3,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-11T04:15:40.601Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dimforge.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}},"created_at":"2024-05-11T14:36:44.000Z","updated_at":"2024-11-10T18:04:50.000Z","dependencies_parsed_at":null,"dependency_job_id":"afcb4c59-4376-46c6-b57a-98436ad55626","html_url":"https://github.com/dimforge/distributed-physics-prototype","commit_stats":null,"previous_names":["dimforge/distributed-physics-prototype"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/dimforge/distributed-physics-prototype","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimforge%2Fdistributed-physics-prototype","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimforge%2Fdistributed-physics-prototype/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimforge%2Fdistributed-physics-prototype/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimforge%2Fdistributed-physics-prototype/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dimforge","download_url":"https://codeload.github.com/dimforge/distributed-physics-prototype/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimforge%2Fdistributed-physics-prototype/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265218750,"owners_count":23729528,"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":[],"created_at":"2025-06-11T04:15:33.697Z","updated_at":"2025-10-08T10:16:17.481Z","avatar_url":"https://github.com/dimforge.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Distributed physics experiments\n\nExperiments on distributed physics with rapier. Note that this repository is **not** production-ready\nand involves many manual steps in order to deploy the rapier distributed simulation cluster. The main\ngoal of this repository is to experiment with designs for building a distributed physics systems aiming\nto simulate 1 million objects simultaneously.\n\nSeveral executable are involved:\n\n- **steadyum-partitionner**: responsible for partitioning the 3D simulation domain, assigning work to runners, and\n  (virtual) time synchronization between runners.\n- **steadyum-runner**: responsible for running a Rapier physics engine instance. It receives objects to simulate,\n  simulates them, and automatically detects if an object needs to be transferred to a different runner as it moves.\n- **steadyum-updater**: this is not a mandatory component, but it convenient for fast iterations. When deployed on a\n  new node, it will communicate with the master `partitionner` instance to automatically download the latest versions\n  of the partitionnar and runner executables, and deploys them locally.\n\n## Building\n\nBuild each executable with cargo, just like any other rust project. We recommend stripping the executables to\nreduce their sizes:\n\n```shell\ncargo build --release -p steadyum-partitionner --features dim3\nstrip target/release/steadyum-partitionner\n\ncargo build --release -p steadyum-updater --features dim3\nstrip target/release/steadyum-updater\n\ncargo build --release -p steadyum-runner --features dim3\nstrip target/release/steadyum-runner\n```\n\n## Deploying\n\nOnce all the executables are built you will need at least two nodes: one for running the master partitionner, one\nfor running the runners.\n\n### Master partitionner node\n\nOn the master partitionner node:\n\n1. Add a configuration file `.env` with the following content:\n\n```.env\nREDIS_ADDR=\"redis://127.0.0.1\"\nPARTITIONNER_ADDR=\"http://localhost\"\nPARTITIONNER_PORT=\"3535\"\nRUNNER_EXE=\"./steadyum-runner\"\nZENOH_ROUTER=\"\"\n```\n\n1. Run `steadyum-partitionner`.\n\n### Runners nodes\n\nThere can be one or many runner nodes. They will all contribute to the same physic simulation.\nOn each of the runner node:\n\n1. Add a configuration file `.env` with the following content. Be sure to replace the ip by the IP of\n   the node running the master partitionner. Replace `ens4` by the name of the private network interface\n   of the runner node. This is used to automatically retrieve its ip address on the private network.\n\n```shell\nPARTITIONNER_ADDR=\"http://10.0.2.153\"\nPARTITIONNER_PORT=\"3535\"\nRUNNER_EXE=\"./runner\"\nPRIV_NET_INT=\"ens4\"\nZENOH_ROUTER=\"tcp/10.0.2.153:7447\"\n```\n\n2. Upload the `steadyum-updater` and run it: `./steadyum-updater`. Based on the env file, it will automatically\n   communicate with the master partitionner and download the necessary executables locally (runner and partitionner).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdimforge%2Fdistributed-physics-prototype","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdimforge%2Fdistributed-physics-prototype","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdimforge%2Fdistributed-physics-prototype/lists"}