Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
232094c
Add BRP to render app
Zeophlite Mar 21, 2026
2c6903f
Cleanup
Zeophlite Mar 21, 2026
28efb21
Apply suggestions from code review
Zeophlite Mar 22, 2026
346add3
Review
Zeophlite Mar 22, 2026
5fc8e0b
Merge render_client example back into client example
Zeophlite Mar 24, 2026
837f401
Merge remote-tracking branch 'origin/main' into brp-render
Zeophlite Mar 24, 2026
5caf2f0
Fix url
Zeophlite Mar 24, 2026
63725b1
Add PreRenderStartup, PreRender and PostRender schedules
Zeophlite Mar 25, 2026
30c06b1
Merge remote-tracking branch 'origin/main' into brp-render
Zeophlite Mar 25, 2026
25f8dd1
Use PreRenderStartup and PostRender schedules
Zeophlite Mar 25, 2026
2733bf2
fmt
Zeophlite Mar 25, 2026
6c62e42
with_method_main/with_method_render
Zeophlite Mar 25, 2026
508bd1a
Add RenderMainScheduleOrder resource to manage render schedules
Zeophlite Mar 25, 2026
9e6fbf9
Use RenderMainScheduleOrder
Zeophlite Mar 25, 2026
1c4b552
Rm PreRenderStartup
Zeophlite Mar 25, 2026
2205cb8
run_if run_once on RenderStartup
Zeophlite Mar 25, 2026
5207d05
Merge remote-tracking branch 'origin/main' into brp-render
Zeophlite Mar 26, 2026
1aac36d
Rever example to main
Zeophlite Mar 26, 2026
6def24d
Re-add example changes
Zeophlite Mar 26, 2026
e2d79f1
Merge remote-tracking branch 'origin/main' into brp-render
Zeophlite Mar 28, 2026
aea68db
Fix
Zeophlite Mar 28, 2026
50d83f7
Add release notes for brp
Zeophlite Mar 28, 2026
9ada7e3
Docs
Zeophlite Mar 28, 2026
af92b1d
rm release notes
Zeophlite Mar 28, 2026
6e021ac
fmt
Zeophlite Mar 28, 2026
9420da4
Doc
Zeophlite Mar 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions crates/bevy_ecs/src/schedule/schedule.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,9 @@ pub struct Schedules {
inner: HashMap<InternedScheduleLabel, Schedule>,
/// List of [`ComponentId`]s to ignore when reporting system order ambiguity conflicts
pub ignored_scheduling_ambiguities: BTreeSet<ComponentId>,
/// Set of schedule labels that have been removed to execute in [`World::try_schedule_scope`].
temporarily_removed: HashSet<InternedScheduleLabel>,
/// Set of schedule labels that have attempted to be read in [`World::try_schedule_scope`].
Copy link
Copy Markdown
Contributor

@kfc35 kfc35 Mar 28, 2026

Choose a reason for hiding this comment

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

having looked at try_schedule_scope and Schedules just now, I think it might be clearer to say:

Suggested change
/// Set of schedule labels that have attempted to be read in [`World::try_schedule_scope`].
/// Set of schedule labels that have attempted to be read in [`World::try_schedule_scope`],
/// but have no associated [`Schedule`] in `inner`

empty_labels: HashSet<InternedScheduleLabel>,
}

Expand Down
3 changes: 3 additions & 0 deletions crates/bevy_internal/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -358,20 +358,23 @@ reflect_functions = [
"bevy_reflect/functions",
"bevy_app/reflect_functions",
"bevy_ecs/reflect_functions",
"bevy_render?/reflect_functions",
]

# Enable automatic reflect registration using inventory.
reflect_auto_register = [
"bevy_reflect/auto_register_inventory",
"bevy_app/reflect_auto_register",
"bevy_ecs/reflect_auto_register",
"bevy_render?/reflect_auto_register",
]

# Enable automatic reflect registration without inventory. See `reflect::load_type_registrations` for more info.
reflect_auto_register_static = [
"bevy_reflect/auto_register_static",
"bevy_app/reflect_auto_register",
"bevy_ecs/reflect_auto_register",
"bevy_render?/reflect_auto_register",
]

# Enables bevy_reflect to access documentation comments of rust code at runtime
Expand Down
5 changes: 4 additions & 1 deletion crates/bevy_remote/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,21 @@ license = "MIT OR Apache-2.0"
keywords = ["bevy"]

[features]
default = ["http", "bevy_asset"]
default = ["http", "bevy_asset", "bevy_render"]
http = ["dep:async-io", "dep:smol-hyper", "bevy_tasks/async-io"]
bevy_asset = ["dep:bevy_asset"]
bevy_render = ["dep:bevy_render"]

[dependencies]
# bevy
bevy_app = { path = "../bevy_app", version = "0.19.0-dev" }
bevy_color = { path = "../bevy_color", version = "0.19.0-dev" }
bevy_derive = { path = "../bevy_derive", version = "0.19.0-dev" }
bevy_ecs = { path = "../bevy_ecs", version = "0.19.0-dev", features = [
"serialize",
] }
bevy_reflect = { path = "../bevy_reflect", version = "0.19.0-dev" }
bevy_render = { path = "../bevy_render", version = "0.19.0-dev", optional = true }
bevy_tasks = { path = "../bevy_tasks", version = "0.19.0-dev" }
bevy_utils = { path = "../bevy_utils", version = "0.19.0-dev", features = [
"debug",
Expand Down
37 changes: 37 additions & 0 deletions crates/bevy_remote/src/http.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,15 @@
//! Adding the [`RemoteHttpPlugin`] to your [`App`] causes Bevy to accept
//! connections over HTTP (by default, on port 15702) while your app is running.
//!
//! When `bevy_render` is enabled, a second port is available to query the render subapp.
//!
//! Clients are expected to `POST` JSON requests to the root URL; see the `client`
//! example for a trivial example of use.

#![cfg(not(target_family = "wasm"))]

#[cfg(feature = "bevy_render")]
use crate::setup_mailbox_channel;
use crate::{
error_codes, BrpBatch, BrpError, BrpMessage, BrpRequest, BrpResponse, BrpResult, BrpSender,
};
Expand All @@ -16,7 +20,11 @@ use async_channel::{Receiver, Sender};
use async_io::Async;
use bevy_app::{App, Plugin, Startup};
use bevy_ecs::resource::Resource;
#[cfg(feature = "bevy_render")]
use bevy_ecs::schedule::IntoScheduleConfigs as _;
use bevy_ecs::system::Res;
#[cfg(feature = "bevy_render")]
use bevy_render::{RenderApp, RenderStartup};
use bevy_tasks::{futures_lite::StreamExt, IoTaskPool};
use core::{
convert::Infallible,
Expand All @@ -43,6 +51,11 @@ use std::{
/// This value was chosen randomly.
pub const DEFAULT_PORT: u16 = 15702;

/// The default port that Bevy will listen on for the render subapp.
///
/// The render subapp is available for requests if the `bevy_render` feature is enabled.
pub const DEFAULT_RENDER_PORT: u16 = 15703;

/// The default host address that Bevy will use for its server.
pub const DEFAULT_ADDR: IpAddr = IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1));

Expand Down Expand Up @@ -95,12 +108,15 @@ impl Default for Headers {
/// The defaults are:
/// - [`DEFAULT_ADDR`] : 127.0.0.1.
/// - [`DEFAULT_PORT`] : 15702.
/// - [`DEFAULT_RENDER_PORT`] : 15703. (when `bevy_render` is enabled)
///
pub struct RemoteHttpPlugin {
/// The address that Bevy will bind to.
address: IpAddr,
/// The port that Bevy will listen on.
port: u16,
/// The port that Bevy will listen on for render subapp.
render_port: u16,
/// The headers that Bevy will include in its HTTP responses
headers: Headers,
}
Expand All @@ -110,6 +126,7 @@ impl Default for RemoteHttpPlugin {
Self {
address: DEFAULT_ADDR,
port: DEFAULT_PORT,
render_port: DEFAULT_RENDER_PORT,
headers: Headers::new(),
}
}
Expand All @@ -121,6 +138,26 @@ impl Plugin for RemoteHttpPlugin {
.insert_resource(HostPort(self.port))
.insert_resource(HostHeaders(self.headers.clone()))
.add_systems(Startup, start_http_server);

#[cfg(feature = "bevy_render")]
{
use bevy_ecs::schedule::common_conditions::run_once;

let Some(render_app) = app.get_sub_app_mut(RenderApp) else {
return;
};

render_app
.insert_resource(HostAddress(self.address))
.insert_resource(HostPort(self.render_port))
.insert_resource(HostHeaders(self.headers.clone()))
.add_systems(
RenderStartup,
start_http_server
.run_if(run_once)
.after(setup_mailbox_channel),
);
}
}
}

Expand Down
Loading