hdima/erlport
51.9
Weak · 23 September 2026
4.7k
lines of production code
Python
with Erlang, Ruby
5
measurements over time
What this system is
ErlPort is a library that enables communication between Erlang and external processes running Python 2/3 or Ruby 1.8/1.9. It provides a bridge for inter-process messaging, allowing Erlang nodes to call methods and exchange data with scripts in these languages via standard input/output redirection. The system includes comprehensive test suites to verify the correctness of term encoding, decoding, and error handling across all supported language versions.
Features
Add Python 3 support to ErlPort
The ErlPort library now includes a complete Python 3 implementation, providing full compatibility with Python 3 environments. This update introduces a new \erlang.py\ module that handles message handling, encoding, and decoding for Python 3, alongside updated \erlproto.py\ and \erlterms.py\ modules to support the Python 3 runtime. Additionally, a new \stdio.py\ module enables redirection of standard input and output streams for Python 3 processes, allowing for more robust interaction between Erlang and Python 3 applications.
priv/python3/erlport · high confidence
Add Ruby 1.8/1.9 port implementation with message ID support
The ErlPort library now includes a complete Ruby 1.8/1.9 implementation, providing a new CLI entry point and supporting message IDs to handle concurrent calls. This update introduces a command-line interface for the Ruby port, adds \self()\ and \make\_ref()\ functions to the Erlang module, and implements a custom endcoding/decoding mechanism for Ruby, enabling more robust communication between Erlang and Ruby processes.
priv/ruby1.8/erlport · high confidence
Add Ruby 1.9 support for ErlPort
The ErlPort library now supports Ruby 1.9, enabling communication with Erlang using that Ruby version. This includes a new implementation file (erlterms.rb) that handles Erlang external term format decoding and encoding, along with specific handling for Unicode characters and symbols in Ruby 1.9.
priv/ruby1.9/erlport · high confidence
Added documentation overview and build configuration
Added a new documentation overview page (overview.edoc) that includes author, copyright, version, and title metadata. Additionally, a .gitignore file was added to the doc directory to exclude generated HTML, PNG, CSS, and edoc-info files from version control.
doc · high confidence
Introduce Python 2 implementation of ErlPort
The ErlPort library now includes a complete Python 2 implementation, adding modules for the Erlang port protocol, term encoding/decoding, and CLI options. This enables Python 2 scripts to communicate with Erlang nodes via standard input/output redirection, supporting features like message IDs, call/cast operations, and custom encoders/decoders.
priv/python2/erlport · high confidence
Removals
Removal of legacy Erlang port protocol implementation
The \erlport\ package has removed its internal implementation of the Erlang external term format and port protocol. Specifically, the \erlterms.py\ and \erlproto.py\ modules, along with their associated documentation and test files, have been deleted. This eliminates the built-in support for encoding and decoding Erlang terms and managing port communication, meaning users relying on this internal protocol handling will need to use an external library or alternative approach for Erlang interop.
src/erlport · high confidence
Architecture
Project structure and build system overhaul
The project has been redesigned as an Erlang application with a new Makefile-based build system, replacing the previous setup. This includes adding a \Makefile\ with targets for compilation, testing, and release, along with helper scripts (\get\_versions\, \print\_versions\, \runtest\, \testall\, \release\, \releaseall\) to manage multi-version testing across different Erlang, Python, and Ruby environments. The repository now includes an \AUTHORS\ file, a \CONTRIBUTORS\ file, a \LICENSE\ file, and a \dialyzer.ignore\ file for static analysis warnings. The old \setup.py\ for Python packaging has been removed, and the \.gitignore\ has been updated to reflect the new build artifacts and directories.
(repo-wide) · high confidence
Behavioural changes
Add Ruby 1.8 compatibility layer for ErlPort
A new Ruby 1.8-specific implementation of the ErlPort term encoding/decoding logic has been added to support older Ruby versions. This change introduces a dedicated code path for Ruby 1.8, ensuring that the library functions correctly on that specific runtime version.
ruby · medium confidence
Added Erlang application metadata for erlport
A new .app file was added to the ebin directory, defining the erlport application with version 0.9.8 and listing its modules (erlport, erlport\_options, erlport\_utils, python, python\_options, ruby, ruby\_options) and dependencies (kernel, stdlib).
ebin · high confidence
Refactored ErlPort core and language interfaces to support named instances and improved error handling
The ErlPort library has been refactored to support named instances for both Python and Ruby interfaces, allowing them to be registered with local or global names via the \start\ and \start\_link\ functions. The core \erlport\ module now handles message passing and timeout management more robustly, with improved error propagation and a unified exception format. Additionally, the codebase has been reorganized to extract option parsing into dedicated modules (\erlport\_options\, \python\_options\, \ruby\_options\) and utility functions (\erlport\_utils\), improving maintainability and clarity.
src · high confidence
Test coverage
Add Python 3 test suite for Erlang/OTP; Added Python 2 integration tests; Added Python 2 test suite for Erlport; Added Ruby 1.8 test suite for ErlPort; Added Ruby 1.8 test suite for ErlPort integration; Added Ruby 1.9 test suite and utilities; Added unit tests for Erlang term encoding and decoding; Expanded test coverage for Python and Ruby integration.
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 45 → 52 (+7.1)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 92 (new)
- Architecture 100 → 100 (+0.0)
- Maturity 35 → 28 (-7.4)
- Readiness 26 → 52 (+26.8)
- Security 95 → 95 (+0.0)
Resolved (6)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- No exposed public API
- Test reliability not included
- complexity unreadable for .erl, .hrl, .py, .rb — churn × complexity hotspots could not be measured
- dormant codebase — no living knowledge left to concentrate
New (38)
- Coverage not measured — no coverage collector is wired up
- Documentation: no installation or build instructions (README.rst)
- Documentation: no usage examples (README.rst)
- Duplicated block (10 lines × 2) (src/python_options.erl)
- Duplicated block (11 lines × 2) (src/python.erl)
- Duplicated block (12 lines × 2) (src/python.erl)
- Duplicated block (5 lines × 2) (src/python_options.erl)
- ErlTerm.decode_term (cognitive 65) (priv/ruby1.8/erlport/erlterms.rb)
- ErlTerm.decode_term (cognitive 65) (priv/ruby1.9/erlport/erlterms.rb)
- ErlTerm.decode_term (cyclomatic 40) (priv/ruby1.9/erlport/erlterms.rb)
- ErlTerm.decode_term (cyclomatic 41) (priv/ruby1.8/erlport/erlterms.rb)
- ErlTerm.encode_term (cognitive 34) (priv/ruby1.8/erlport/erlterms.rb)
- ErlTerm.encode_term (cognitive 34) (priv/ruby1.9/erlport/erlterms.rb)
- ErlTerm.encode_term (cyclomatic 32) (priv/ruby1.9/erlport/erlterms.rb)
- ErlTerm.encode_term (cyclomatic 33) (priv/ruby1.8/erlport/erlterms.rb)
- Erlang._receive (cognitive 21) (priv/ruby1.8/erlport/erlang.rb)
- HackComment (priv/python2/erlport/erlterms.py)
- HackComment (priv/python2/erlport/erlterms.py)
- HackComment (priv/python3/erlport/erlterms.py)
- HackComment (priv/python3/erlport/erlterms.py)
- …and 18 more
Architecture
- Unchanged — 0 containers · 1 contexts · 0 edges
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
hdima/erlport was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 23 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 246b7722d62b87b48be66d9a871509a537728962 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-955b9cee9818.