Verse Wiki — the Verse handbook for Blueprint authors
Deep Dive · EXTRA

ErrRuntime_InfiniteLoop, Up Close: How the Runtime Calls an Infinite Loop

Lesson 15 warned you: a loop with no exit installed triggers ErrRuntime_InfiniteLoop. This page digs into three questions: how exactly the error is decided, why you can get hit without ever writing an infinite loop, and where to run the investigation after an incident.

1. The Official Definition: One Error, Whole Device Down

Epic's runtime-errors documentation defines ErrRuntime_InfiniteLoop as: the Verse code fell into an infinite loop, causing the runtime to terminate early. What really makes it expensive is the general rule that follows: once any runtime error occurs, all further Verse execution on that device stops.

Mind the causal chain here: it is not "that loop stopped" — it is "every bit of Verse logic on that device goes on strike from then on". If your level's entire core gameplay lives inside one manager device (and many projects are organized exactly that way), a single broken loop means every button, door, scoreboard, and UI in the level fails together — what players see is "the game is broken", not "some loop is broken". This is why Lesson 15 said this lesson's pitfalls cost more than any before: compile errors blow up on your machine; runtime errors blow up in front of your players.

An intuitive model of the detection: within each frame, the non-waiting part of your Verse must get out of the way before the frame ends — either the whole stretch finishes, or it goes to sleep at a breathing point (a Sleep-style Delay, or an Await on an event). A loop with no Break and no breathing point tries to spin infinitely inside one frame; the runtime's watchdog counts the laps, and the moment the count crosses the limit it cuts the loop off and books it as ErrRuntime_InfiniteLoop.

2. The Bizarre Case: I Swear I Never Wrote an Infinite Loop!

The forums have a famous genre of protest thread: "Verse infinite loop runtime error without infinite loop" — every lap clearly waits for a slow action to finish, yet the code still gets hit. One thoroughly dissected case goes like this: a developer wrote a loop that moved a prop slowly with MoveTo(), using "wait for the move to finish" as the loop's rhythm. Under normal conditions each lap takes several seconds — seamless.

The accident happened when another piece of code destroyed/hid that prop midway: with the prop invalid, MoveTo() was no longer "spend a few seconds ambling over" but completed instantly (nowhere to move, returns immediately). The loop's natural metronome vanished — per-lap time collapsed from seconds to nearly zero, the loop maxed out the watchdog's limit within a single frame, and ErrRuntime_InfiniteLoop answered the call. You never wrote an infinite loop; you wrote a loop whose rhythm depended on an external condition, and someone yanked that condition away.

The community's countermeasures come down to three, all variations on "never let your loop's rhythm live in someone else's hands":

(The MoveTo() in this case is the official node/function for moving props; its exact usage is out of scope here; verify against the Verse API Reference.)

A loop waits every lap for an action that takes several seconds to finish. Why can it still trigger ErrRuntime_InfiniteLoop?

3. After the Incident: Investigate in the Creator Portal

When a runtime error hits your live project, you don't have to reconstruct it from player hearsay. In the Creator Portal, your project has a dedicated Verse tab: it lists the runtime errors that occurred in the wild, grouped by category (ErrRuntime_InfiniteLoop is one of them), and each error comes with the Verse call stack from the moment things went wrong — that's a who-called-whom list, and following it down shows you exactly which device, which function, and which loop caused it.

A practical workflow: after publishing, glance at the Verse tab regularly → filter for the infinite-loop category → follow the call stack to the specific loop → check what its rhythm depends on, against Section 2 of this page. Compared to guessing blindly in the editor, this is the official, sanctioned detective channel.

4. Sources

This page is compiled from the official documentation and the Epic developer forums: