Spox
Spox makes it easy to construct ONNX models through clean and idiomatic Python code.
Why use Spox?
A common application of ONNX is converting models from various frameworks. This requires replicating their runtime behaviour with ONNX operators. In the past this has been a major challenge. Based on our experience, we designed Spox from the ground up to make the process of writing converters (and ONNX models in general) as easy as possible.
Spox's features include:
- Eager operator validation and type inference
- Errors with Python tracebacks to offending operators
- First-class support for subgraphs (control flow)
- A lean and predictable API
Installation
Spox releases are available on PyPI:
pip install spox
There is also a package available on conda-forge:
conda install spox
Quick start
In Spox, you primarily interact with Var objects - variables - which are placeholders for runtime values.
The initial Var objects, which represent the arguments of a model (the model inputs in ONNX nomenclature), are created with an explicit type using the argument(Type) -> Var function. The possible types include Tensor, Sequence, and Optional.
All further Var objects are created by calling functions which take existing Var objects as inputs and produce new Var objects as outputs. Spox determines the Var.type for these eagerly to allow validation.
Spox provides such functions for all operators in the standard. They are grouped by domain and version in the spox.opset submodule.
The final onnx.ModelProto object is built by passing input and output Vars for the model to the spox.build function.
Below is an example for defining an ONNX graph which computes the geometric mean of two inputs. Make sure to consult the Spox documentation to find more details and tutorials.
import onnx
from spox import argument, build, Tensor, Var
# Import operators from the ai.onnx domain at version 17
from spox.opset.ai.onnx import v17 as op
def geometric_mean(x: Var, y: Var) -> Var:
# use the standard Sqrt and Mul
return op.sqrt(op.mul(x, y))
# Create typed model inputs. Each tensor is of rank 1
# and has the runtime-determined length 'N'.
a = argument(Tensor(float, ('N',)))
b = argument(Tensor(float, ('N',)))
# Perform operations on `Var`s
c = geometric_mean(a, b)
# Build an `onnx.ModelProto` for the given inputs and outputs.
model: onnx.ModelProto = build(inputs={'a': a, 'b': b}, outputs={'c': c})
Credits
Original designed and developed by @jbachurski with the supervision of @cbourjau.
Metadata
Release files for spox 0.18.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| spox-0.18.1.tar.gz | 594.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| spox-0.18.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 959.8 kB
Release files / spox-0.18.1.tar.gz
| Download URL | spox-0.18.1.tar.gz |
|---|---|
| Size | 594.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
23fb633253536f782f85e539157e75533135ba2d498e708c9d1aab516eabfd26
|
|
BLAKE2b-256 checksum How to use checksums |
d8368b3c27429e87dd5fcf368e365714acdbba863e9d75807d789238e74e222b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 30, 2026.
Transparency logRelease files / spox-0.18.1-py3-none-any.whl
| Download URL | spox-0.18.1-py3-none-any.whl |
|---|---|
| Size | 365.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
00d1a788c43cff126c99e983d1a5e26217bc4af05abe3a7b069b9e1b886640a5
|
|
BLAKE2b-256 checksum How to use checksums |
c2c3d59406055536217b6dd76e69f1eca657f3f53183362de0c478e2222c46f1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 30, 2026.
Transparency log