This document describes Onyx, a new flexible and extensible data processing system. Onyx aims to address limitations in existing frameworks when dealing with new resource environments like disaggregated computing and transient resources. The Onyx architecture includes a compiler that transforms dataflow programs into optimized execution plans using various passes. The runtime then executes the plans across cluster resources. Onyx allows dynamic optimization by collecting metrics during execution and generating new plans. It can harness transient resources by placing tasks strategically.