bevyengine/bevy · error
Requires FrameTimeDiagnosticsPlugin
Error message
Requires FrameTimeDiagnosticsPlugin
What it means
Panic in FrameTimeGraphPlugin::build: the FrameTimeDiagnosticsPlugin is not present in the app. The frame time graph reads diagnostics produced by that plugin (frame time, fps), so without it the graph has no data source and the build aborts.
Source
Thrown at crates/bevy_dev_tools/src/frame_time_graph/mod.rs:38
const FRAME_TIME_GRAPH_SHADER_HANDLE: Handle<Shader> =
uuid_handle!("4e38163a-5782-47a5-af52-d9161472ab59");
/// Plugin that sets up everything to render the frame time graph material
pub struct FrameTimeGraphPlugin;
impl Plugin for FrameTimeGraphPlugin {
fn build(&self, app: &mut bevy_app::App) {
load_internal_asset!(
app,
FRAME_TIME_GRAPH_SHADER_HANDLE,
"frame_time_graph.wesl",
Shader::from_wesl
);
// TODO: Use plugin dependencies, see https://github.com/bevyengine/bevy/issues/69
if !app.is_plugin_added::<FrameTimeDiagnosticsPlugin>() {
panic!("Requires FrameTimeDiagnosticsPlugin");
// app.add_plugins(FrameTimeDiagnosticsPlugin);
}
app.add_plugins(UiMaterialPlugin::<FrametimeGraphMaterial>::default())
.add_systems(
Update,
update_frame_time_values.in_set(FpsOverlaySystems::UpdateText),
);
}
}
/// The config values sent to the frame time graph shader
#[derive(Debug, Clone, Copy, ShaderType)]
pub struct FrameTimeGraphConfigUniform {
// minimum expected delta time
dt_min: f32,
// maximum expected delta time
dt_max: f32,View on GitHub (pinned to 396ca72708)
Solutions
- Add FrameTimeDiagnosticsPlugin to the app before FrameTimeGraphPlugin
- Or rely on DefaultPlugins which includes it
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at crates/bevy_dev_tools/src/frame_time_graph/mod.rs:38 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of bevyengine/bevy@396ca72708 (2026-08-20).
Data as JSON: /api/errors/eda1c50609c64dcb.
Report an issue: GitHub.