ONNX (Open Neural Network eXchange) is an open standard for machine learning interoperability, supported by the most widely used tools and frameworks. ONNX-Scala (https://github.com/EmergentOrder/onnx-scala) brings full support for the ONNX specification, and hence for state-of-the-art deep learning models as well as numerical computing more generally to the Scala ecosystem. Backed by the optimized native CPU/GPU backend ONNX Runtime, with a Scala.js backend coming soon, it offers 2 APIs: A) For off-the-shelf models / performance-critical scenarios, a simple black-box API, B) for everything else (pre/post processing, model customization, internal parameter streaming, etc.) a fine grained API that exposes each ONNX operator as a pure function with type-level encoding of, and constraints on, shapes, axis semantics and data type for each input and output tensor / ndarray. The latter API synthesizes recent progress toward more typeful and functional approaches from across the (Python-dominated) AI ecosystem, implemented using a variety of new features in Dotty / Scala 3 and forms the basis of NDScala (https://github.com/SciScala/NDScala), a NumPy-like API enabling seamless interoperation between ONNX-Scala and other JVM-based offerings via an ndarray type class.