> For the complete documentation index, see [llms.txt](https://maru-2.gitbook.io/maru/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://maru-2.gitbook.io/maru/maru-zkvm/domain-specific-language.md).

# Domain Specific Language

One of the most important aspects of creating **dataflows** in Maru is that developers can program their own operators using the built-in **DSL** embedded in the compiler. The code for each custom operator is compiled into a separate binary file for the zkVM. In a single shared description file, the input streams and connections between operators in the dataflow graph are defined. These bytecode and description files are then loaded into the "operator registry," from which the protocol updates its representation of the data stream and executes it.

Below are several examples of how the code for programs utilizing the DSL capabilities to create custom operators might look, according to our expectations:

* [Unary map](/maru/maru-zkvm/domain-specific-language/unary-map.md)
* [Zip and binary map](/maru/maru-zkvm/domain-specific-language/zip-and-binary-map.md)
* [Filter for all ETH-USDC swap prices on Uniswap](/maru/maru-zkvm/domain-specific-language/filter-for-all-eth-usdc-swap-prices-on-uniswap.md)
* [Calculate a 24-hour block-by-block moving average of the ETH-USDC pair on Uniswap](/maru/maru-zkvm/domain-specific-language/calculate-a-24-hour-block-by-block-moving-average-of-the-eth-usdc-pair-on-uniswap.md)
* [Compiler optimizations](/maru/maru-zkvm/domain-specific-language/compiler-optimizations.md)
