Skip to main content

Read-only EtherNet/IP implicit connection bridge that captures PLC I/O data and publishes it to NATS

Project description

eip2nats - EtherNet/IP to NATS Bridge

Read-only bridge that opens an EtherNet/IP implicit (I/O) connection to a PLC, captures the T2O (Target-to-Originator) data stream and publishes every packet to a NATS subject. It does not write data to the PLC — it acts as a passive listener, similar to a sniffer.

All dependencies (libnats, libEIPScanner) are bundled in the wheel.

Features

  • Read-only: Captures PLC I/O data via implicit connection, no writes
  • Self-contained: Includes compiled libnats and libEIPScanner
  • Zero dependencies: No system library installation required
  • Device presets: Built-in assembly constants for known devices (RM75E, ClipX)
  • High performance: Native C++ bindings with pybind11
  • Auto-reconnect: Recovers automatically from connection loss
  • Parallel bridges: Run multiple bridges on different UDP ports simultaneously
  • Thread-safe: Safe handling of multiple connections

Installation

pip install eip2nats

Pre-built wheels are available on PyPI for Linux and Windows.

Building from Source

If a pre-built wheel is not available for your platform, you can build from source:

Linux:

./setup_project_linux.sh

Windows (PowerShell, requires Visual Studio Build Tools):

.\setup_project_windows.ps1

This automatically:

  1. Creates a virtual environment in venv/
  2. Installs Hatch and pybind11
  3. Compiles nats.c, EIPScanner and the Python binding
  4. Creates the wheel
  5. Installs the wheel in the venv

Usage

# Activate virtual environment
source venv/bin/activate    # Linux
.\venv\Scripts\Activate     # Windows PowerShell

# Run example
python examples/example_python_rm75e.py

# Deactivate when done
deactivate

Basic Usage

import eip2nats

# Create bridge (using RM75E device presets)
bridge = eip2nats.EIPtoNATSBridge(
    "192.168.17.200",              # PLC IP address
    "nats://192.168.17.138:4222",  # NATS server
    "plc.data",                    # NATS subject/topic
    config_assembly=eip2nats.devices.RM75E.CONFIG_ASSEMBLY,
    o2t_assembly=eip2nats.devices.RM75E.O2T_ASSEMBLY,
    t2o_assembly=eip2nats.devices.RM75E.T2O_ASSEMBLY,
    t2o_size=100,
    rpi=2000,                      # Requested Packet Interval (µs)
    port=2222,                     # Local UDP port for T2O data
)

# Start
if bridge.start():
    import time
    print("Bridge running!")

    # Monitor
    while bridge.is_running():
        time.sleep(5)
        print(f"RX={bridge.get_received_count()}, "
              f"TX={bridge.get_published_count()}")

    # Stop
    bridge.stop()

More examples in examples/

Requirements

Linux:

  • Python 3.7+
  • git, cmake, make, g++, python3-venv

Windows:

  • Python 3.7+
  • git, cmake
  • Visual Studio Build Tools (cl.exe)

Development

See DEVELOPMENT.md for the full development guide (VSCode setup, debugging, workflows).

Create Release

hatch build

Manual Build (without setup script)

git clone https://github.com/kliskatek/eip2nats.git
cd eip2nats
pip install hatch pybind11

# Build dependencies
python scripts/build_nats.py
python scripts/build_eipscanner.py
python scripts/build_binding.py

# Create wheel
hatch build

Project Structure

eip2nats/
├── pyproject.toml                # Hatch configuration
├── hatch_build.py                # Hook for platform-specific wheel
├── README.md
├── DEVELOPMENT.md                # VSCode development guide
├── LICENSE                       # MIT
├── THIRD_PARTY_LICENSES          # nats.c and EIPScanner licenses
├── setup_project_linux.sh        # Automatic setup (Linux)
├── setup_project_windows.ps1     # Automatic setup (Windows)
├── src/
│   └── eip2nats/
│       ├── __init__.py           # Python package
│       ├── bindings.cpp          # pybind11 bindings
│       ├── EIPtoNATSBridge.h     # C++ header
│       ├── EIPtoNATSBridge.cpp   # C++ implementation
│       └── lib/                  # Compiled libraries (auto-generated)
│           ├── libnats.so / nats.dll
│           └── libEIPScanner.so / EIPScanner.dll
├── scripts/
│   ├── build_config.py           # Shared build configuration
│   ├── build_nats.py             # Builds nats.c
│   ├── build_eipscanner.py       # Builds EIPScanner
│   ├── build_binding.py          # Builds Python binding (.pyd/.so)
│   ├── build_example_cpp.py      # Builds C++ example
│   └── binding_CMakeLists.txt    # CMake template for binding (Windows)
├── examples/
│   ├── example_python_rm75e.py    # Python example (RM75E)
│   ├── example_python_clipx.py    # Python example (ClipX)
│   ├── example_cpp_clipx.cpp      # C++ example (ClipX)
│   └── example_cpp.cpp            # C++ example (debugging)
├── tests/
│   └── test_python.py            # Python unit tests
└── build/                        # Auto-generated, in .gitignore
    ├── dependencies/             # nats.c and EIPScanner clones
    └── example_cpp/              # Compiled C++ executable

How It Works

  1. Build scripts (scripts/):

    • build_nats.py: Clones and compiles nats.c -> libnats.so / nats.dll
    • build_eipscanner.py: Clones and compiles EIPScanner -> libEIPScanner.so / EIPScanner.dll
    • build_binding.py: Compiles the Python binding -> .so (Linux) / .pyd (Windows)
    • All copy binaries to src/eip2nats/lib/
  2. hatch build:

    • Packages the full src/eip2nats/ (code + binaries)
    • hatch_build.py forces platform-specific wheel tags
    • Linux: relative RPATH ($ORIGIN), Windows: os.add_dll_directory()
    • The wheel contains everything needed
  3. pip install:

    • Installs the wheel
    • Binaries end up in site-packages
    • Python loads libraries automatically
    • Works without system dependencies!

Advantages

vs System Libraries:

  • No sudo apt-get install required
  • No version conflicts
  • Portable across systems

vs Regular Wheels:

  • Includes all C/C++ dependencies
  • Single file to install
  • Works on systems without compilers

vs Docker:

  • Lighter (MBs vs GBs)
  • Direct Python integration
  • No Docker privileges required

API Reference

Class: EIPtoNATSBridge

bridge = eip2nats.EIPtoNATSBridge(
    plc_address: str,
    nats_url: str,
    nats_subject: str,
    use_binary_format: bool = True,
    config_assembly: int = 4,       # Configuration assembly instance
    o2t_assembly: int = 2,          # O2T data assembly instance
    t2o_assembly: int = 1,          # T2O data assembly instance
    t2o_size: int = 0,              # T2O connection size in bytes
    rpi: int = 2000,                # Requested Packet Interval (µs), applied to O2T and T2O
    port: int = 2222,               # Local UDP port for receiving I/O data
    connection_timeout_multiplier: int = 5,  # CIP timeout multiplier (0-7)
)

Methods:

  • start() -> bool: Starts the bridge
  • stop() -> None: Stops the bridge
  • is_running() -> bool: Bridge status
  • get_received_count() -> int: Messages from PLC
  • get_published_count() -> int: Messages to NATS
  • get_reconnect_count() -> int: Automatic EIP reconnections

NATS Message Format

Each message published to NATS contains the CIP sequence number prepended to the I/O data:

Binary format (use_binary_format=True, default):

[seq_lo] [seq_hi] [data_0] [data_1] ... [data_n]
  byte 0   byte 1   byte 2   byte 3       byte n+2
  • Bytes 0-1: CIP sequence number (uint16, little-endian)
  • Bytes 2+: Application data from the PLC

Decoding example in Python:

import struct

sequence = struct.unpack_from('<H', msg.data, 0)[0]
data = msg.data[2:]

JSON format (use_binary_format=False):

{"timestamp":1234567890,"sequence":42,"size":100,"data":"0a1b2c..."}

The sequence number is useful for detecting lost packets: if you receive sequence 100 followed by 102, one packet was lost.

Device Presets: eip2nats.devices

Pre-defined assembly constants for known EIP devices:

# RMC75E (Delta Computer Systems)
eip2nats.devices.RM75E.CONFIG_ASSEMBLY  # 4
eip2nats.devices.RM75E.O2T_ASSEMBLY     # 2
eip2nats.devices.RM75E.T2O_ASSEMBLY     # 1

# ClipX (HBK / Hottinger Brüel & Kjær)
eip2nats.devices.ClipX.CONFIG_ASSEMBLY  # 1
eip2nats.devices.ClipX.O2T_ASSEMBLY     # 101
eip2nats.devices.ClipX.T2O_ASSEMBLY     # 100

Troubleshooting

Error: "cannot open shared object file"

Even though the wheel includes the libraries, check RPATH:

ldd $(python -c "import eip2nats; print(eip2nats.__file__.replace('__init__.py', 'lib/eip2nats.*.so'))")

All dependencies should resolve locally.

Rebuild on Another System

git clone <repo>
cd eip2nats
python scripts/build_nats.py
python scripts/build_eipscanner.py
python scripts/build_binding.py
hatch build

Clean Builds

rm -rf build/ dist/ src/eip2nats/lib/

Changelog

v1.3.2 (2025)

  • Configurable connection timeout multiplier via connection_timeout_multiplier parameter (default: 5)

v1.3.1 (2025)

  • CIP sequence number prepended to NATS payload (binary: 2-byte LE prefix; JSON: sequence field)

v1.3.0 (2025)

  • Configurable UDP port for T2O data reception, enabling multiple parallel bridges
  • EIPScanner patched to include T2O_SOCKADDR_INFO in Forward Open request
  • Pinned EIPScanner dependency to known-good commit (12c89a5)
  • CPython 3.14 wheel build target

v1.2.0 (2025)

  • Configurable RPI (Requested Packet Interval) via constructor parameter
  • Added HBK ClipX device preset
  • Added ClipX examples (Python and C++)
  • Raspberry Pi build support

v1.0.0 (2025)

  • Initial release
  • Self-contained wheel with nats.c and EIPScanner
  • Windows (MSVC) and Linux (GCC) support
  • Binary and JSON format support
  • Thread-safe operations

Contributing

  1. Fork the project
  2. Create a branch (git checkout -b feature/amazing)
  3. Commit changes (git commit -m 'Add amazing feature')
  4. Push (git push origin feature/amazing)
  5. Open a Pull Request

License

MIT License - see LICENSE file

Credits

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

eip2nats-1.3.2-cp314-cp314-win_amd64.whl (433.9 kB view details)

Uploaded CPython 3.14Windows x86-64

eip2nats-1.3.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

eip2nats-1.3.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

eip2nats-1.3.2-cp313-cp313-win_amd64.whl (420.7 kB view details)

Uploaded CPython 3.13Windows x86-64

eip2nats-1.3.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

eip2nats-1.3.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

eip2nats-1.3.2-cp312-cp312-win_amd64.whl (420.7 kB view details)

Uploaded CPython 3.12Windows x86-64

eip2nats-1.3.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

eip2nats-1.3.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

eip2nats-1.3.2-cp311-cp311-win_amd64.whl (420.0 kB view details)

Uploaded CPython 3.11Windows x86-64

eip2nats-1.3.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

eip2nats-1.3.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

eip2nats-1.3.2-cp310-cp310-win_amd64.whl (418.8 kB view details)

Uploaded CPython 3.10Windows x86-64

eip2nats-1.3.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

eip2nats-1.3.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

eip2nats-1.3.2-cp39-cp39-win_amd64.whl (418.1 kB view details)

Uploaded CPython 3.9Windows x86-64

eip2nats-1.3.2-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

eip2nats-1.3.2-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

File details

Details for the file eip2nats-1.3.2-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: eip2nats-1.3.2-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 433.9 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: Hatch/1.16.3 cpython/3.12.3 HTTPX/0.28.1

File hashes

Hashes for eip2nats-1.3.2-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 9673b3532b1ac3ff559d318041923ba3c8c9f5df3c4047d3ea32843bab01473b
MD5 43b699c3ed30a975ee0375f27c595895
BLAKE2b-256 9fd740c136bb4d53bb3c310758a3449a0dcd5a008e186f1f76ffab5c49ee6570

See more details on using hashes here.

File details

Details for the file eip2nats-1.3.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for eip2nats-1.3.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 c17a08ab7dbf953e85cf726db59cc2a2efa376a535f0a0e5e147af1c4ad8be0f
MD5 3ca0d60fa800c755fbbfc5e3660f1ff7
BLAKE2b-256 d83f05bf6896ac68babdc91e4c9c25665b476d8e93b80cf8edb31346cb4d53c0

See more details on using hashes here.

File details

Details for the file eip2nats-1.3.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for eip2nats-1.3.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 2f6808e98f500059546e46e0b97dc60f9678dd78f65fe3ecb47a5019fa842c4c
MD5 d1bf8a930deff7edfe078ba32e9648e6
BLAKE2b-256 7950b9280e1343580207e9bb41099663c7249933d4080ba833312ef72b60c30e

See more details on using hashes here.

File details

Details for the file eip2nats-1.3.2-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: eip2nats-1.3.2-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 420.7 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: Hatch/1.16.3 cpython/3.12.3 HTTPX/0.28.1

File hashes

Hashes for eip2nats-1.3.2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 ebb0a4e2e2d2f7381ad9bfe22cea262700222051d3a0227ee537f9fd2e02d569
MD5 8e86a890b1588442ff5e10860bf57769
BLAKE2b-256 dd4b40a201cc4f77c2dba1397ed26d19d5e00ae8a47fe8bda8f4d66ff3667770

See more details on using hashes here.

File details

Details for the file eip2nats-1.3.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for eip2nats-1.3.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 bbd7b3b142ce8dfa4bed1cf2400393fdfd033bcec458b136ad8885291a7f265c
MD5 1760442236d79c9846bb9bbe0b1900b7
BLAKE2b-256 2fe285ab23da4f81bdb010b9e0d82c882198af67c5e6e20df48579c5596ad8d6

See more details on using hashes here.

File details

Details for the file eip2nats-1.3.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for eip2nats-1.3.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 6c1213066c45d6b901c40b605b64ca6b0178bfc4eea583c87b765264267180b4
MD5 b415dbe52841d7d422156d02972024e5
BLAKE2b-256 89a94e1af8804c0412dce389175d5ca5e34a3cd725d4714e109dd80151753ebc

See more details on using hashes here.

File details

Details for the file eip2nats-1.3.2-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: eip2nats-1.3.2-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 420.7 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: Hatch/1.16.3 cpython/3.12.3 HTTPX/0.28.1

File hashes

Hashes for eip2nats-1.3.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 c9e36e36f11bec17ef3b723cc1d00c6f33715a0f36e2cfacb2a4b4d3382e64b8
MD5 cf7c0227cac0c2ee28bc40207fd06e8b
BLAKE2b-256 489e0b39ae35edcab7cc57a5092357312da039e750ef0a11ca78651bcdcecc4c

See more details on using hashes here.

File details

Details for the file eip2nats-1.3.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for eip2nats-1.3.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 c9b3d58188963faa59651dfa61853dffd94fe89ba5e47c7d11357b54bff0803d
MD5 211a59de1312df7b50440b46bf6daa91
BLAKE2b-256 a47d779eebaa2c17d2efa337f7155736bc8610e5d7b3e2383fe855f11f2e42ba

See more details on using hashes here.

File details

Details for the file eip2nats-1.3.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for eip2nats-1.3.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 a05f7e47808516a127c3abe5090648a6d454daaccd0b077d3bb4bba174d2b51e
MD5 7820b0d4e8092e75292c382ca9723137
BLAKE2b-256 2e73a9b54342ad4abe57e0bdad101e9bf79a6c7ac0da3f85878184c9cb1f9e50

See more details on using hashes here.

File details

Details for the file eip2nats-1.3.2-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: eip2nats-1.3.2-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 420.0 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: Hatch/1.16.3 cpython/3.12.3 HTTPX/0.28.1

File hashes

Hashes for eip2nats-1.3.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 c8c51fd2c0e1b760befe8c946d8779231aa74bd2e88b95d94134dbb7ba75176c
MD5 34e1091505278bd6ebdbacaa95ebdddb
BLAKE2b-256 a088e470a0660fc7f78a1aa8d0f6aee6de985f9d1137cf1e118b0df7207304bc

See more details on using hashes here.

File details

Details for the file eip2nats-1.3.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for eip2nats-1.3.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 01452a2379b01f3815bf7c5f346708950634cb018313c031683b1dc1e546e157
MD5 ac26f9b8a9c22ae7131ccc9f5a92d08b
BLAKE2b-256 a2e572b9f98ef3843e9780376ad3233095f06e707def51fe067f9b4f1b7e4c9b

See more details on using hashes here.

File details

Details for the file eip2nats-1.3.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for eip2nats-1.3.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 747a29e6ca1fbbe3ebc5e8ae42bdb95b9b2f90c120c047dbab8940e47ee8c9ca
MD5 559aea2c618e0549806de57740383852
BLAKE2b-256 83e454e86e9f101af9e39398fa47aa9abe9cf103b5a5eb2e92a69966ccab59e2

See more details on using hashes here.

File details

Details for the file eip2nats-1.3.2-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: eip2nats-1.3.2-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 418.8 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: Hatch/1.16.3 cpython/3.12.3 HTTPX/0.28.1

File hashes

Hashes for eip2nats-1.3.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 464d0fbf8fcbb4cbcbe38236b014d726d68e839f0661cdab1fbdfa057806df31
MD5 051f7e6b4a332481222836aaa4eba5a8
BLAKE2b-256 944f89af2509fbe4b4e5c1c9963c6d3be1022beccdd4060a2e11742d951d9121

See more details on using hashes here.

File details

Details for the file eip2nats-1.3.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for eip2nats-1.3.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 23f12e8c7ec3c10870837a8a145e8b8809f3ed58c6d8461a208db72846c56e04
MD5 f6132b041b53f55b6a1a3ad4ecbdae61
BLAKE2b-256 a168310f24cbc6a825603d1c459685f83ab940b158a0ba41b78da0bf9686c8a4

See more details on using hashes here.

File details

Details for the file eip2nats-1.3.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for eip2nats-1.3.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 578848dd012a881fd0cb664e0c78c537c29e4fe9a5026d1f4dc01625b2b120a1
MD5 c9d06890a533c1669246413667aa1595
BLAKE2b-256 044db2ee887f0897f9d2bcd2ba27fac401e160d8e7479f9fd78cc081e42da0d5

See more details on using hashes here.

File details

Details for the file eip2nats-1.3.2-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: eip2nats-1.3.2-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 418.1 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: Hatch/1.16.3 cpython/3.12.3 HTTPX/0.28.1

File hashes

Hashes for eip2nats-1.3.2-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 eea1a2b6d9584f4f2690b362b8af6a2b6d73587b7e02bb6bb93aafd46c5799a2
MD5 6f9f93e7ce597c174fa5191ff80e844e
BLAKE2b-256 32bc3895567ef62f13af8963db3fcfb874b2572ed185216085f796e66fbe230a

See more details on using hashes here.

File details

Details for the file eip2nats-1.3.2-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for eip2nats-1.3.2-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 41455e50128bc053d9c54844eeeadb92a1fe16c6016078b391cbcf6111312141
MD5 69d8e775d697099965cc8df539b2fbb1
BLAKE2b-256 49d3a2a60c0c34c4ec1c0a2bbf09de4347ccc47961f8ebfd74335fcccdfd861d

See more details on using hashes here.

File details

Details for the file eip2nats-1.3.2-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for eip2nats-1.3.2-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 f4c826e8b099963530b7c211d04aff1b53976b93e6982498a6407b5fb4c5b85f
MD5 aa84cc42e717207bdbdb5438e85767ef
BLAKE2b-256 d8d635f949e030adfd35f385f89ceac97872630957dd19a8edb03f80841b8ca1

See more details on using hashes here.

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