ONNX v1.23.0 is now available with exciting new features! We would like to thank everyone who contributed to this release!
Please visit onnx.ai to learn more about ONNX and associated projects.
What's Changed
IR Version 14
IR Version is changed from 13->14
Breaking Changes and Deprecations
- perf(reference): vectorize Conv implementation by @justinchuby with @Copilot in #8366
Spec and Operator
New Operator SwiGLU is added [SwiGLU]
- Fix Attention is_causal causal-mask alignment + composed is_causal/attn_mask NaN robustness for external (static) KV cache (#8054) by @titaiwangms in #8068
- Add Celu-28 with float16/bfloat16/double support by @cyyever in #8107
- docs: clarify Transpose operator spec by @pctablet505 in #8197
- Add SwiGLU as a function-op by @gramalingam in #8202
- Mark Range operator as deterministic by @take-cheeze in #8232
- docs: fix ScatterND updates shape formula by @uditjainstjis in #8212
- Add local_window_size attribute to Attention opset 25 by @FuZoe in #8108
- Fix TensorScatter circular mode wrapping non-sequence coordinates by @justinchuby in #8353
- Attention (opset 23/24): fix bf16 type mismatch in causal-mask and padding-mask paths by @justinchuby with @Copilot in #7840
- feat: add FLOAT6E2M3 and FLOAT6E3M2 quantization data types by @andife in #8349
- feat(defs): support bfloat16 in Compress and related ops by @justinchuby with @Copilot in #8078
- Add
modeattribute (DCR/CRD) to SpaceToDepth in opset 28, add function bodies to SpaceToDepth and DepthToSpace by @justinchuby with @Copilot in #7848 - Allow float input to Mod when fmod=0 by @justinchuby with @Copilot in #7521
- Add Einsum-28 with bfloat16 support by @mcollinswisc in #8313
- refactor(defs): centralize shared schema docs by @justinchuby in #8387
- Improve STFT operator documentation by @justinchuby with @Copilot in #7905
- Add BitShift-28 with signed integer type support by @mcollinswisc in #8270
- feat(defs): support all IR14 types in Optional ops by @youzow3 in #8176
- fix(defs): restrict ReduceLogSum operators to float types in opset 28 by @malakazlan in #8384
- RFC Proposal for Grouped MatMul operator by @gramalingam in #8193
Reference Implementation
- Fix ScatterND reference impl for min/max with multi-axis indices by @Ankita7033 in #8099
- Register latest QuantizeLinear and DequantizeLinear reference implementations by @napronald in #8182
- Fix GatherElements output shape for empty indices by @kiwigitops in #8298
- fix(reference): handle scalar NonZero inputs by @kiwigitops in #8296
- Fix ReduceMax on empty boolean tensors by @kiwigitops in #8312
- fix(reference): handle zero-length ReverseSequence slices by @kiwigitops in #8304
- Support higher-rank ScatterElements evaluation by @kiwigitops in #8299
- fix(reference): reject out-of-range Concat axes by @arcz in #8327
- Runtime checks of shape annotations in reference evaluator by @gramalingam in #8307
- fix(reference): use accurate exponential functions by @justinchuby with @Copilot in #8355
Utilities and Tools
- Fix heap buffer over-read in Conv/Pool shape inference for weight rank mismatch by @titaiwangms with @Copilot in #8037
- Fix make_attribute_ref to set ref_attr_name by @devin-lai in #8009
- Address shape inference issues in Conv by @yuslepukhin in #8051
- Fix annotated float attrs parsed from int literals by @fengjikui in #8065
- Fix locale-dependent float parsing in C++ parser by @yuslepukhin in #8112
- test: fix two copy-paste bugs that left code paths untested by @cyyever in #8159
- Add loop test case with static loop bound by @gramalingam in #8146
- Update shape inference tests to use parser by @gramalingam in #8168
- Validate Scan num_scan_inputs to prevent shape-inference underflow by @cyyever in #8114
- fix(version_converter): harden Scan adapters and domain-index lookup against malformed models by @andife in #8084
- improve checker which fails on a particular mismatch between type and shape by @xadupre in #8211
- Preserve inputs with no shape in Scan 8 -> 9 by @mcollinswisc in #8216
- Fix OneHot shape inference when depth is empty by @cbourjau in #8177
- Add Resize 18 to 17 version converter adapter by @napronald in #8209
- Update hasInput and hasOutput methods of InferenceContextImpl by @gramalingam in #8271
- Fix shape inference overflow by @andife in #8277
- fix(shape_inference): handle missing function inputs in subgraphs by @arcz in #8305
- fix(shape_inference): prevent use-after-scope during function inference by @arcz in #8303
- fix(shape_inference): reject zero scalar SplitToSequence split by @arcz in #8322
- fix(shape_inference): bound inferred rank materialization by @arcz in #8321
- fix(version_converter): prevent initializer-name use-after-free by @arcz in #8334
- fix: guard ExtendSupportedTypes against missing output in version converter by @andife in #8274
- fix(version_converter): validate Captured node outputs by @arcz in #8329
- fix(shape_inference): validate TreeEnsemble leaf weight rank by @arcz in #8336
- Update shape inference test to use check type option by @gramalingam in #8323
- fix(version_converter): validate Reshape output in Softmax downgrade by @arcz in #8326
- fix(shape_inference): prevent use-after-scope during node inference by @arcz in #8330
- fix(inliner): handle Constant nodes without outputs by @arcz in #8325
- fix(checker): reject non-canonical FLOAT6 encodings by @justinchuby in #8386
- fix(shape_inference): reject Split nodes with no outputs by @arcz in #8328
Build, CI and Tests
- Update renovate config for Pixi lock file update by @cbourjau in #8022
- Remove redundant min-deps tests in release process by @cbourjau in #8034
- Replace windows-latest with windows-2022 to fix CI by @cbourjau in #8074
- Update screenshot with correct configuration by @cbourjau in #8073
- Use a cache for the link checker by @cbourjau in #8098
- Clean-up tests by @cbourjau in #8154
- Fix pyodide/emscripten CMake configure after nanobind 2.13.0 bump by @andife in #8157
- Fix Python test bugs by @cyyever in #8160
- Migrate to pytest's asserts by @cbourjau in #8155
- Bump protobuf/abseil-cpp versions used to build protobuf from source in CI by @andife in #8172
- Build Pyodide wheel for Python 3.14 by @metalmancode in #8192
- Add Pad shape inference coverage for value_ints by @nightcityblade in #8206
- Remove submodules option from checkout step by @andife in #8226
- fix(common): route tensor dim errors through throw_tensor_error by @rvandermeulen in #8220
- ci: add Linux GCC/Clang build with exceptions disabled by @andife in #8225
- Add TSAN and TypeSAN sanitizer support; fix ASAN CI env-var propagation by @cyyever in #7471
- Remove node test artifacts by @cbourjau in #7959
- Add tests for direction attribute of RNN ops by @mcollinswisc in #7935
- Fix b_zero_point for int8 in QLinearMatMul 3D test case by @andife with @Copilot in #7991
- Fix Unique backend test output shapes by @DarkBall123 in #8180
- Precut Version Update for Release 1.23.0 by @sfatimar in #8368
- ci: add a clang-cl Windows job to catch MSVC-only permissive extensions by @andife in #8280
- Pin ml_dtypes==0.5.4 in numpy<2.0 CI test jobs by @andife in #8378
Documentation
- Add ROADMAP.md: 12-month roadmap template for SIGs and Working Groups by @andife in #8030
- Expand roadmap with SIG details for 2026-2027 by @andife in #8059
- Update operator sig roadmap by @gramalingam in #8070
- Add C-API definition to roadmap by @cbourjau in #8097
- Bump version number to 1.23.0 by @andife in #8102
- Add jax2onnx to converter documentation by @enpasos in #8103
- Update ROADMAP.md by @andife in #8120
- fix calender link description (working-groups.md) by @andife in #7663
- Remove onnx.tools.net_drawer from repository by @andife in #8129
- docs: Refresh CONTRIBUTING/README docs and move Model Zoo links to Hugging Face by @andife in #8123
- docs: update release tracking docs for the 1.22.0 release by @andife in #8190
- docs: recommend Conventional Commits for agent-authored PR titles by @andife in #8188
- docs: add REUSE annotation for AGENTS.md symlink by @andife in #8224
- Update RELEASE-MANAGEMENT.md by @andife in #8234
- docs: correct model validation assurances by @andife in #8276
- docs: fix cross-platform environment variable syntax by @andife in #8283
- docs: require labels on agent-authored PRs by @andife in #8285
- docs: correct Protobuf build version guidance by @andife in #8286
- Fix warnings from docs-build and ensure we fail on warnings in the future by @cbourjau in #8294
- docs: refresh community governance docs, add History section by @andife in #8297
- docs: clarify release and reproducibility guidance by @andife in #8284
- docs: clarify spurious unknown variable in 'Slice' operator by @BW-SK in #8335
- test: fix typo flagged by the typos lint hook by @cyyever in #8339
- docs(community): add GitHub Organization Seat Policy by @andife in #8223
- fix(docs): restore operator examples by @kiwigitops in #8332
- docs: add llms.txt for AI-agent discoverability by @andife in #8348
- Update RELEASE-MANAGEMENT.md by @sfatimar in #8406
- Version change to rc1 by @sfatimar in #8407
- Version changed to 1.23.0 by @sfatimar in #8469
Full Changelog: v1.22.0...v1.23.0