{"record":{"id":"f23753189ed4bc14","repo":"pixijs/pixijs","slug":"renderlayer-removechild-is-not-available-please","errorCode":null,"errorMessage":"RenderLayer.removeChild() is not available. Please use RenderLayer.detach()","messagePattern":"RenderLayer\\.removeChild\\(\\) is not available\\. Please use RenderLayer\\.detach\\(\\)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"src/scene/layers/RenderLayer.ts","lineNumber":567,"sourceCode":"     * @throws {Error} Always throws an error as this method is not available.\n     * @ignore\n     */\n    public override addChild<U extends Container[]>(..._children: U): never\n    {\n        throw new Error(\n            'RenderLayer.addChild() is not available. Please use RenderLayer.attach()',\n        );\n    }\n    /**\n     * This method is not available in RenderLayer.\n     * Calling this method will throw an error. Please use `RenderLayer.detach()` instead.\n     * @param {...any} _children\n     * @throws {Error} Always throws an error as this method is not available.\n     * @ignore\n     */\n    public override removeChild<U extends Container[]>(..._children: U): never\n    {\n        throw new Error(\n            'RenderLayer.removeChild() is not available. Please use RenderLayer.detach()',\n        );\n    }\n    /**\n     * This method is not available in RenderLayer.\n     *\n     * Calling this method will throw an error. Please use `RenderLayer.detach()` instead.\n     * @param {number} [_beginIndex]\n     * @param {number} [_endIndex]\n     * @throws {Error} Always throws an error as this method is not available.\n     * @ignore\n     */\n    public override removeChildren(_beginIndex?: number, _endIndex?: number): never\n    {\n        throw new Error(\n            'RenderLayer.removeChildren() is not available. Please use RenderLayer.detach()',\n        );\n    }","sourceCodeStart":549,"sourceCodeEnd":585,"githubUrl":"https://github.com/pixijs/pixijs/blob/4b141e3ced7255b39c2114b6bca03421a37b2363/src/scene/layers/RenderLayer.ts#L549-L585","documentation":"RenderLayer overrides `removeChild` to always throw. Because children are attached rather than owned via addChild, the symmetric removal is `detach()`. The override prevents the normal Container removal path from corrupting the layer's attachment state.","triggerScenarios":"Calling `renderLayer.removeChild(child)` on a RenderLayer; common when generic cleanup/teardown code walks a scene graph and calls removeChild on every node, or when porting Container cleanup code unchanged.","commonSituations":"Tear-down helpers, scene-disposal routines, drag-end handlers that call removeChild polymorphically; refactoring from Container to RenderLayer without revisiting removal calls.","solutions":["Use `renderLayer.detach(child)` to detach a child from the layer.","Branch generic helpers on `instanceof RenderLayer` to call detach for layers.","If you need standard removal semantics, use a plain Container."],"exampleFix":"// before\nlayer.removeChild(sprite); // throws\n\n// after\nlayer.detach(sprite);","handlingStrategy":"type-guard","validationCode":"function removeFromNode(node: RenderLayer | Container, child: Container) {\n  if (node instanceof RenderLayer) (node as RenderLayer).detach(child as any);\n  else (node as Container).removeChild(child);\n}","typeGuard":"function isRenderLayer(node: unknown): node is RenderLayer {\n  return !!node && node instanceof RenderLayer;\n}","tryCatchPattern":"try {\n  layer.removeChild(child);\n} catch (err) {\n  if (err.message.includes('RenderLayer.removeChild()')) {\n    layer.detach(child);\n  } else throw err;\n}","preventionTips":["Branch cleanup helpers on RenderLayer.","Prefer `child.removeFromParent()` where available to avoid the Container/RenderLayer API split.","Wrap RenderLayer in a typed facade that exposes only detach."],"tags":["renderlayer","scene-graph","container","api-misuse"],"backgroundTag":null,"analyzedSha":"4b141e3ced7255b39c2114b6bca03421a37b2363","analyzedAt":"2026-08-12T17:27:29.507Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}