error handling Failures go where you wired them.
A backend is mostly what happens when things go wrong. In Fluxify every failure has a visible destination on the canvas — and a broken save never reaches your users.
Read the docstwo kinds of no
An expected “no” is a branch. A failure is a jump.
“User not found” isn't an error — it's a path. Use a failure socket for it, and keep the Error Handler for things that genuinely broke.
failure socket
Expected outcomes
If Condition, DB Row Exists and Send Message have a failure socket. Wire it to a 404, a 401, a fallback — it's ordinary control flow.
error handler
Real failures
A refused connection, a bad query, a thrown JS error. The run jumps to the Error Handler with the message. Without one, the route answers 500 with the error.
transactions
All of it, or none of it.
Put several database writes on a DB Transaction's executor socket. They commit together — or a Rollback block, an error or the timeout undoes every one and the failure path runs with the reason.
retries
Try again, then give up cleanly.
Wrap a flaky call in a Retry block. It re-runs its executor chain when it throws, waiting longer each time, and hands either the result or the attempt count to the next block.
deploys fail closed
A broken save never ships.
If a flow can't compile — a missing setting, a cycle — the version that's already serving keeps serving, and the error is shown in the editor. Workflows that fail are retried; queue triggers can dead-letter messages that keep failing.