Download Latest Version v2.0.0-rc.13 source code.zip (4.6 MB)
Email in envelope

Get an email when there's a new version of ort

Home / v2.0.0-rc.13
Name Modified Size InfoDownloads / Week
Parent folder
README.md 2026-07-28 5.9 kB
v2.0.0-rc.13 source code.tar.gz 2026-07-28 4.4 MB
v2.0.0-rc.13 source code.zip 2026-07-28 4.6 MB
Totals: 3 Items   9.0 MB 1
# 2.0.0-rc.13 ### ๐Ÿ’– If you find `ort` useful, please consider sponsoring us on [Open Collective](https://opencollective.com/pyke-osai) ๐Ÿ’– ๐Ÿค” Need help upgrading? Ask questions in [GitHub Discussions](https://github.com/pykeio/ort/discussions) or [in the pyke.io Discord server](https://discord.gg/uQtsNu2xMa)! ---

๐ŸŽฏ Execution provider clarity

EP structs like ep::CUDA are now compile-time gated behind their respective Cargo feature flags. The EP feature flags only modifying runtime behavior was a common pain point, and this change brings ort in line with, like, every other Rust crate in existence.

โš ๏ธ ort will now throw an error at link time if download-binaries is enabled and no binaries contain all of the requested EPs. Previously, if you enabled a nonsensical combination like cuda + coreml, ort would silently fall back to a CPU-only build. This caused great confusion as the only indicator of what went wrong was in log messages that don't show by default. A new lax-feature-matching Cargo feature will fallback to the closest fit instead of erroring.

๐ŸŽ ONNX Runtime 1.28

rc.13 skips ahead 4 ONNX Runtime versions to v1.28, bringing new operator support, bug & security fixes, and performance improvements.

โœ–๏ธ No CUDA 12

rc.13 only ships CUDA 13 binaries, as ONNX Runtime has deprecated CUDA 12.

๐Ÿงฉ Custom operator ergonomics

Custom operators have been reworked to have a more Rusty interface:

:::diff
 struct MyOperator;

 impl Operator for MyOperator {

+   type Kernel<'attr> = ort::operator::BoxedKernel<'attr>;

    fn name(&self) -> &str {
        "MyOperator"
    }


-   fn inputs(&self) -> Vec<OperatorInput> {
-       vec![OperatorInput::required(TensorElementType::Float32), OperatorInput::required(TensorElementType::Float32)]
+   fn inputs(&self) -> impl IntoIterator<Item = OperatorInput> {
+       [OperatorInput::required(TensorElementType::Float32), OperatorInput::required(TensorElementType::Float32)]
    }


-   fn outputs(&self) -> Vec<OperatorOutput> {
-       vec![OperatorOutput::required(TensorElementType::Float32)]
+   fn outputs(&self) -> impl IntoIterator<Item = OperatorOutput> {
+       [OperatorOutput::required(TensorElementType::Float32)]
    }


-   fn create_kernel(&self, _: &KernelAttributes) -> ort::Result<Box<dyn Kernel>> {
-       Ok(Box::new(|ctx: &KernelContext| {
+   fn create_kernel<'attr>(&self, _: &KernelContext<'attr>) -> ort::Result<Self::Kernel<'attr>> {
+       Ok(Box::new(|ctx: &ComputeContext| {
            ...
        }))
    }
 }

โ„น๏ธ Custom diagnostic messages

ort now uses the wonderful #[diagnostic] attributes to drastically improve the clarity of commonly encountered errors.

โ˜‘๏ธ Miri-approved

Test coverage was expanded and ort was ran against Miri, and a few unsoundness bugs were fixed.

โœจ Other features

๐Ÿ”ง Other fixes


โค๏ธ๐Ÿงก๐Ÿ’›๐Ÿ’š๐Ÿ’™๐Ÿ’œ

Source: README.md, updated 2026-07-28