Skip to content

Add BRP to render app#23446

Open
Zeophlite wants to merge 26 commits intobevyengine:mainfrom
Zeophlite:brp-render
Open

Add BRP to render app#23446
Zeophlite wants to merge 26 commits intobevyengine:mainfrom
Zeophlite:brp-render

Conversation

@Zeophlite
Copy link
Copy Markdown
Contributor

@Zeophlite Zeophlite commented Mar 21, 2026

Objective

  • BRP on the RenderApp

Solution

  • Add type registry to RenderApp
  • Add BRP systems to render app
  • Add HTTP listener to extra port

I suggest hiding whitespace for reviewing:

image

Related:

Testing

  • CI
  • in terminal 1 run cargo run --example client --features="bevy_remote"
  • in terminal 2 run curl -d'{"jsonrpc":"2.0","method":"world.list_resources","id":1,"params":{}}' -X POST -H "Accept: applcation/json" -H "Content-Type: application/json" http://127.0.0.1:15702
  • in terminal 2 run curl -d'{"jsonrpc":"2.0","method":"world.list_resources","id":1,"params":{}}' -X POST -H "Accept: applcation/json" -H "Content-Type: application/json" http://127.0.0.1:15703

@github-actions
Copy link
Copy Markdown
Contributor

The generated examples/README.md is out of sync with the example metadata in Cargo.toml or the example readme template. Please run cargo run -p build-templated-pages -- update examples to update it, and commit the file change.

@Zeophlite Zeophlite added the D-Modest A "normal" level of difficulty; suitable for simple features or challenging fixes label Mar 21, 2026
@Zeophlite Zeophlite marked this pull request as ready for review March 21, 2026 15:39
@Zeophlite Zeophlite added S-Needs-Help The author needs help finishing this PR. A-Dev-Tools Tools used to debug Bevy applications. C-Feature A new feature, making something new possible labels Mar 21, 2026
@kfc35 kfc35 self-requested a review March 21, 2026 16:15
@Zeophlite Zeophlite added this to the 0.19 milestone Mar 21, 2026
Zeophlite and others added 2 commits March 22, 2026 23:24
Co-authored-by: Kevin Chen <chen.kevin.f@gmail.com>
@Zeophlite Zeophlite removed the S-Needs-Help The author needs help finishing this PR. label Mar 25, 2026
@Zeophlite Zeophlite added S-Ready-For-Final-Review This PR has been approved by the community. It's ready for a maintainer to consider merging it S-Needs-Review Needs reviewer attention (from anyone!) to move forward and removed S-Ready-For-Final-Review This PR has been approved by the community. It's ready for a maintainer to consider merging it labels Mar 25, 2026
github-merge-queue bot pushed a commit that referenced this pull request Mar 25, 2026
# Objective

- List schedules in BRP

## Solution

- Add the endpoint
- Add to `Schedules` some tracking of `temporarily_removed` (schedule
removed to execute) and `empty_labels` (no `Schedule` for that label)

## Related:

- #23452
- #23446

## Testing

- in terminal 1 run `cargo run --example server
--features="bevy_remote"`
- in terminal 2 run `curl
-d'{"jsonrpc":"2.0","method":"schedule.list","id":1,"params":{}}' -X
POST -H "Accept: applcation/json" -H "Content-Type: application/json"
http://127.0.0.1:15702`

<details><summary>Response</summary>
<p>

```json
{
    "jsonrpc": "2.0",
    "id": 1,
    "result": {
        "empty_schedule_labels": [
            "FixedPreUpdate",
            "FixedUpdate"
        ],
        "schedule_labels": [
            "Startup",
            "First",
            "RunFixedMainLoop",
            "PostStartup",
            "FixedFirst",
            "StateTransition",
            "PreUpdate",
            "PostUpdate",
            "Update",
            "PreStartup",
            "SpawnScene",
            "Last",
            "FixedLast",
            "FixedPostUpdate",
            "FixedMain"
        ],
        "unavailable_schedule_labels": [
            "Main",
            "RemoteLast"
        ]
    }
}
```

</p>
</details>

---------

Co-authored-by: Kevin Chen <chen.kevin.f@gmail.com>
@atlv24
Copy link
Copy Markdown
Contributor

atlv24 commented Mar 25, 2026

Concretely, I think you should add a run condition "hasnt_started" and then do start_http_server.run_if(hasnt_started)

@Zeophlite
Copy link
Copy Markdown
Contributor Author

There's a nice builtin, start_http_server.run_if(run_once)

@kfc35 kfc35 self-requested a review March 26, 2026 15:02
Copy link
Copy Markdown
Contributor

@kfc35 kfc35 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I’ll review the other PR #23513 since it looks like this has code dependent on it

github-merge-queue bot pushed a commit that referenced this pull request Mar 26, 2026
# Objective

- Describe the graph for a given schedule

## Solution

- Add endpoint `schedule.graph`

## Related:

- #23447
- #23446

## Testing

- in terminal 1 run `cargo run --example server
--features="bevy_remote"`
- in terminal 2 run `curl
-d'{"jsonrpc":"2.0","method":"schedule.graph","id":1,"params":{"schedule_name":"First"}}'
-X POST -H "Accept: applcation/json" -H "Content-Type: application/json"
http://127.0.0.1:15702 `

<details><summary>Response</summary>
<p>

```json
{
    "jsonrpc": "2.0",
    "id": 1,
    "result": {
        "systemsets": [
            {
                "key": "SystemSetKey(1v1)",
                "method": "SystemTypeSet:bevy_ecs::message::update::message_update_system"
            },
            {
                "key": "SystemSetKey(2v1)",
                "method": "MessageUpdateSystems"
            },
            {
                "key": "SystemSetKey(3v1)",
                "method": "SystemTypeSet:bevy_time::time_system"
            },
            {
                "key": "SystemSetKey(4v1)",
                "method": "TimeSystems"
            },
            {
                "key": "SystemSetKey(5v1)",
                "method": "SystemTypeSet:bevy_render::view::window::screenshot::clear_screenshots"
            },
            {
                "key": "SystemSetKey(6v1)",
                "method": "SystemTypeSet:bevy_ecs::schedule::executor::ApplyDeferred"
            },
            {
                "key": "SystemSetKey(7v1)",
                "method": "SystemTypeSet:bevy_ui::widget::viewport::viewport_picking"
            },
            {
                "key": "SystemSetKey(8v1)",
                "method": "PostInput"
            },
            {
                "key": "SystemSetKey(9v1)",
                "method": "SystemTypeSet:bevy_picking::input::mouse_pick_events"
            },
            {
                "key": "SystemSetKey(10v1)",
                "method": "Input"
            },
            {
                "key": "SystemSetKey(11v1)",
                "method": "SystemTypeSet:bevy_picking::input::touch_pick_events"
            }
        ],
        "hierarchy_nodes": [
            "Set(SystemSetKey(11v1))",
            "Set(SystemSetKey(10v1))",
            "System(SystemKey(6v1))",
            "Set(SystemSetKey(9v1))",
            "System(SystemKey(5v1))",
            "Set(SystemSetKey(8v1))",
            "Set(SystemSetKey(7v1))",
            "System(SystemKey(4v1))",
            "Set(SystemSetKey(6v1))",
            "Set(SystemSetKey(5v1))",
            "System(SystemKey(3v1))",
            "Set(SystemSetKey(4v1))",
            "Set(SystemSetKey(3v1))",
            "System(SystemKey(2v1))",
            "Set(SystemSetKey(2v1))",
            "Set(SystemSetKey(1v1))",
            "System(SystemKey(1v1))"
        ],
        "hierarchy_edges": [
            [
                "Set(SystemSetKey(1v1))",
                "System(SystemKey(1v1))"
            ],
            [
                "Set(SystemSetKey(3v1))",
                "System(SystemKey(2v1))"
            ],
            [
                "Set(SystemSetKey(8v1))",
                "System(SystemKey(4v1))"
            ],
            [
                "Set(SystemSetKey(2v1))",
                "System(SystemKey(1v1))"
            ],
            [
                "Set(SystemSetKey(7v1))",
                "System(SystemKey(4v1))"
            ],
            [
                "Set(SystemSetKey(4v1))",
                "System(SystemKey(2v1))"
            ],
            [
                "Set(SystemSetKey(9v1))",
                "System(SystemKey(5v1))"
            ],
            [
                "Set(SystemSetKey(10v1))",
                "System(SystemKey(6v1))"
            ],
            [
                "Set(SystemSetKey(5v1))",
                "System(SystemKey(3v1))"
            ],
            [
                "Set(SystemSetKey(10v1))",
                "System(SystemKey(5v1))"
            ],
            [
                "Set(SystemSetKey(11v1))",
                "System(SystemKey(6v1))"
            ]
        ],
        "dependency_nodes": [
            "System(SystemKey(1v1))",
            "Set(SystemSetKey(1v1))",
            "Set(SystemSetKey(2v1))",
            "System(SystemKey(2v1))",
            "Set(SystemSetKey(3v1))",
            "Set(SystemSetKey(4v1))",
            "System(SystemKey(3v1))",
            "Set(SystemSetKey(5v1))",
            "Set(SystemSetKey(6v1))",
            "System(SystemKey(4v1))",
            "Set(SystemSetKey(7v1))",
            "Set(SystemSetKey(8v1))",
            "System(SystemKey(5v1))",
            "Set(SystemSetKey(9v1))",
            "Set(SystemSetKey(10v1))",
            "System(SystemKey(6v1))",
            "Set(SystemSetKey(11v1))"
        ],
        "dependency_edges": [
            [
                "Set(SystemSetKey(2v1))",
                "Set(SystemSetKey(10v1))"
            ],
            [
                "Set(SystemSetKey(10v1))",
                "Set(SystemSetKey(8v1))"
            ],
            [
                "System(SystemKey(3v1))",
                "Set(SystemSetKey(6v1))"
            ],
            [
                "System(SystemKey(5v1))",
                "System(SystemKey(6v1))"
            ],
            [
                "Set(SystemSetKey(4v1))",
                "Set(SystemSetKey(8v1))"
            ],
            [
                "Set(SystemSetKey(4v1))",
                "Set(SystemSetKey(10v1))"
            ],
            [
                "Set(SystemSetKey(2v1))",
                "Set(SystemSetKey(8v1))"
            ],
            [
                "Set(SystemSetKey(1v1))",
                "System(SystemKey(3v1))"
            ]
        ]
    }
}
```

</p>
</details> 

From the above response, the below graph can be generated. Hierarchy
edges are blue, dependency edges are red. System nodes are implied by
hierarchy from Set to System.

<img width="1543" height="347" alt="first"
src="https://github.com/user-attachments/assets/80ac7e80-2a28-4246-80cc-29337bad4383"
/>

<details><summary>GraphViz Source</summary>
<p>

```
digraph {
    "Set(SystemSetKey(1v1))" [label="message_update_system"]
    "Set(SystemSetKey(2v1))" [label="MessageUpdateSystems"]
    "Set(SystemSetKey(3v1))" [label="time_system"]
    "Set(SystemSetKey(4v1))" [label="TimeSystems"]
    "Set(SystemSetKey(5v1))" [label="clear_screenshots"]
    "Set(SystemSetKey(6v1))" [label="ApplyDeferred"]
    "Set(SystemSetKey(7v1))" [label="viewport_picking"]
    "Set(SystemSetKey(8v1))" [label="PostInput"]
    "Set(SystemSetKey(9v1))" [label="mouse_pick_events"]
    "Set(SystemSetKey(10v1))" [label="Input"]
    "Set(SystemSetKey(11v1))" [label="touch_pick_events"]

    // implied nodes
    "System(SystemKey(1v1))" [label="implied message_update_system", shape=rectangle]
    "System(SystemKey(2v1))" [label="implied time_system", shape=rectangle]
    "System(SystemKey(3v1))" [label="implied clear_screenshots", shape=rectangle]
    "System(SystemKey(4v1))" [label="implied viewport_picking", shape=rectangle]
    "System(SystemKey(5v1))" [label="implied mouse_pick_events", shape=rectangle]
    "System(SystemKey(6v1))" [label="implied touch_pick_events", shape=rectangle]

    // hierarchy
    "Set(SystemSetKey(1v1))" -> "System(SystemKey(1v1))" [color=blue]
    "Set(SystemSetKey(3v1))" -> "System(SystemKey(2v1))" [color=blue]
    "Set(SystemSetKey(8v1))" -> "System(SystemKey(4v1))" [color=blue]
    "Set(SystemSetKey(2v1))" -> "System(SystemKey(1v1))" [color=blue]
    "Set(SystemSetKey(7v1))" -> "System(SystemKey(4v1))" [color=blue]
    "Set(SystemSetKey(4v1))" -> "System(SystemKey(2v1))" [color=blue]
    "Set(SystemSetKey(9v1))" -> "System(SystemKey(5v1))" [color=blue]
    "Set(SystemSetKey(10v1))" -> "System(SystemKey(6v1))" [color=blue]
    "Set(SystemSetKey(5v1))" -> "System(SystemKey(3v1))" [color=blue]
    "Set(SystemSetKey(10v1))" -> "System(SystemKey(5v1))" [color=blue]
    "Set(SystemSetKey(11v1))" -> "System(SystemKey(6v1))" [color=blue]

    // dependencies
    "Set(SystemSetKey(2v1))" -> "Set(SystemSetKey(10v1))" [color=red]
    "Set(SystemSetKey(10v1))" -> "Set(SystemSetKey(8v1))" [color=red]
    "System(SystemKey(3v1))" -> "Set(SystemSetKey(6v1))" [color=red]
    "System(SystemKey(5v1))" -> "System(SystemKey(6v1))" [color=red]
    "Set(SystemSetKey(4v1))" -> "Set(SystemSetKey(8v1))" [color=red]
    "Set(SystemSetKey(4v1))" -> "Set(SystemSetKey(10v1))" [color=red]
    "Set(SystemSetKey(2v1))" -> "Set(SystemSetKey(8v1))" [color=red]
    "Set(SystemSetKey(1v1))" -> "System(SystemKey(3v1))" [color=red]
}
```

</p>
</details>

---------

Co-authored-by: Kevin Chen <chen.kevin.f@gmail.com>
Co-authored-by: Alice Cecile <alice.i.cecile@gmail.com>
github-merge-queue bot pushed a commit that referenced this pull request Mar 28, 2026
…` changes (#23513)

# Objective

- Render schedules are static, compared to the main schedules in the
main world that can be dynamically added with the `MainScheduleOrder`
resource
- This is necessary to allow BRP introspection of schedules in the
Render world (see #23452 )

## Solution

- Add `RenderScheduleOrder` resource that allows for ordering of
`Render` schedules

## Testing

- CI
- #23446
@alice-i-cecile alice-i-cecile requested a review from atlv24 March 28, 2026 03:41
Copy link
Copy Markdown
Member

@alice-i-cecile alice-i-cecile left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think that this warrants release notes: it's not going to be meaningful to users who have never used Bevy (or most Bevy users).

@alice-i-cecile alice-i-cecile self-requested a review March 28, 2026 04:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-Dev-Tools Tools used to debug Bevy applications. C-Feature A new feature, making something new possible D-Modest A "normal" level of difficulty; suitable for simple features or challenging fixes S-Needs-Review Needs reviewer attention (from anyone!) to move forward

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants