> 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/high-level-frontend.md).

# High-level frontend

**LLVM** is a collection of compiler and toolchain technologies that can be used to develop frontend for any programming language and backend for any instruction set architecture. It is designed around a language-independent intermediate representation that serves as a portable, high-level assembly language that can be optimized with a variety of transformations over multiple passes. We can use **LLVM** to let developers write code for zkVM using any high-level language, for example C.

As noted earlier, our instruction set is pretty uncommon and a number of intermediate-level optimisations may be beneficial in addition to just plain backend. Also lack of common-use registers pose an unusual challenge to **LLVM** but we are focused on solving this issue in an efficient manner. Additionally with a good enough toolchain we can achieve language-level compatibility with EVM.

While general-purpose programming for zkVM could yield some benefits, we mostly counting on **LLVM** as fixture to implement our **Domain Specific Language**, as for us most useful aspect of creating zkVM is ability to manipulate dataflows in user-defined, zk-proven manner, allowing users to create universally-trusted oracles on blockchains.
