bevyengine/bevy · warning · NotReady

not available until all configured schedules have been run;

Error message

not available until all configured schedules have been run; try again next frame

What it means

Stepping derives the schedule execution order by observing schedules as they run; Stepping::schedules() returns NotReady until every schedule registered for stepping has executed at least once (schedule_order is only complete when it matches schedule_states). It is a transient, recoverable error: retry on a later frame.

Source

Thrown at crates/bevy_ecs/src/schedule/stepping.rs:91

/// Updates to [`Stepping::schedule_states`] that will be applied at the start
/// of the next render frame
enum Update {
    /// Set the action stepping will perform for this render frame
    SetAction(Action),
    /// Enable stepping for this schedule
    AddSchedule(InternedScheduleLabel),
    /// Disable stepping for this schedule
    RemoveSchedule(InternedScheduleLabel),
    /// Clear any system-specific behaviors for this schedule
    ClearSchedule(InternedScheduleLabel),
    /// Set a system-specific behavior for this schedule & system
    SetBehavior(InternedScheduleLabel, SystemIdentifier, SystemBehavior),
    /// Clear any system-specific behavior for this schedule & system
    ClearBehavior(InternedScheduleLabel, SystemIdentifier),
}

#[derive(Error, Debug)]
#[error("not available until all configured schedules have been run; try again next frame")]
pub struct NotReady;

#[derive(Resource, Default)]
/// Resource for controlling system stepping behavior
pub struct Stepping {
    // [`ScheduleState`] for each [`Schedule`] with stepping enabled
    schedule_states: HashMap<InternedScheduleLabel, ScheduleState>,

    // dynamically generated [`Schedule`] order
    schedule_order: Vec<InternedScheduleLabel>,

    // current position in the stepping frame
    cursor: Cursor,

    // index in [`schedule_order`] of the last schedule to call `skipped_systems()`
    previous_schedule: Option<usize>,

    // Action to perform during this render frame

View on GitHub (pinned to 396ca72708)

Solutions

  1. Treat the error as 'skip this frame': return early and retry after the frame completes.
  2. Ensure the app actually runs every stepping-enabled schedule so the order can be discovered.
  3. If a schedule was added to stepping mid-session, wait until it has run once before querying again.

Example fix

// before
let schedules = stepping.schedules().unwrap(); // panics on frame 0

// after
let Some(schedules) = stepping.schedules().ok() else {
    return; // not all schedules have run yet; try again next frame
};
Defensive patterns

Strategy: retry

Validate before calling

if stepping.schedules().is_err() {
    return; // schedules not all observed yet; try again next frame
}

Try / catch

match stepping.schedules() {
    Ok(order) => draw_stepping_ui(order),
    Err(NotReady) => {} // render nothing this frame; retry next frame
}

Prevention

When it happens

Trigger: Calling stepping.schedules() in the same frame the Stepping resource was created/populated, before all stepping-enabled schedules have run once; adding a schedule to stepping mid-frame and querying immediately; debug UI reading the list on frame 0.

Common situations: Custom debug front-ends or inspector UIs integrating with bevy's Stepping resource; headless tests that create Stepping but never actually run the app loop.

Related errors


AI-assisted analysis of bevyengine/bevy@396ca72708 (2026-08-20). Data as JSON: /api/errors/6eb71521d4f74576. Report an issue: GitHub.