# Data processing

There are almost no limits for apps built with Heisenware. This is an overview of the most important building blocks for your application logic:&#x20;

* [Functions](https://docs.heisenware.com/~/changes/eYCCpn9cCBKOYnZA6a8f/building-apps/data-processing/functions):  To create the application logic, instead of programming, you configure functions and establish links between them. Each function is designed to perform a specific action using input arguments and provides an output result for further processing. Functions can be triggered by events.&#x20;
* [Function extensions](https://docs.heisenware.com/~/changes/eYCCpn9cCBKOYnZA6a8f/building-apps/data-processing/function-extensions) are useful tools to modify, filter or record output on the fly. You can use JSONata or plain JavaScript to express your custom modifications or filters.
* [Objects](https://docs.heisenware.com/~/changes/eYCCpn9cCBKOYnZA6a8f/building-apps/data-processing/objects-and-instances) are like smart containers that combine information (*data*) and actions (*functions*) together. They are useful if many instances of a same template (*class*) must be managed, where each instance needs to keep an isolated context (*state*).
* [Utilities](https://docs.heisenware.com/~/changes/eYCCpn9cCBKOYnZA6a8f/building-apps/data-processing/utilities): Pre-built, specific functions and objects aiding to build complex data processing logic.
