bevyengine/bevy · error · RegisteredSystemError

System {0:?} was not registered

Error message

System {0:?} was not registered

What it means

RegisteredSystemError::SystemIdNotRegistered: a system was run (or otherwise operated on) by SystemId, but no system with that id exists in the world's system registry — usually because it was never registered or was removed.

Source

Thrown at crates/bevy_ecs/src/system/system_registry.rs:845

        input: I::Inner<'_>,
    ) -> Result<O, RegisteredSystemError<I, O>>
    where
        I: SystemInput + 'static,
        O: 'static,
        S: IntoSystem<I, O, M> + 'static,
    {
        let id = self.register_system_cached(system);
        self.run_system_with(id, input)
    }
}

/// An operation with stored systems failed.
#[derive(Error)]
pub enum RegisteredSystemError<I: SystemInput = (), O = ()> {
    /// A system was run by id, but no system with that id was found.
    ///
    /// Did you forget to register it?
    #[error("System {0:?} was not registered")]
    SystemIdNotRegistered(SystemId<I, O>),
    /// A cached system was removed by value, but no system with its type was found.
    ///
    /// Did you forget to register it?
    #[error("Cached system was not found")]
    SystemNotCached,
    /// The `RegisteredSystem` component is missing.
    #[error("System {0:?} does not have a RegisteredSystem component. This only happens if app code removed the component.")]
    MissingRegisteredSystemComponent(SystemId<I, O>),
    /// A system tried to remove itself.
    #[error("System {0:?} tried to remove itself")]
    SelfRemove(SystemId<I, O>),
    /// System could not be run due to parameters that failed validation.
    /// This is not considered an error.
    #[error("System did not run due to failed parameter validation: {0}")]
    Skipped(SystemParamValidationError),
    /// System returned an error or failed required parameter validation.
    #[error("System returned error: {0}")]

View on GitHub (pinned to 396ca72708)

Solutions

  1. Register the system first via world.register_system(...) or app.register_system(...) and store the returned SystemId
  2. If the system was removed with remove_system, do not reuse its old SystemId
  3. Use register_system_cached / run_system_cached to get automatic registration by type
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at crates/bevy_ecs/src/system/system_registry.rs:845 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/881c2b8f451f6d6b. Report an issue: GitHub.