# 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">


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.midio.com/midio-docs/reference/the-midio-language/nodes-and-execution.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
