n8n-io/n8n · error · RuntimeError
TIMEOUT
TIMEOUT
Error message
TIMEOUT
What it means
Sentinel error code carried by RuntimeError when expression evaluation exceeded its time budget inside the isolate. The bridge translates it to TimeoutError on the host. Cause is compute-heavy expressions (nested loops in jmespath, very long chains) or an isolate stalled behind many synchronous host roundtrips on lazy proxies.
Solutions
- Break the expression into simpler steps across nodes
- Avoid deep jmespath traversal over lazy proxies like $json — materialize data first
- Move loops and heavy computation to a Code node
- Check for accidental O(n²) patterns such as contains() over large arrays inside a map
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at packages/@n8n/expression-runtime/src/types/runtime.ts:10 when the library encounters an invalid state.
Common situations: See trigger scenarios.
Understand the failure class
- Timeouts: ETIMEDOUT, deadlines, and hung requests — what actually expires when a request times out.
AI-assisted analysis of n8n-io/n8n@5ac6606e81 (2026-08-12).
Data as JSON: /api/errors/7d1d1ca15cfef08c.
Report an issue: GitHub.
Appendix: source
Thrown at packages/@n8n/expression-runtime/src/types/runtime.ts:10
/**
* Runtime error thrown inside isolated context.
*
* These errors are thrown by the runtime code when something goes wrong during
* expression evaluation. The bridge must catch these and translate them to the
* appropriate ExpressionError subclass (see evaluator.ts).
*
* Translation mapping:
* - code: 'MEMORY_LIMIT' → MemoryLimitError
* - code: 'TIMEOUT' → TimeoutError
* - code: 'SECURITY_VIOLATION' → SecurityViolationError
* - code: 'SYNTAX_ERROR' → SyntaxError
* - other → ExpressionError
*/
export class RuntimeError extends Error {
constructor(
message: string,
public code: string,
public details?: Record<string, unknown>,
) {
super(message);
this.name = 'RuntimeError';
}
}
View on GitHub (pinned to 5ac6606e81)