> For the complete documentation index, see [llms.txt](https://docs.midio.com/midio-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.midio.com/midio-docs/reference/the-midio-language/nodes-and-execution.md).

# Nodes and execution

### The anatomy of a node

![anatomy](/files/7Gs04J3Cobdw7TNnnaS5)

A node represents an **instance** of a function or event, with the original function or event being its **declaration**. Each node has input and output properties, as well as input and output triggers. Properties handle data acceptance and production, while triggers determine when a node is called.

Nodes without triggers are called on demand.

### Execution order

Understanding the difference between triggers and properties is crucial. Properties pull data from their connected sources, while triggers pushes the flow of execution to the next trigger.

#### Example of execution order

![execution\_order](/files/8exazzzpMDlzO7Q0SwgH)

1. When a request is received matching the `/hello` endpoint with method `GET` and a query parameter `name`, the `HttpEndpoint` event is triggered.
2. The `Template` node is then called, because the `Log` node depends on its result, and it doesn't have any triggers.
3. The `Log` node is executed, with input from the `Template` node.
4. The `Template` node is called again, since the `HttpResponse` node also depends on it.
5. The `HttpResponse` node is called with input from the `Template` node.

#### Functions without triggers

Functions without any trigger inputs or outputs are called **on demand**, and don't cache their results, meaning that if several nodes depend on the output of a single non-triggerable node, it is called several times, like in the example above.

Functions with triggers can only be called by triggering them from a previous function or event, or by clicking the **play**-button in their header.&#x20;

They do **cache** their results, meaning that as long as a triggered node has been called, any node that depends on any of its outputs will use the values from its last execution.

{% hint style="warning" %}
If a node depends on value from a triggered node which has not yet been called, the result will be `null`.
{% endhint %}

<img src="/files/zxHbuvhg6g3AoCnGfn6Z" alt="value from triggered node which hasn&#x27;t been executed yet" width="563">
