Blog

Descending Mount Effect

Phase One 29 May 2026

"Effect" is one of those words that means something different in every language, so let me be precise about what it means here. Look at a single cycle of a Program running:

inputs, state  →  program  →  outputs, state

The outputs are the effects. They are everything the program wants the outside world to do that is not pure calculation: the list of interface components to show, the web requests to make, the animations to run, a line to print. The program does not do any of these itself; it just describes them.

The important thing about those outputs is that they are all interactive. Each of them can, at any moment, hand fresh input back: a user clicks a button, a request completes, a timer fires. When that happens, we simply run the program again with the new input and the previous state, and out comes a new state and a fresh set of outputs.

inputs + state program outputs effects + state a change feeds the next cycle
One cycle: inputs and state in, outputs and a new state out. Any output can feed the next turn.

That is the whole engine. There is no separate event loop for you to write, no update method to remember to call: a change arrives, the cycle turns, and the effects describe themselves anew. Mount, update, unmount - the lifecycle ceremony other systems make you perform - is just the difference between one turn of the cycle and the next. The drivers at the edge are what actually carry the effects out and feed the inputs back in.

← Back to the blog