erldistpy
Native Python client for our Erlang distribution protocol. Talk Erlang/Elixir nodes from CPython without HTTP shim layers.
Built to swap into Python web apps as a drop-in for HTTP wallet-bridge
clients (see unfeed's
WalletTransport and make_post_sell's crypto watcher) so they can call
Elixir gen_server processes over native Erlang dist instead of JSON-RPC
or HTTPS. Same call semantics, lower latency, fewer moving parts.
Install
pip install erldistpy
Quick start
from erldistpy import Node, Atom
with Node(
our_name="myapp@host",
peer_name="wallet", # short EPMD name
peer_host="wallet.example.com",
cookie="SHARED_COOKIE", # read from a file path, never inline
) as node:
reply = node.call(
"Elixir.Wallet.Service",
(Atom("monero"), Atom("get_height"), []),
timeout=5.0,
)
# reply is whatever the gen_server returned — atoms / binaries /
# tuples / maps / lists / pids / refs decode to Python natives.
For TLS dist (Erlang inet_tls_dist):
from erldistpy import Node, make_dist_tls_context
ctx = make_dist_tls_context(
cert="/etc/myapp/client.pem",
key="/etc/myapp/client.key",
ca="/etc/myapp/ca.pem",
)
node = Node(our_name=..., peer_name=..., cookie=..., tls_context=ctx)
Scope
- ETF (External Term Format) codec — encode/decode Erlang terms
- EPMD client — node name → port lookup
- v6 distribution handshake — MD5 cookie auth, version negotiation
gen_callto registered processes on a remote node- TLS dist support (Erlang
inet_tls_dist)
Out of scope: full Erlang node impersonation, link/monitor lifecycles, distributed Mnesia. We are a client, not a peer node.
Why not Pyrlang?
Pyrlang implements a full asyncio Erlang node. Heavy, asyncio-first,
complex. erldistpy is a small synchronous client that fits behind the
same Protocol surface as httpx. Different shape, different audience.
Development
make bootstrap # create venv, install editable + dev deps
make test # run pytest (122 tests)
make lint # ruff check
make build # build sdist + wheel into dist/
make dist-check # twine check dist/*
See docs/ROADMAP.md for the phase-by-phase build log.
License
Unlicense (public domain).
Release files for erldistpy 0.1.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| erldistpy-0.1.7.tar.gz | 28.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| erldistpy-0.1.7-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 49.0 kB
Release files / erldistpy-0.1.7.tar.gz
| Download URL | erldistpy-0.1.7.tar.gz |
|---|---|
| Size | 28.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
343c88a689727e13b6d90372fec39a0ce384e2ccc3c820b4be4d1d718234fa39
|
|
BLAKE2b-256 checksum How to use checksums |
b508825dc0d4a57ac6db267d05d0cd156ec2f5c8d40ac6551e6ff8aabc44985a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|
Release files / erldistpy-0.1.7-py3-none-any.whl
| Download URL | erldistpy-0.1.7-py3-none-any.whl |
|---|---|
| Size | 20.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
06112b3a81e773c019ef4c0bcf2258e91f2a88ebc77f1e2411177e3449b62443
|
|
BLAKE2b-256 checksum How to use checksums |
434ba44e06e73d529f361bf746c5a47ad04cb1bf6b9646b41b2bf49f805d1e95
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|