I’ve inherited a workflow that uses the codemode in loops (maybe last seen in 2024)
Has this been completely deprecated this week? (not expecting it to still work of course)
Just trying to determine if the loop is returning empty arrays/null because it was finally killed or something else.
1 Like
Summary
An inherited workflow uses the legacy 'code mode' JavaScript loop (last seen ~2024), and its loop is now returning empty arrays/null — the question is whether code mode in loops was fully deprecated 'this week'.
AI Response
The legacy 'code mode' loop has not been deprecated. Retool staff have confirmed that legacy loops remain supported until the new Loop block reaches feature parity, and that existing legacy loops should continue to run — with no near-term deprecation on the workflows roadmap as of early 2026. The current Loop block documentation likewise still supports iterating over an array using value and index. Empty/null output is therefore far more likely a data issue — the loop input evaluating to an empty array or a non-iterable value — than a removal of the feature, so it's worth inspecting the exact input the loop receives at runtime and confirming it resolves to a populated array.
Sources
Loop script in workflow has disappeared
Retool staff confirm legacy code-mode loops are not being deprecated until feature parity with the new loop and that existing legacy loops should keep working, with no near-term deprecation planned.
Loop block | Retool Docs
The current Loop block guide documents iterating over an array with value/index, confirming loops remain a supported, functioning workflow feature.
The Community Team is testing out a new automation. Let us know if it's helpful (or not) by leaving a
,
, or
. Or by marking this post as the "Solution"! Let us know if you have any feedback here. 
Check the loop input at runtime before assuming the old code mode was removed. Since this workflow was inherited, a change upstream could easily turn the input into null or an empty array while the loop itself still works. Logging the value immediately before the loop should narrow that down quickly. If the input is populated there, then comparing the old loop’s behavior with the current Loop block would be the next useful test.