{"id":15137970,"url":"https://github.com/rerun-io/revy","last_synced_at":"2025-05-15T09:07:25.555Z","repository":{"id":225337585,"uuid":"759495269","full_name":"rerun-io/revy","owner":"rerun-io","description":"Proof-of-concept time-travel debugger for the Bevy game engine, built using Rerun.","archived":false,"fork":false,"pushed_at":"2025-01-28T17:33:07.000Z","size":211,"stargazers_count":350,"open_issues_count":3,"forks_count":6,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-05-08T03:57:51.767Z","etag":null,"topics":["bevy","debugger","gamedev","rerun","tools","visualizer"],"latest_commit_sha":null,"homepage":"https://www.rerun.io/","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/rerun-io.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-APACHE","code_of_conduct":"CODE_OF_CONDUCT.md","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":"2024-02-18T18:40:45.000Z","updated_at":"2025-05-01T15:32:08.000Z","dependencies_parsed_at":"2024-05-16T13:31:06.000Z","dependency_job_id":"da90910d-eeee-463c-8ea8-4e7b61e57195","html_url":"https://github.com/rerun-io/revy","commit_stats":{"total_commits":9,"total_committers":3,"mean_commits":3.0,"dds":0.2222222222222222,"last_synced_commit":"1c5d25eaf4ed093ee7f372d26877256d213de427"},"previous_names":["rerun-io/revy"],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rerun-io%2Frevy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rerun-io%2Frevy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rerun-io%2Frevy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rerun-io%2Frevy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rerun-io","download_url":"https://codeload.github.com/rerun-io/revy/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254310515,"owners_count":22049469,"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":["bevy","debugger","gamedev","rerun","tools","visualizer"],"created_at":"2024-09-26T07:03:58.378Z","updated_at":"2025-05-15T09:07:20.544Z","avatar_url":"https://github.com/rerun-io.png","language":"Rust","readme":"# Revy\n\n[![Latest version](https://img.shields.io/crates/v/revy.svg)](https://crates.io/crates/revy)\n[![Documentation](https://docs.rs/revy/badge.svg)](https://docs.rs/revy)\n[![MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/rerun-io/revy/blob/master/LICENSE-MIT)\n[![Apache](https://img.shields.io/badge/license-Apache-blue.svg)](https://github.com/rerun-io/revy/blob/master/LICENSE-APACHE)\n\nRevy is a proof-of-concept time-travel debugger for the [Bevy](https://github.com/bevyengine/bevy) game engine, built using [Rerun](https://github.com/rerun-io/rerun).\n\nThe general idea is that one would use Revy to investigate gameplay/physics/general-behavior-ish kinds of bugs.  \nRevy is _not_ a graphics debugger: for that you'd use e.g. [RenderDoc](https://github.com/baldurk/renderdoc).  \nIt is _not_ a performance profiler either: for that, Bevy integrates well with e.g. [Tracy](https://github.com/wolfpld/tracy).\n\nRevy works by snapshotting diffs of the Bevy database every frame that are then logged into the Rerun database.  \nThis allows you to inspect and visualize the state of the engine at any point in time, either in real-time or after the fact.  \nThese recordings can then be shared to be replayed or e.g. attached to bug reports.\n\n\u003c!-- NOTE: This one is for rendering on Github --\u003e\nhttps://github.com/rerun-io/revy/assets/2910679/cd096cbe-5e68-4acf-8010-e6c32c5568dc\n\n\u003c!-- NOTE: This one is for rendering on docs.rs --\u003e\n\u003cvideo width=\"100%\" autoplay loop muted controls\u003e\n    \u003csource src=\"https://github.com/rerun-io/revy/assets/2910679/cd096cbe-5e68-4acf-8010-e6c32c5568dc\" type=\"video/mp4\" /\u003e\n\u003c/video\u003e\n\n## Examples \n\n|[Breakout](https://github.com/rerun-io/revy/blob/0.21.0/examples/breakout.rs#L69-L82)|[3D shapes](https://github.com/rerun-io/revy/blob/0.21.0/examples/3d_shapes.rs#L41-L54)|[Alien Cake Addict](https://github.com/rerun-io/revy/blob/0.21.0/examples/alien_cake_addict.rs#L39-L52)|\n| :----------------------------------------------------------------: | :-------------------------------------------------------------: | :--------------------------------------------------------------: |\n| [*Live demo*](https://rerun.io/viewer/version/0.21.0/?url=https://static.rerun.io/rrd/0.20.0/revy_breakout_3572dc5d61f77dc4fc9675a85c74035a6ee4b020.rrd) | [*Live demo*](https://rerun.io/viewer/version/0.21.0/?url=https://static.rerun.io/rrd/0.20.0/revy_3d_shapes_146ceeb1ab6e9bb69df6e3a39df6243579ed4f1d.rrd) | [*Live demo*](https://rerun.io/viewer/version/0.21.0/?url=https://static.rerun.io/rrd/0.20.0/revy_alien_cake_addict_cadb9e027130bade64c9d9352073fc7240dfc238.rrd) |\n| \u003cpicture\u003e\u003cimg src=\"https://static.rerun.io/revy_breakout/de578dd0aee06c6ac2260da302b5e02ee4fdcdad/full.png\" alt=\"\"\u003e\u003csource media=\"(max-width: 480px)\" srcset=\"https://static.rerun.io/revy_breakout/de578dd0aee06c6ac2260da302b5e02ee4fdcdad/480w.png\"\u003e\u003csource media=\"(max-width: 768px)\" srcset=\"https://static.rerun.io/revy_breakout/de578dd0aee06c6ac2260da302b5e02ee4fdcdad/768w.png\"\u003e\u003csource media=\"(max-width: 1024px)\" srcset=\"https://static.rerun.io/revy_breakout/de578dd0aee06c6ac2260da302b5e02ee4fdcdad/1024w.png\"\u003e\u003csource media=\"(max-width: 1200px)\" srcset=\"https://static.rerun.io/revy_breakout/de578dd0aee06c6ac2260da302b5e02ee4fdcdad/1200w.png\"\u003e\u003c/picture\u003e | \u003cpicture\u003e\u003cimg src=\"https://static.rerun.io/revy_3d_shapes/28870c94c4ffec871916890d8eaa8661da1b364e/full.png\" alt=\"\"\u003e\u003csource media=\"(max-width: 480px)\" srcset=\"https://static.rerun.io/revy_3d_shapes/28870c94c4ffec871916890d8eaa8661da1b364e/480w.png\"\u003e\u003csource media=\"(max-width: 768px)\" srcset=\"https://static.rerun.io/revy_3d_shapes/28870c94c4ffec871916890d8eaa8661da1b364e/768w.png\"\u003e\u003csource media=\"(max-width: 1024px)\" srcset=\"https://static.rerun.io/revy_3d_shapes/28870c94c4ffec871916890d8eaa8661da1b364e/1024w.png\"\u003e\u003csource media=\"(max-width: 1200px)\" srcset=\"https://static.rerun.io/revy_3d_shapes/28870c94c4ffec871916890d8eaa8661da1b364e/1200w.png\"\u003e\u003c/picture\u003e |\u003cpicture\u003e\u003cimg src=\"https://static.rerun.io/revy_alien_cake_addict/8c6f1828dec207f86a887d1b180e9d92b38b4523/full.png\" alt=\"\"\u003e\u003csource media=\"(max-width: 480px)\" srcset=\"https://static.rerun.io/revy_alien_cake_addict/8c6f1828dec207f86a887d1b180e9d92b38b4523/480w.png\"\u003e\u003csource media=\"(max-width: 768px)\" srcset=\"https://static.rerun.io/revy_alien_cake_addict/8c6f1828dec207f86a887d1b180e9d92b38b4523/768w.png\"\u003e\u003csource media=\"(max-width: 1024px)\" srcset=\"https://static.rerun.io/revy_alien_cake_addict/8c6f1828dec207f86a887d1b180e9d92b38b4523/1024w.png\"\u003e\u003csource media=\"(max-width: 1200px)\" srcset=\"https://static.rerun.io/revy_alien_cake_addict/8c6f1828dec207f86a887d1b180e9d92b38b4523/1200w.png\"\u003e\u003c/picture\u003e |\n\n---\n\n⚠️ _This is not an official Rerun project. This is a side-experiment meant to explore the possibilities that a tool like Rerun could open when it comes to gamedev. It is not a full-fledged, properly maintained thing -- nor does it aim to be. It's also probably buggy and slow in many ways, and it certainly is full of code abominations 🙃._ \n\n## Usage\n\n1. [Install the Rerun Viewer](https://www.rerun.io/docs/getting-started/installing-viewer) (`0.21`).\n\n2. Add `revy` to your dependencies:\n    ```toml\n    revy = \"0.21\"  # always matches the rerun version\n    ```\n\n3. Initialize the `rerun` plugin:\n    ```rust,ignore\n    .add_plugins({\n        let rec = revy::RecordingStreamBuilder::new(\"\u003cyour_app_name\u003e\").spawn().unwrap();\n        revy::RerunPlugin { rec }\n    })\n    ```\n    This will start a Rerun Viewer in the background and stream the recording data to it.  \n    Check out the [`RecordingStreamBuilder`](https://docs.rs/rerun/latest/rerun/struct.RecordingStreamBuilder.html) docs for other options (saving to file, connecting to a remote viewer, etc).\n\n## Examples\n\nThis repository comes with a number of pre-injected Bevy examples:\n\n```shell\ncargo run --example breakout\ncargo run --example alien_cake_addict\n```\n\n\n## Custom loggers\n\nRevy will record every components of every single entity (), either using one of the builtin [dedicated loggers](./src/default_loggers.rs), or using the generic reflection-based logger.\n\nYou can also register your own custom loggers by inserting a `RerunComponentLoggers` resource:\n```rust,ignore\n.insert_resource(revy::RerunComponentLoggers::new([\n    (\n        \"bevy_render::view::visibility::ViewVisibility\".into(),\n        Some(revy::RerunLogger::new(\n            |_world, _all_entities, entity, _component| {\n                let suffix = None;\n\n                use revy::external::rerun;\n                let data = entity\n                    .get::\u003cViewVisibility\u003e()\n                    .map(|vviz| {\n                        revy::Aliased::\u003crerun::components::Text\u003e::new(\n                            \"ViewVisibility\",\n                            rerun::components::Text(\n                                if vviz.get() { \":)))\" } else { \":'(\" }.into(),\n                            ),\n                        )\n                    })\n                    .map(|data| Box::new(data) as _);\n\n                (suffix, data)\n            },\n        )),\n    ),\n]))\n```\n\n## Compatibility\n\n| Bevy                                                             | Revy                                                          | Rerun                                                          |\n| ---------------------------------------------------------------- | ------------------------------------------------------------- | -------------------------------------------------------------- |\n| [0.13](https://github.com/bevyengine/bevy/releases/tag/v0.13.0)  | [0.14](https://github.com/rerun-io/revy/releases/tag/0.14.0)  | [0.14](https://github.com/rerun-io/rerun/releases/tag/0.14.0)  |\n| [0.13](https://github.com/bevyengine/bevy/releases/tag/v0.13.0)  | [0.15](https://github.com/rerun-io/revy/releases/tag/0.15.0)  | [0.15](https://github.com/rerun-io/rerun/releases/tag/0.15.0)  |\n| [0.13](https://github.com/bevyengine/bevy/releases/tag/v0.13.0)  | [0.16](https://github.com/rerun-io/revy/releases/tag/0.16.0)  | [0.16](https://github.com/rerun-io/rerun/releases/tag/0.16.0)  |\n| [0.14](https://github.com/bevyengine/bevy/releases/tag/v0.14.0)  | [0.17](https://github.com/rerun-io/revy/releases/tag/0.17.0)  | [0.17](https://github.com/rerun-io/rerun/releases/tag/0.17.0)  |\n| [0.15](https://github.com/bevyengine/bevy/releases/tag/v0.15.0)  | [0.20](https://github.com/rerun-io/revy/releases/tag/0.20.0)  | [0.20](https://github.com/rerun-io/rerun/releases/tag/0.20.0)  |\n| [0.15](https://github.com/bevyengine/bevy/releases/tag/v0.15.0)  | [0.21](https://github.com/rerun-io/revy/releases/tag/0.21.0)  | [0.21](https://github.com/rerun-io/rerun/releases/tag/0.21.0)  |\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frerun-io%2Frevy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frerun-io%2Frevy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frerun-io%2Frevy/lists"}