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
)

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.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.1-cp314-cp314-win_amd64.whl (433.7 kB view details)

Uploaded CPython 3.14Windows x86-64

eip2nats-1.3.1-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.1-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.1-cp313-cp313-win_amd64.whl (420.5 kB view details)

Uploaded CPython 3.13Windows x86-64

eip2nats-1.3.1-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.1-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.1-cp312-cp312-win_amd64.whl (420.5 kB view details)

Uploaded CPython 3.12Windows x86-64

eip2nats-1.3.1-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.1-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.1-cp311-cp311-win_amd64.whl (419.7 kB view details)

Uploaded CPython 3.11Windows x86-64

eip2nats-1.3.1-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.1-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.1-cp310-cp310-win_amd64.whl (418.6 kB view details)

Uploaded CPython 3.10Windows x86-64

eip2nats-1.3.1-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.1-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.1-cp39-cp39-win_amd64.whl (417.8 kB view details)

Uploaded CPython 3.9Windows x86-64

eip2nats-1.3.1-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.1-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.1-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: eip2nats-1.3.1-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 433.7 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-httpx/0.28.1

File hashes

Hashes for eip2nats-1.3.1-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 a1f910a6d7cbf288cefb45815a60544a02ddadcc4859954d83695b97cdf8db7b
MD5 74048cf48c35479b1bf2ed6d4537ff8c
BLAKE2b-256 23e272d0bad93fb7b5bf119eb299903188fdb7c3a7454855a32e689121c3404d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eip2nats-1.3.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 62c2d61ec367d358f21823f3aab9ae18a92d51c732b54cafb97042155ec5139b
MD5 3ef81805bd34fde7913a5c2cc746ff54
BLAKE2b-256 b13539b2b7b493d56b6b5e40dbd7b35e804e953875bb1324c54a6ce117963e9f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eip2nats-1.3.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 3a90539859be8257a048e81dbdecf463cfe95dd3fb3b29984eaf493360ddb8c8
MD5 b251b7f7be6856022e3a648795cc705c
BLAKE2b-256 efe2ec428f510a2dc55cede75b102421830fdd38ae0e2bc1509aa3150cddc61d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: eip2nats-1.3.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 420.5 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-httpx/0.28.1

File hashes

Hashes for eip2nats-1.3.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 ad9b0eca815d955b3c70d12d12f63e6eb3b9bcd2dda1076cfe17fa07ca82da1d
MD5 482833be7afd9588beb65d0ddfabbbda
BLAKE2b-256 4470b620cc786a5937b8d049d2d4d2780591e299c1b989a7682a89f12177628a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eip2nats-1.3.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 812da4f04ddacca86525908034f808817e1c64898596a35d94361af73ff0f556
MD5 6cbbf60ce8d5991fe702538111ddd393
BLAKE2b-256 749200476f14f081526e4c7679bdbdfb57223b8a5efdbbefedd6a181cdcfea9c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eip2nats-1.3.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 56a5b5b8ee1768479f47d803d4e26d73e6bb10473a76887a9ea3bf009abe06e2
MD5 cda9c72a3f739a1dc3a6203305c200c0
BLAKE2b-256 cb511779459f9f114c12f3f1bfb6ba036f930a2dfdb7064e127f76a45477852f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: eip2nats-1.3.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 420.5 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-httpx/0.28.1

File hashes

Hashes for eip2nats-1.3.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 44cf499c5ae9026bb1f11e64dcd7da6fe3e46674a5e5abdb20b4d08fd68f459e
MD5 2c8ced263a8fa28e6ecf65da890a13b3
BLAKE2b-256 cbca07f28631505b7e60cd3718f3c2f47564b3e1b6af9dbf5c432538da78b761

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eip2nats-1.3.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 1108952d71dc11ead5bed49fbb45a9f01d0dbe8f288d6fe52dd4bf9bbbccddf6
MD5 8b064b14e3ebbcbe39de1e53e6dbf4bd
BLAKE2b-256 b3a04c2281d4c0ae4d1119dc9bb35ec4fa3e2bb1f83326a17795a935a3e7e800

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eip2nats-1.3.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 c942429e2c701d1ee7c112b3b8cafef98948ee5e8a569d6045f933c8bc48576d
MD5 b0e08269e63a7a9bfa6230ad66209f19
BLAKE2b-256 6f74f6adef321d2d30efcab23a558bd3c983eae16f73244c79935b8367171077

See more details on using hashes here.

File details

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

File metadata

  • Download URL: eip2nats-1.3.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 419.7 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-httpx/0.28.1

File hashes

Hashes for eip2nats-1.3.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 87aa3a0d3d0c757961ae3081d52b4f2fb2d77e06d0fd1b26c2ef7adc3efdb5f7
MD5 d8207b5cb004a2e600854131a5792653
BLAKE2b-256 231b30d8871a2bf726a290eda91a5aad7e584a819be1c35930a9d125133bcc4b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eip2nats-1.3.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 167a8b14e4b88e0bbc814c1eeb0b435a9fb8b8017f1781f371ff600027eb7166
MD5 bd4cc47d6cb6738b6148b681561e8701
BLAKE2b-256 915eee07f3ec6403ff3b15bb937c862c2b60d90de9c4bb793f7911264f0527c4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eip2nats-1.3.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 c32b418e76b90d07caa81e49e139724c6b049db4a6bcaa10415f34ec13a497b7
MD5 521cdd03096e6dd251d8b92d48654854
BLAKE2b-256 bbd2f8ca9839047f0c158aee551cf71b284b89ae8a249ded74a858a2e1d171ec

See more details on using hashes here.

File details

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

File metadata

  • Download URL: eip2nats-1.3.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 418.6 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-httpx/0.28.1

File hashes

Hashes for eip2nats-1.3.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 a5a84d6d6ac9ea743844bd46a83bcd4476fdac938f25a14eab0ce96b6f75e14c
MD5 64453ee49cc9df422e054f495d2f7508
BLAKE2b-256 dbd43ec8aff9a593c1e97e0c5d203918b53f934a3fb2cfe50d738c173a03550d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eip2nats-1.3.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 96249473b6aecc3e6dcf3254650e8eff43ee62be4f489a9039dbbc2183bfa351
MD5 3ee6327da8e43543cd9145304b80ba07
BLAKE2b-256 fd802bbec0bc9947fd575f38ecd9baa1e7fe9460a25d316d1cebf0d077fa4a7a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eip2nats-1.3.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 4328305f4972fd04a9e51699dfc2e520ab2239d6f7d924eab7968e529a3295ec
MD5 601becf80ca501da40e2b742fd6bfc1b
BLAKE2b-256 2536557f926c8c8934267e8cc90afe27af546968905a56a052eb3510daaf9ee6

See more details on using hashes here.

File details

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

File metadata

  • Download URL: eip2nats-1.3.1-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 417.8 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-httpx/0.28.1

File hashes

Hashes for eip2nats-1.3.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 6c5d0053939e52e5f06ef666023028e9245818f1404c877a92e2b8d47f837167
MD5 eca180676efbe0047fd49ca43f51e5e1
BLAKE2b-256 d691affd94a8d7f4641595a0585e7420c391d881d366d2475f9c42f25d1f1a7e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eip2nats-1.3.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 fb70ba1b856b1bf1942a21df4ab64ca013f2bb34e87a0a7f51b57ad62fe93286
MD5 d194996290500c611f16bfd1cf5b5783
BLAKE2b-256 3c3dac19e1e6f74080ac765909c892d29379895d57ff8f209cc8b98985713541

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eip2nats-1.3.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 e511a4202f94176a91c3179014d1c4e4b6206a789513494f02b62d726af50436
MD5 11f845ae0f43d204d2cb70d9163803d1
BLAKE2b-256 68d94be8bf9de4e38357d48173e79911fa2b9ba6e8f5a6b838edf3ce740fb862

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