Skip to main content

High-performance typed runtime for local and distributed streaming graphs

Project description

Nodrix 1.0.0

PyPI Python CI License

Nodrix is a high-performance typed runtime for local and distributed streaming graphs. It runs Python and C++ nodes in one graph, preserves zero-copy paths where the memory domain permits, and makes every copy, drop, restart, queue, and network export observable.

Core model

Pipeline manifest
       ↓ validate / lock
Executable typed graph
       ↓
Node → Port → Edge → Node
       ├─ in-process zero-copy
       ├─ shared-memory process isolation
       ├─ device-memory contracts
       └─ named LAN streams

No detector, tracker, camera, or fixed stage is mandatory. A graph can be Capture → Inference → Output, Source → Sink, a branched media graph, LiDAR processing, audio, or custom typed data.

Install

Install the core runtime and CLI from PyPI:

python3 -m venv .venv
source .venv/bin/activate
pip install nodrix
nodrix --version

Optional media and viewer dependencies:

pip install "nodrix[viewer]"
pip install "nodrix[media]"

For an isolated CLI installation:

pipx install nodrix

GitHub Releases provide prebuilt Linux x86-64, Linux ARM64 and macOS wheels. When a compatible wheel is unavailable, pip builds the included C++20 extensions from the source distribution, which requires a C++ compiler and Python development headers.

Empty project and templates

nodrix init my_project

This creates an intentionally empty project skeleton. Runnable examples are explicit:

nodrix init camera_app --template vision
nodrix init media_app --template media
nodrix init device_app --template device
nodrix init package_app --template package

Run and reproduce

cd my_project
nodrix validate --strict
nodrix lock
nodrix run --locked

Every run receives its own artifact directory:

.nodrix/runs/<run-id>/
├── manifest.yaml
├── resolved-manifest.yaml
├── nodrix.lock
├── runtime.json
├── environment.json
├── status.json
├── metrics.jsonl
├── errors.jsonl
├── logs/
├── outputs/
└── summary.json

Stable Python API

from nodrix import Message, Node

class Multiply(Node):
    input_types = {"input": "core.object"}
    output_types = {"output": "core.object"}

    def process(self, inputs):
        message = inputs["input"]
        return {
            "output": message.with_updates(
                payload={"value": message.payload["value"] * 2}
            )
        }

Nodrix 1.x preserves the public Node, SourceNode, SinkNode, Message, NodeContext, buffer, memory, and lifecycle contracts. Existing 0.x nodes that override open, flush, and close continue to work through lifecycle adapters.

Lifecycle and health

Lifecycle states:

created → configured → starting → running → draining → stopping → stopped
                                      └→ failed / restarting
nodrix status
nodrix health
nodrix health --watch

Process-isolated nodes can use watchdog recovery:

nodes:
  detector:
    uses: ./nodes/detector.py:Detector
    execution:
      isolation: process
    failure:
      policy: restart
      max_restarts: 5
    health:
      timeout_ms: 2000
      on_timeout: restart

Local packages

nodrix init my_nodes --template package
cd my_nodes
nodrix package build .
nodrix package install dist/my-nodes-1.0.0.ndpkg

Use an installed node by stable package reference:

nodes:
  processor:
    uses: my-nodes/passthrough

.ndpkg installation checks archive paths and SHA-256 checksums. No public marketplace or remote-code installation is enabled in 1.0.

Secure named streams

Only explicitly exported ports become network streams. Local edges remain direct and do not pay network or serialization overhead.

streams:
  bind_host: 0.0.0.0
  max_message_bytes: 67108864
  exports:
    - name: /camera/front/h264
      from: encoder.encoded
      queue:
        capacity: 1
        policy: latest
      access:
        mode: token
        token_env: NODRIX_CAMERA_TOKEN
        allow_ips: ["192.168.1.0/24"]
export NODRIX_STREAM_TOKEN=...
nodrix stream echo /camera/front/h264
nodrix-viewer /camera/front/h264

Production validation

nodrix validate --strict
nodrix inspect --memory

The validator checks graph cycles, port/type compatibility, memory transfers, unsupported copies, open LAN streams, stream backpressure, watchdog/isolation conflicts, resource configuration, and native plugin loading.

Metrics and runs

nodrix run --metrics-listen 127.0.0.1:9464
nodrix metrics --format prometheus
nodrix runs list
nodrix runs show <run-id>
nodrix runs compare <run-a> <run-b>

Native ABI 1.0

nodrix native inspect ./libdetector.so

Nodrix Plugin ABI 1.0 uses numeric ABI 65536 and feature flags for typed ports and memory-domain contracts. Incompatible plugins are rejected before node creation.

Main capabilities carried into 1.0

  • Python/C++ unified graph executor;
  • native bounded queues and reusable buffer pools;
  • shared-memory process isolation with zero-copy input/output paths;
  • CPU, shared, DMA-BUF, CUDA, ROCm, Vulkan, OpenCL, Metal, NPU and external-memory contracts;
  • DLPack interoperability;
  • .ndrx universal record/play;
  • FFmpeg Media Pack and H.264/H.265 named streams;
  • low-latency nodrix-viewer;
  • typed custom-message generation for Python and C++;
  • local/LAN stream discovery without a mandatory agent.

Honest limitations

Nodrix 1.0 stabilizes the contracts and production control plane. Hardware-specific CUDA IPC mapping, full V4L2 DMA-BUF capture/requeue, native libav nodes, QUIC/UDP data plane, TLS certificates, ROS 2 bridge, and ready-made detector/tracker packs remain later backends or releases.

See docs/FULL_WORKFLOW_RU.md, docs/RELEASE_1.0.0.md, CONTRIBUTING.md, and PUBLISHING_RU.md.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nodrix-1.0.0.tar.gz (198.7 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

nodrix-1.0.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (474.1 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

nodrix-1.0.0-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (474.0 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

nodrix-1.0.0-cp314-cp314-macosx_11_0_arm64.whl (185.1 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

nodrix-1.0.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (473.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

nodrix-1.0.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (473.5 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

nodrix-1.0.0-cp313-cp313-macosx_11_0_arm64.whl (185.0 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

nodrix-1.0.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (473.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

nodrix-1.0.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (473.6 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

nodrix-1.0.0-cp312-cp312-macosx_11_0_arm64.whl (185.0 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

nodrix-1.0.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (471.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

nodrix-1.0.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (471.7 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

nodrix-1.0.0-cp311-cp311-macosx_11_0_arm64.whl (184.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

Details for the file nodrix-1.0.0.tar.gz.

File metadata

  • Download URL: nodrix-1.0.0.tar.gz
  • Upload date:
  • Size: 198.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for nodrix-1.0.0.tar.gz
Algorithm Hash digest
SHA256 88270f6965bbdf3ef5a1b4e0f9b63b8b122bd28bb1d1bae34e28361ec5c0c4f5
MD5 a00f5edc85ad47f8f3f911e4196b78f4
BLAKE2b-256 bb1ef944eccb5d0c603f09cad70713970f763cefb5e8068912f3446bbe11a8e4

See more details on using hashes here.

Provenance

The following attestation bundles were made for nodrix-1.0.0.tar.gz:

Publisher: publish.yml on CactysFedya/nodrix

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nodrix-1.0.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for nodrix-1.0.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 89eed1d5721336a7df9cc3cd314c7edb99b796f3934a3b195e951c2f962fe3c6
MD5 6bfd21524056e73972b1a13fecfcdc40
BLAKE2b-256 73d882756c2079719f14b806db90d69d3d0694d3e95dfb0ef660fe74dab89547

See more details on using hashes here.

Provenance

The following attestation bundles were made for nodrix-1.0.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish.yml on CactysFedya/nodrix

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nodrix-1.0.0-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for nodrix-1.0.0-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 21c14b826cf6c5e89b0341653b2e0b5e542f5c67d75760b9b63454101855aa51
MD5 255fd88376f6223d768914922c7a5b85
BLAKE2b-256 341cf0fcd4737af6174eefadf4edb119ce415e9099689c1856adb4dd3d99b56b

See more details on using hashes here.

Provenance

The following attestation bundles were made for nodrix-1.0.0-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl:

Publisher: publish.yml on CactysFedya/nodrix

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nodrix-1.0.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for nodrix-1.0.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d4e8b68226a69309ac21fef36e197b7d25d5729ced1c3e8a654a6f8d74725bc6
MD5 74405ef8ee4a901c45592acb8ef9ef63
BLAKE2b-256 d0766d47b8ddbe1787fb3225d6d435bd845f6a00b7e27993353e7a2761edbd03

See more details on using hashes here.

Provenance

The following attestation bundles were made for nodrix-1.0.0-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: publish.yml on CactysFedya/nodrix

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nodrix-1.0.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for nodrix-1.0.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 197fb0b46d9e2ae2afbe58972f199171724083a1501db542c7bf13bcccfefa51
MD5 e2986e3e81ded25d6db700f1c9b40bd1
BLAKE2b-256 2a7d8cee9d75f04db478d5bd6e2844736a345be95043c9887be2a1a218b997cc

See more details on using hashes here.

Provenance

The following attestation bundles were made for nodrix-1.0.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish.yml on CactysFedya/nodrix

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nodrix-1.0.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for nodrix-1.0.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d244fa5515e087ab1da435fbb267639d42b73a218beab46a1d20c5d7bb68faec
MD5 80fc49f21fe26e1ca68a6b4bacaafce4
BLAKE2b-256 93d75a82dd167026d1240959921b48c32b5c8d48acc00e2bd055e43d689ff29a

See more details on using hashes here.

Provenance

The following attestation bundles were made for nodrix-1.0.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl:

Publisher: publish.yml on CactysFedya/nodrix

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nodrix-1.0.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for nodrix-1.0.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e9f7e840f7b963d018bfe0d08e72723195fcdfc139c1b8f6f8d734fc15cfda30
MD5 4bbec966b0b1328a1d0f816a62a14f07
BLAKE2b-256 df815d978af1df87bf1b607f2e374a36061b51a1a3929fb34ef6f02ba796ad2e

See more details on using hashes here.

Provenance

The following attestation bundles were made for nodrix-1.0.0-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: publish.yml on CactysFedya/nodrix

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nodrix-1.0.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for nodrix-1.0.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 71796a76d3237581560df20cfbc41d663a1d85ae1260ce580f41acd2976e266d
MD5 c318f3271b94131b17003fddccfc715a
BLAKE2b-256 fc125412d00b089e8d73bda1af58f443576f270ffe3c43207b71aa3417c87da1

See more details on using hashes here.

Provenance

The following attestation bundles were made for nodrix-1.0.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish.yml on CactysFedya/nodrix

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nodrix-1.0.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for nodrix-1.0.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 6a48ec22fb3e36444cb37482262adcdedebc69294b75edb61beef2d67840386b
MD5 209f82e3533f1ee22fb2fb83440113fd
BLAKE2b-256 018bef8d560dbbb2c408fb41ba13c610f5ea494ee61c7d394ff47e7ec7a68baa

See more details on using hashes here.

Provenance

The following attestation bundles were made for nodrix-1.0.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl:

Publisher: publish.yml on CactysFedya/nodrix

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nodrix-1.0.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for nodrix-1.0.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d17e9be6fe7f4536f77cc8a11ee0ccfc3f7bdacc7a9e0644b9f9bf400c581363
MD5 3dcc06089cc9b71455623c17cfcb70f0
BLAKE2b-256 5a3551018ef4a7a6316fd3a2a2ddf60c30feaff3a02b180569907b92bd17fe64

See more details on using hashes here.

Provenance

The following attestation bundles were made for nodrix-1.0.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: publish.yml on CactysFedya/nodrix

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nodrix-1.0.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for nodrix-1.0.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 dc21f868ec20640145fb20934e6eca807895b1cac87f87a8e4c27b69df9aba44
MD5 9fdc3ae3cb8beaf36b49d32aa27f1d1a
BLAKE2b-256 0a7c5fa1d840b890db5ee1bc49da129e9b1db30a07a1ff52b1c702b689c54d5c

See more details on using hashes here.

Provenance

The following attestation bundles were made for nodrix-1.0.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish.yml on CactysFedya/nodrix

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nodrix-1.0.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for nodrix-1.0.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d787ca23fb05ab920d44aba2f723fcfb72f90148860cd2e91c54a00ec24f81a3
MD5 9c0bd1fb6d77ff29db10f2f6d4acf81b
BLAKE2b-256 4600de6f30735313bdd7a2ec3bfe5d872df5742c5e5713827bfaa998dcfdb64f

See more details on using hashes here.

Provenance

The following attestation bundles were made for nodrix-1.0.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl:

Publisher: publish.yml on CactysFedya/nodrix

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file nodrix-1.0.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for nodrix-1.0.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7a368780bc3940b4462f27bec5b6c1da23fbd4693c57f1513290f5ac8889b948
MD5 0dbb2535e43a6dbdc737126709173c0c
BLAKE2b-256 99f5b43859847cc70e13cd59cf40162ec4ecce5a5facb4feee2ec6926feb6811

See more details on using hashes here.

Provenance

The following attestation bundles were made for nodrix-1.0.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: publish.yml on CactysFedya/nodrix

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page