BabylonJS/Babylon.js · error · Error
Could not find signal output with name ${name} in block ${cl
Error message
Could not find signal output with name ${name} in block ${className} What it means
Thrown during FlowGraphExecutionBlock.deserialize when the serialization object lists a signal output whose name does not match any signal output currently registered on the block. The block refuses partial deserialization to keep the graph consistent.
Source
Thrown at packages/dev/core/src/FlowGraph/flowGraphExecutionBlock.ts:146
/**
* Deserializes from an object
* @param serializationObject the object to deserialize from
*/
public override deserialize(serializationObject: any) {
for (let i = 0; i < serializationObject.signalInputs.length; i++) {
const signalInput = this.getSignalInput(serializationObject.signalInputs[i].name);
if (signalInput) {
signalInput.deserialize(serializationObject.signalInputs[i]);
} else {
throw new Error("Could not find signal input with name " + serializationObject.signalInputs[i].name + " in block " + serializationObject.className);
}
}
for (let i = 0; i < serializationObject.signalOutputs.length; i++) {
const signalOutput = this.getSignalOutput(serializationObject.signalOutputs[i].name);
if (signalOutput) {
signalOutput.deserialize(serializationObject.signalOutputs[i]);
} else {
throw new Error("Could not find signal output with name " + serializationObject.signalOutputs[i].name + " in block " + serializationObject.className);
}
}
}
/**
* @returns the class name
*/
public override getClassName(): string {
return "FlowGraphExecutionBlock";
}
}
View on GitHub (pinned to 0592b347b8)
Solutions
- Re-serialize the flow graph with the current library version
- Verify the payload belongs to the same block class being deserialized
- Migrate renamed signal outputs in stored serialization JSON
- Strip obsolete signal output entries from the payload
Example fix
// before
serializationObject.signalOutputs = [{ name: 'clicked_old' }];
// after
serializationObject.signalOutputs = [{ name: 'onClick' }]; Defensive patterns
Strategy: try-catch
Validate before calling
const missing = serializationObject.signalOutputs?.filter(
(so: any) => !block.getSignalOutput(so.name)
) ?? [];
if (missing.length) throw new Error('Unknown signal outputs: ' + missing.map((m: any) => m.name).join(','));
block.deserialize(serializationObject); Type guard
function hasAllSignalOutputs(block: FlowGraphExecutionBlock, ser: any): boolean {
return (ser?.signalOutputs ?? []).every((so: any) => !!block.getSignalOutput(so.name));
} Try / catch
try {
block.deserialize(serializationObject);
} catch (e) {
if (String(e.message).startsWith('Could not find signal output')) {
// regenerate serialization or migrate renamed outputs
}
} Prevention
- Keep serialized payloads in sync with the block library version
- Validate signal output names before deserializing
- Avoid copying signal outputs between different block classes
When it happens
Trigger: Calling block.deserialize(serializationObject) where serializationObject.signalOutputs[i].name has no match via getSignalOutput on the block.
Common situations: Serialized graph produced by a different library version where a signal output was renamed/deleted; mixing serialized payloads across block implementations; corrupted or hand-edited JSON.
Related errors
- Could not find signal input with name ${name} in block ${cla
- Could not find data out connection with unique id ${serializ
- Could not find data in connection with unique id ${serialize
- Cannot compare ${a} and ${b}
- Cannot get NaN of ${a}
AI-assisted analysis of BabylonJS/Babylon.js@0592b347b8 (2026-08-30).
Data as JSON: /api/errors/46ad8299e110f88e.
Report an issue: GitHub.