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:
- Creates a virtual environment in
venv/ - Installs Hatch and pybind11
- Compiles nats.c, EIPScanner and the Python binding
- Creates the wheel
- 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
-
Build scripts (
scripts/):build_nats.py: Clones and compiles nats.c ->libnats.so/nats.dllbuild_eipscanner.py: Clones and compiles EIPScanner ->libEIPScanner.so/EIPScanner.dllbuild_binding.py: Compiles the Python binding ->.so(Linux) /.pyd(Windows)- All copy binaries to
src/eip2nats/lib/
-
hatch build:- Packages the full
src/eip2nats/(code + binaries) hatch_build.pyforces platform-specific wheel tags- Linux: relative RPATH (
$ORIGIN), Windows:os.add_dll_directory() - The wheel contains everything needed
- Packages the full
-
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 installrequired - 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 bridgestop() -> None: Stops the bridgeis_running() -> bool: Bridge statusget_received_count() -> int: Messages from PLCget_published_count() -> int: Messages to NATSget_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_multiplierparameter (default: 5)
v1.3.1 (2025)
- CIP sequence number prepended to NATS payload (binary: 2-byte LE prefix; JSON:
sequencefield)
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
- Fork the project
- Create a branch (
git checkout -b feature/amazing) - Commit changes (
git commit -m 'Add amazing feature') - Push (
git push origin feature/amazing) - Open a Pull Request
License
MIT License - see LICENSE file
Credits
- nats.c - NATS C Client
- EIPScanner - EtherNet/IP Library
- pybind11 - Python bindings
Metadata
Release files for eip2nats 1.3.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
Total release size: 21.3 MB
Release files / eip2nats-1.3.2-cp314-cp314-win_amd64.whl
| Download URL | eip2nats-1.3.2-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 433.9 kB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
9673b3532b1ac3ff559d318041923ba3c8c9f5df3c4047d3ea32843bab01473b
|
|
BLAKE2b-256 checksum How to use checksums |
9fd740c136bb4d53bb3c310758a3449a0dcd5a008e186f1f76ffab5c49ee6570
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
Hatch/1.16.3 cpython/3.12.3 HTTPX/0.28.1
|
Release files / eip2nats-1.3.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
| Download URL | eip2nats-1.3.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl |
|---|---|
| Size | 1.6 MB |
| Tags | CPython 3.14 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
c17a08ab7dbf953e85cf726db59cc2a2efa376a535f0a0e5e147af1c4ad8be0f
|
|
BLAKE2b-256 checksum How to use checksums |
d83f05bf6896ac68babdc91e4c9c25665b476d8e93b80cf8edb31346cb4d53c0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
Hatch/1.16.3 cpython/3.12.3 HTTPX/0.28.1
|
Release files / eip2nats-1.3.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
| Download URL | eip2nats-1.3.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl |
|---|---|
| Size | 1.5 MB |
| Tags | CPython 3.14 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
2f6808e98f500059546e46e0b97dc60f9678dd78f65fe3ecb47a5019fa842c4c
|
|
BLAKE2b-256 checksum How to use checksums |
7950b9280e1343580207e9bb41099663c7249933d4080ba833312ef72b60c30e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
Hatch/1.16.3 cpython/3.12.3 HTTPX/0.28.1
|
Release files / eip2nats-1.3.2-cp313-cp313-win_amd64.whl
| Download URL | eip2nats-1.3.2-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 420.7 kB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
ebb0a4e2e2d2f7381ad9bfe22cea262700222051d3a0227ee537f9fd2e02d569
|
|
BLAKE2b-256 checksum How to use checksums |
dd4b40a201cc4f77c2dba1397ed26d19d5e00ae8a47fe8bda8f4d66ff3667770
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
Hatch/1.16.3 cpython/3.12.3 HTTPX/0.28.1
|
Release files / eip2nats-1.3.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
| Download URL | eip2nats-1.3.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl |
|---|---|
| Size | 1.6 MB |
| Tags | CPython 3.13 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
bbd7b3b142ce8dfa4bed1cf2400393fdfd033bcec458b136ad8885291a7f265c
|
|
BLAKE2b-256 checksum How to use checksums |
2fe285ab23da4f81bdb010b9e0d82c882198af67c5e6e20df48579c5596ad8d6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
Hatch/1.16.3 cpython/3.12.3 HTTPX/0.28.1
|
Release files / eip2nats-1.3.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
| Download URL | eip2nats-1.3.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl |
|---|---|
| Size | 1.5 MB |
| Tags | CPython 3.13 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
6c1213066c45d6b901c40b605b64ca6b0178bfc4eea583c87b765264267180b4
|
|
BLAKE2b-256 checksum How to use checksums |
89a94e1af8804c0412dce389175d5ca5e34a3cd725d4714e109dd80151753ebc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
Hatch/1.16.3 cpython/3.12.3 HTTPX/0.28.1
|
Release files / eip2nats-1.3.2-cp312-cp312-win_amd64.whl
| Download URL | eip2nats-1.3.2-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 420.7 kB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
c9e36e36f11bec17ef3b723cc1d00c6f33715a0f36e2cfacb2a4b4d3382e64b8
|
|
BLAKE2b-256 checksum How to use checksums |
489e0b39ae35edcab7cc57a5092357312da039e750ef0a11ca78651bcdcecc4c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
Hatch/1.16.3 cpython/3.12.3 HTTPX/0.28.1
|
Release files / eip2nats-1.3.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
| Download URL | eip2nats-1.3.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl |
|---|---|
| Size | 1.6 MB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
c9b3d58188963faa59651dfa61853dffd94fe89ba5e47c7d11357b54bff0803d
|
|
BLAKE2b-256 checksum How to use checksums |
a47d779eebaa2c17d2efa337f7155736bc8610e5d7b3e2383fe855f11f2e42ba
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
Hatch/1.16.3 cpython/3.12.3 HTTPX/0.28.1
|
Release files / eip2nats-1.3.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
| Download URL | eip2nats-1.3.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl |
|---|---|
| Size | 1.5 MB |
| Tags | CPython 3.12 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
a05f7e47808516a127c3abe5090648a6d454daaccd0b077d3bb4bba174d2b51e
|
|
BLAKE2b-256 checksum How to use checksums |
2e73a9b54342ad4abe57e0bdad101e9bf79a6c7ac0da3f85878184c9cb1f9e50
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
Hatch/1.16.3 cpython/3.12.3 HTTPX/0.28.1
|
Release files / eip2nats-1.3.2-cp311-cp311-win_amd64.whl
| Download URL | eip2nats-1.3.2-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 420.0 kB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
c8c51fd2c0e1b760befe8c946d8779231aa74bd2e88b95d94134dbb7ba75176c
|
|
BLAKE2b-256 checksum How to use checksums |
a088e470a0660fc7f78a1aa8d0f6aee6de985f9d1137cf1e118b0df7207304bc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
Hatch/1.16.3 cpython/3.12.3 HTTPX/0.28.1
|
Release files / eip2nats-1.3.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
| Download URL | eip2nats-1.3.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl |
|---|---|
| Size | 1.6 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
01452a2379b01f3815bf7c5f346708950634cb018313c031683b1dc1e546e157
|
|
BLAKE2b-256 checksum How to use checksums |
a2e572b9f98ef3843e9780376ad3233095f06e707def51fe067f9b4f1b7e4c9b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
Hatch/1.16.3 cpython/3.12.3 HTTPX/0.28.1
|
Release files / eip2nats-1.3.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
| Download URL | eip2nats-1.3.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl |
|---|---|
| Size | 1.5 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
747a29e6ca1fbbe3ebc5e8ae42bdb95b9b2f90c120c047dbab8940e47ee8c9ca
|
|
BLAKE2b-256 checksum How to use checksums |
83e454e86e9f101af9e39398fa47aa9abe9cf103b5a5eb2e92a69966ccab59e2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
Hatch/1.16.3 cpython/3.12.3 HTTPX/0.28.1
|
Release files / eip2nats-1.3.2-cp310-cp310-win_amd64.whl
| Download URL | eip2nats-1.3.2-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 418.8 kB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
464d0fbf8fcbb4cbcbe38236b014d726d68e839f0661cdab1fbdfa057806df31
|
|
BLAKE2b-256 checksum How to use checksums |
944f89af2509fbe4b4e5c1c9963c6d3be1022beccdd4060a2e11742d951d9121
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
Hatch/1.16.3 cpython/3.12.3 HTTPX/0.28.1
|
Release files / eip2nats-1.3.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
| Download URL | eip2nats-1.3.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl |
|---|---|
| Size | 1.6 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
23f12e8c7ec3c10870837a8a145e8b8809f3ed58c6d8461a208db72846c56e04
|
|
BLAKE2b-256 checksum How to use checksums |
a168310f24cbc6a825603d1c459685f83ab940b158a0ba41b78da0bf9686c8a4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
Hatch/1.16.3 cpython/3.12.3 HTTPX/0.28.1
|
Release files / eip2nats-1.3.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
| Download URL | eip2nats-1.3.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl |
|---|---|
| Size | 1.5 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
578848dd012a881fd0cb664e0c78c537c29e4fe9a5026d1f4dc01625b2b120a1
|
|
BLAKE2b-256 checksum How to use checksums |
044db2ee887f0897f9d2bcd2ba27fac401e160d8e7479f9fd78cc081e42da0d5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
Hatch/1.16.3 cpython/3.12.3 HTTPX/0.28.1
|
Release files / eip2nats-1.3.2-cp39-cp39-win_amd64.whl
| Download URL | eip2nats-1.3.2-cp39-cp39-win_amd64.whl |
|---|---|
| Size | 418.1 kB |
| Tags | CPython 3.9 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
eea1a2b6d9584f4f2690b362b8af6a2b6d73587b7e02bb6bb93aafd46c5799a2
|
|
BLAKE2b-256 checksum How to use checksums |
32bc3895567ef62f13af8963db3fcfb874b2572ed185216085f796e66fbe230a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
Hatch/1.16.3 cpython/3.12.3 HTTPX/0.28.1
|
Release files / eip2nats-1.3.2-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
| Download URL | eip2nats-1.3.2-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl |
|---|---|
| Size | 1.6 MB |
| Tags | CPython 3.9 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
41455e50128bc053d9c54844eeeadb92a1fe16c6016078b391cbcf6111312141
|
|
BLAKE2b-256 checksum How to use checksums |
49d3a2a60c0c34c4ec1c0a2bbf09de4347ccc47961f8ebfd74335fcccdfd861d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
Hatch/1.16.3 cpython/3.12.3 HTTPX/0.28.1
|
Release files / eip2nats-1.3.2-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
| Download URL | eip2nats-1.3.2-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl |
|---|---|
| Size | 1.5 MB |
| Tags | CPython 3.9 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
f4c826e8b099963530b7c211d04aff1b53976b93e6982498a6407b5fb4c5b85f
|
|
BLAKE2b-256 checksum How to use checksums |
d8d635f949e030adfd35f385f89ceac97872630957dd19a8edb03f80841b8ca1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
Hatch/1.16.3 cpython/3.12.3 HTTPX/0.28.1
|