{"record":{"id":"da5c1d33c4f6bf8e","repo":"bevyengine/bevy","slug":"buildersystem-was-not-initialized-before-callin","errorCode":null,"errorMessage":"BuilderSystem {} was not initialized before calling run_unsafe.","messagePattern":"BuilderSystem (.+?) was not initialized before calling run_unsafe\\.","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"crates/bevy_ecs/src/system/builder.rs","lineNumber":390,"sourceCode":"        match &self.inner {\n            BuilderSystemInner::Initialized { system, .. } => system.flags(),\n            BuilderSystemInner::Uninitialized { meta, .. } => meta.flags(),\n            BuilderSystemInner::Invalid => unreachable!(),\n        }\n    }\n\n    #[inline]\n    unsafe fn run_unsafe(\n        &mut self,\n        input: super::SystemIn<'_, Self>,\n        world: UnsafeWorldCell,\n    ) -> Result<Self::Out, RunSystemError> {\n        match &mut self.inner {\n            // SAFETY: requirements upheld by the caller.\n            BuilderSystemInner::Initialized { system, .. } => unsafe {\n                system.run_unsafe(input, world)\n            },\n            BuilderSystemInner::Uninitialized { .. } => panic!(\n                \"BuilderSystem {} was not initialized before calling run_unsafe.\",\n                self.name()\n            ),\n            BuilderSystemInner::Invalid => unreachable!(),\n        }\n    }\n\n    #[cfg(feature = \"hotpatching\")]\n    #[inline]\n    fn refresh_hotpatch(&mut self) {\n        match &mut self.inner {\n            BuilderSystemInner::Initialized { system, .. } => system.refresh_hotpatch(),\n            BuilderSystemInner::Uninitialized { .. } => {}\n            BuilderSystemInner::Invalid => unreachable!(),\n        }\n    }\n\n    #[inline]","sourceCodeStart":372,"sourceCodeEnd":408,"githubUrl":"https://github.com/bevyengine/bevy/blob/396ca727080776bd313bb892423b7d94e03b81b4/crates/bevy_ecs/src/system/builder.rs#L372-L408","documentation":"Systems assembled with the SystemBuilder API transition from Uninitialized to Initialized when System::initialize runs (which schedules do on first execution). This panic fires when run_unsafe is called on a BuilderSystem that is still Uninitialized - its inner system, params, and pointers were never set up against a World.","triggerScenarios":"Manually invoking run_unsafe on a builder-built system without a prior initialize call: custom executors running BoxedSystems directly, test helpers executing systems outside a schedule, or middleware that wraps and runs systems while bypassing initialization.","commonSituations":"Custom executors that skip the initialize step; systems built with SystemBuilder cached in resources and run manually; porting code from function systems (which tolerate some misuse) to the builder API.","solutions":["Call system.initialize(&mut world) once before the first run_unsafe - the built-in schedules do this for you.","Prefer safe entry points (world.run_system_once, app.add_systems) over manual run_unsafe.","When writing an executor, mirror bevy's own executors: initialize all systems during schedule initialization, then run them."],"exampleFix":"// before\nlet mut system = SystemBuilder::<()>::new(&mut world).build(my_fn);\nunsafe { system.run_unsafe((), world.into()) }; // panic: Uninitialized\n\n// after\nlet mut system = SystemBuilder::<()>::new(&mut world).build(my_fn);\nsystem.initialize(&mut world);\nunsafe { system.run_unsafe((), world.into()) };","handlingStrategy":"validation","validationCode":"// WithInputFromWrapper exposes its state before running:\nif wrapper.value().is_none() {\n    wrapper.initialize(&mut world);\n}\n// generally: initialize every system once before any run_unsafe","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always call system.initialize(&mut world) once before run_unsafe, or rely on schedules.","Avoid manual run_unsafe; use world.run_system_once or add_systems.","Executor authors: copy bevy's built-in executors' initialize-then-run pattern."],"tags":["bevy","ecs","system","builder","initialization","panic"],"backgroundTag":"use-before-initialize","analyzedSha":"396ca727080776bd313bb892423b7d94e03b81b4","analyzedAt":"2026-08-20T16:12:39.808Z","schemaVersion":2},"datasetVersion":"2026-08-22T09:17:25.309Z"}