Exo is a domain-specific language and compiler framework designed for productive programming of hardware accelerators. Written in Python and supporting versions 3.9 and above, Exo enables developers to write high-level specifications of computations that can be compiled down to optimized C code for various hardware targets. The project provides both direct Python execution of Exo files and a command-line compiler tool called exocc that generates C and header files with customizable output directories and file naming conventions.
The core purpose of Exo is to address the challenge of programming hardware accelerators by providing a scheduling language that allows developers to express algorithmic intent separately from low-level optimization decisions. This separation enables more productive development workflows compared to hand-writing optimized accelerator code. The framework includes comprehensive documentation and examples in dedicated directories, along with a live interactive environment available at godbolt.exo-lang.dev for experimentation.
From a technical perspective, Exo functions as both an interpreter and code generator. It leverages PySMT for symbolic reasoning about program transformations, with Z3 solver integration to handle constraint solving during compilation. The build system relies on CMake version 3.21 or newer and uses Ninja as its default backend, though this can be configured. The test infrastructure generates C code and compiles it using system compilers, ensuring that generated code works correctly across different platforms.
The project demonstrates active maintenance and community engagement. GitGenius tracking shows a median issue and pull request response latency of 32 hours across 29 tracked items, indicating responsive maintainers. The most active contributor tracked is yamaguchi1024 with 41 events, followed by gilbo with 9 events. Bug reports represent the most common issue type with 15 tracked instances, while program analysis discussions account for 7 active items. The project maintains connections with related repositories including LLVM, WebAssembly tools, and open-source UI projects through overlapping contributor networks.
Development setup follows standard Python practices with strong recommendations for virtual environments. The project uses pre-commit hooks for code formatting and requires careful dependency management, particularly around PySMT solver configuration. For advanced testing scenarios, Exo optionally supports the Intel Software Development Emulator for testing x86 features like AVX-512 and AMX on systems that lack native support.
Exo's intellectual foundation is grounded in peer-reviewed research. The original framework was published at PLDI 2022 in a paper titled "Exocompilation for Productive Programming of Hardware Accelerators" by Ikarashi, Bernstein, Reinking, Genc, and Ragan-Kelley. A follow-up paper, "Exo 2: Growing a Scheduling Language," was published at ASPLOS 2025, documenting the evolution of the scheduling language and its capabilities. The design principles underlying the system are documented in Design.md within the repository.
The project is maintained by researchers at MIT, with contact available through [email protected] and [email protected]. The framework is classified across multiple programming language and compiler design categories, reflecting its role as both a language implementation and a tool for code generation targeting hardware accelerators.