A pure C99 ONNX runtime with zero dependencies, designed for embedded devices and old hardware.
cONNXr is a pure C99 runtime for executing ONNX models, enabling machine learning inference on embedded devices and old hardware. It solves the problem of deploying trained models to environments that lack support for modern C++ or hardware accelerators, providing a lightweight, dependency-free solution.
Embedded systems engineers and developers working with resource-constrained devices, bare-metal hardware, or legacy systems that require machine learning inference capabilities.
Developers choose cONNXr for its extreme portability and zero-dependency design, allowing inference on hardware where other runtimes are too heavy or incompatible, while remaining framework-agnostic via the ONNX standard.
Pure C ONNX runtime with zero dependancies for embedded devices
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Pure C99 implementation with no external libraries allows deployment on virtually any embedded device, as highlighted by its compatibility with old hardware in the README.
Supports models from any training framework via ONNX export, making it versatile for TensorFlow, Keras, or scikit-learn, as stated in the documentation.
Optimized for bare-metal and resource-constrained environments, enabling ML inference where modern C++ or accelerators are unavailable, per the project's philosophy.
Allows developers to replace operators with custom implementations for dedicated hardware accelerators, offering flexibility for specialized deployments.
Only basic operators are implemented, so many ONNX models will fail to run, as admitted in the README under limitations.
Explicitly labeled as not production-ready and a proof-of-concept, meaning it lacks stability and comprehensive testing for real-world use.
Non multi-threaded C99 code restricts inference speed on devices that could benefit from parallelism, a trade-off for portability.
Reference implementation focuses on float, causing issues with other data types like int16 or double, limiting model compatibility.