{"record":{"id":"505b4f075d3df1fe","repo":"bevyengine/bevy","slug":"unable-to-get-renderapp-another-plugin-may-have-r","errorCode":null,"errorMessage":"Unable to get RenderApp. Another plugin may have removed the RenderApp before PipelinedRenderingPlugin","messagePattern":"Unable to get RenderApp\\. Another plugin may have removed the RenderApp before PipelinedRenderingPlugin","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/bevy_render/src/pipelined_rendering.rs","lineNumber":137,"sourceCode":"\n        let mut sub_app = SubApp::new();\n        sub_app.set_extract(renderer_extract);\n        app.insert_sub_app(RenderExtractApp, sub_app);\n    }\n\n    // Sets up the render thread and inserts resources into the main app used for controlling the render thread.\n    fn cleanup(&self, app: &mut App) {\n        // skip setting up when headless\n        if app.get_sub_app(RenderExtractApp).is_none() {\n            return;\n        }\n\n        let (app_to_render_sender, app_to_render_receiver) = async_channel::bounded::<SubApp>(1);\n        let (render_to_app_sender, render_to_app_receiver) = async_channel::bounded::<SubApp>(1);\n\n        let mut render_app = app\n            .remove_sub_app(RenderApp)\n            .expect(\"Unable to get RenderApp. Another plugin may have removed the RenderApp before PipelinedRenderingPlugin\");\n\n        // clone main thread executor to render world\n        let executor = app.world().get_resource::<MainThreadExecutor>().unwrap();\n        render_app.world_mut().insert_resource(executor.clone());\n\n        render_to_app_sender.send_blocking(render_app).unwrap();\n\n        app.insert_resource(RenderAppChannels::new(\n            app_to_render_sender,\n            render_to_app_receiver,\n        ));\n\n        std::thread::Builder::new()\n            .name(\"Render thread\".into())\n            .spawn(move || {\n                #[cfg(feature = \"trace\")]\n                let _span = bevy_log::info_span!(\"render thread\").entered();\n","sourceCodeStart":119,"sourceCodeEnd":155,"githubUrl":"https://github.com/bevyengine/bevy/blob/396ca727080776bd313bb892423b7d94e03b81b4/crates/bevy_render/src/pipelined_rendering.rs#L119-L155","documentation":"Panic in PipelinedRenderingPlugin::cleanup: the RenderApp sub-app is missing when setting up the render thread, meaning another plugin removed RenderApp before this plugin ran. Enable PipelinedRenderingPlugin after RenderPlugin and do not remove the RenderApp.","triggerScenarios":"Thrown at crates/bevy_render/src/pipelined_rendering.rs:137 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Remove or reorder the plugin that deletes the RenderApp","Ensure render-specific plugins are added to the RenderApp, not the main app"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"396ca727080776bd313bb892423b7d94e03b81b4","analyzedAt":"2026-08-20T16:12:39.808Z","contentChangedAt":"2026-08-20T16:12:39.808Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}