Compatibility
Neat spans two environments: the host SDK (a container where you cross-compile) and the Modalix DevKit (aarch64, where the framework actually runs). Keep them separate — a requirement on one side rarely applies to the other.
On-device — Modalix DevKit
| Component | Requirement |
|---|---|
| Board | any Modalix DevKit (the "3.0" in the product name is not a version gate — any Modalix DevKit runs Neat) |
| Architecture | aarch64 |
| Platform software | 2.0.0 |
| glibc | ≥ 2.34 |
| OpenCV | 4.6 |
| GStreamer | 1.0 |
| C++ standard | C++20 |
Host development — Neat SDK (container)
The SDK runs in Docker on the host and cross-compiles to the DevKit.
| Component | Supported |
|---|---|
| Host OS |
|
| SDK version | 2.0.0 |
| eLxr version | 2.0.0 |
| Cross toolchain | aarch64-linux-gnu-g++ 12.2.0 |
| Sysroot | /opt/toolchain/aarch64/modalix |
pyneat (Python bindings — run on the DevKit)
pyneat is built by the SDK and runs on the DevKit, not on the host.
| Property | Value |
|---|---|
| Prebuilt wheel | CPython 3.11 (cp311) · linux_aarch64 |
| NumPy | >=1.24,<2 |
| PyTorch | >=2.3.0 (optional) (DLPack interop) |
| From source | Python ≥ 3.9 |
There is no x86 / non-aarch64 pyneat — it exists only for the DevKit. The host SDK
cross-builds it and installs it on the paired DevKit (venv at /media/nvme/pyneat
if there's writable NVMe, otherwise $HOME/pyneat, always reachable as ~/pyneat).
Tools
Use the latest sima-cli — there is no pinned floor.
The version-matched set (firmware ↔ runtime)
The on-device packages — neat-runtime, neat-gst-plugins, neat-appcomplex,
neat-ev74-firmware — are built together from one internals commit and share that
commit's hash in their version string (e.g. 2.0.0-<branch>-<hash>). Install
the matched set (same hash) together. neat-internals-dev is the umbrella that
pulls the matched stack.
A partial update — a new neat-runtime against an older neat-ev74-firmware — leaves
the runtime asking the EV74 for a kernel the firmware doesn't have, which surfaces as
No channel available at run time. The coupling key (the internals hash) is recorded
on the device in /usr/share/sima-neat/buildinfo.json.
Known-incompatible / not supported
| Situation | Why |
|---|---|
NumPy ≥ 2 with pyneat | pin is >=1.24,<2 |
| Mismatched runtime ↔ firmware hash | not a matched set → No channel available |
| CPython other than 3.11 for the prebuilt wheel | wheel is cp311 only (build from source for other 3.x ≥ 3.9) |
| Non-aarch64 target | no x86 / ARMv7 pyneat or runtime exists |
| Host glibc < 2.34 on the DevKit | neat-runtime requires libc6 ≥ 2.34 |
| CUDA / GPU acceleration | N/A — the host is build-only; inference runs on the Modalix MLA/EV74 |
Verify your install
# SDK / eLxr version (host container)
cat /etc/sdk-release
# Neat version + the internals coupling hash (on the DevKit)
cat /usr/share/sima-neat/buildinfo.json
# pyneat version (on the DevKit)
~/pyneat/bin/python3 -c "import pyneat; print(pyneat.__version__)"
If you hit No channel available or undefined symbol …submitPrepared, check that
neat-runtime and neat-ev74-firmware report the same hash — that's the most
common compatibility failure. See Troubleshooting.
These belong on this page but require a product/release-eng decision and are not yet documented:
- Support lifecycle / EOL — how long each Neat release + its firmware is supported.
- Deprecation policy — notice period and forward-looking requirement changes.
- Model-archive portability — whether a compiled
.tar.gzis tied to a runtime/format version or board revision, and the compiler ↔ runtime compatibility rule.