Skip to content
CAI
Software that uses CAICheck a score

hdima/erlport

51.9

Weak · 23 September 2026

4.7k

lines of production code

Python

with Erlang, Ruby

5

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

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.