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

A Panorama of the Verse Effect System: The Coordinates of suspends

In Blueprints, whether a node is latent or pure is something you read off its appearance; Verse turns those behavioral guarantees into effect specifiers. suspends is not a lone keyword — it's one cell in that matrix. See the matrix clearly and you can derive a whole string of "why"s on your own: why async functions can't enter failure contexts, why suspends and decides are sworn enemies — no rote memorization required.

1. Effects: A Function's Written Guarantee of Behavior

Lesson 22 introduced specifiers; Lesson 23 put <suspends> to work. Now pull the camera back: Verse writes "what this function will do to the world" straight into its type information, and the specifiers doing that job are called function effects. Compile (that compile button at the top left of a Blueprint) verifies every guarantee like a notary office — a function may only do what its declared effects permit, and if the place calling it doesn't accept some effect, one press of Compile turns red and it won't pass. Lesson 23's classic error line, "has the 'suspends' effect, which is not allowed by its context," is the notary stamping REJECTED.

The official doc “Specifiers and Attributes in Verse” sorts effects into two families:

Family Members Rule
Exclusive effects (exclusive) transacts, varies, computes, converges Pick at most one; writing none defaults to no_rollback
Additive effects (additive) suspends, decides May be combined with the exclusive effects

Quick member introductions: transacts means the changes this function makes can be undone as one whole — the cornerstone of Verse's failure semantics; varies, computes, and converges are increasingly strict promises along the lines of "won't mess with the outside world, and is guaranteed to finish computing," rarely written explicitly in day-to-day UEFN — defer to the official docs for the details. The most interesting one is the invisible fifth member: when you write no exclusive effect at all, the function defaults to the no_rollback effect — but that default cannot be spelled out; no legal spelling lets you type it. suspends means the function may suspend across simulation frames (little clock included); decides means the function may fail — it turns the function into a check that can "fail its dice roll" (if the path doesn't go through, it's as if nothing happened).

2. Deriving Three "Why"s from the Matrix

Why must decides currently pair with transacts? Verse's promise about failure is "failure means it's as if nothing ever happened": when a decides function fails partway, every modification it has already made must be undone. Who supplies the undo? The rollback machinery of transacts. So "may fail" has to stand on "can roll back" — the two are sold as a bundle.

Why can't a "can this path go through" check contain nodes that wait? Everything inside that kind of check (a Branch condition, or the body of one of those dice-roll functions) must be undoable. But suspending means crossing simulation frames: real time passed, other lines ran, players fired shots — none of that can be taken back. Stuffing a Sleep (Delay) into a Branch condition amounts to promising "I'll refund the last three seconds if needed," and Compile can only refuse.

Why can't suspends and decides be stamped on the same function? Same root as the previous one: decides says "I may fail, and failure must roll back"; suspends says "I cross time, and crossed time can't be rolled back" — two written guarantees in direct contradiction, and no notary will stamp both. You can hang the pair of labels <transacts><decides> on a function, or hang just <suspends>, but hang <suspends><decides> together and one press of Compile errors out on the spot.

See? Not one of the three rules needed memorizing — every one falls out of a single sentence: "failure must roll back, and time cannot flow backward." That is the value of an effect system: the instant you press Compile, it blocks an entire class of "a waiting node wrecks the failure logic" bugs for you.

3. Planting a Seed for the Chapters Ahead

When this course reaches failure and rollback, transacts and decides take center stage: you'll see how a "path that didn't go through" undoes the Sets that already ran, and why some API names carry square brackets (e.g. Items[0], fetching an array element, is actually an operation that may fail — may not go through). For now, take just one map with you: suspends governs time, decides governs failure, transacts governs rollback; time and failure are sworn enemies, failure and rollback are inseparable. Carry it along, and the angle brackets on official API pages stop reading like incantations — they become plain, legible written guarantees of behavior.

Which effect below is a function's default exclusive effect, yet cannot be spelled out by you explicitly?

Why can't <suspends> and <decides> both be stamped on one function?

Sources

This page draws on Epic's official documentation: