Skip to content
CAI
Software that uses CAICheck a score

priestjim/gen_rpc

51.8

Weak · 2 October 2026

2k

lines of production code

Erlang

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a scalable remote procedure call (RPC) library for Erlang/OTP applications, designed to facilitate communication between distributed nodes. It provides core client and server components that support both plain TCP and encrypted SSL transports, enabling calls, casts, and broadcasts across a cluster. The library features per-key sharding for managing multiple connections and includes a comprehensive test suite to validate its distributed functionality.

Features

Added SSL/TLS certificate assets for secure communication

The priv/ssl directory now includes a complete set of cryptographic assets required for SSL support, including a self-signed Certificate Authority (ca.cert.pem, ca.key.pem), Diffie-Hellman parameters (dhparam.pem), and specific certificate/key pairs for the gen\_rpc master and slave nodes (gen\_rpc\_master@127.0.0.1 and gen\_rpc\_slave@127.0.0.1). These files enable the application to establish encrypted connections for remote procedure calls.

priv · high confidence

Initial release of gen\_rpc with TCP and SSL transport drivers

This change introduces the initial working version of the gen\_rpc library, providing a scalable RPC framework for Erlang/OTP applications. It adds core client and server components, including a gen\_statem-based acceptor for handling incoming connections and a gen\_server-based client for outgoing calls. The library supports both plain TCP and SSL transports via dedicated driver modules (gen\_rpc\_driver\_tcp and gen\_rpc\_driver\_ssl), enabling secure remote procedure calls, casts, and broadcast operations across a cluster.

src · high confidence

Behavioural changes

Introduction of standardized include files for configuration and types

This change introduces a new set of Erlang header files (app.hrl, guards.hrl, ssl.hrl, tcp.hrl, types.hrl) that centralize default options and type definitions. Users benefit from consistent default TCP and SSL socket configurations (such as keepalive, nodelay, and cipher suites) and reusable guard macros for validation, which standardize how the library handles network connections and data types across the application.

include · high confidence

New TCP and SSL server architecture with dedicated supervisors

The system now uses a new supervision tree to manage TCP and SSL server connections. A new root supervisor (gen\_rpc\_sup) starts permanent workers for TCP and SSL servers, alongside supervisors for acceptors and clients. This allows for better management of server processes and client connections, improving stability and resource handling.

src/supervisor · high confidence

gen\_rpc 2.0.0: Major refactor with Erlang 19+ requirement, SSL support, and per-key sharding

This release introduces a significant architectural overhaul of the gen\_rpc library. The server and acceptor finite state machines have been converted from gen\_fsm to gen\_statem, which requires a minimum Erlang/OTP version of 19.1 and drops support for older releases. New features include SSL support for secure inter-node communication, per-key sharding to allow multiple connections per node using arbitrary keys, and module version control to restrict RPC calls to specific module versions. Additionally, the library now uses the \hut\ logging backend instead of \lager\ for better Elixir compatibility, and ports are no longer dynamically assigned, favoring static port listeners to reduce supervision complexity.

(repo-wide) · high confidence

Test coverage

Add Common Test configuration header; Added Docker-based integration test infrastructure; Added comprehensive Common Test suites for gen\_rpc functionality; Added test infrastructure for gen\_rpc SSL and TCP configurations.

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 50 → 52 (+1.5)
  • Rubric changed (rubric-2026.09.12 → rubric-2026.09.18) — scores are not directly comparable.

Lenses

  • Code Health 100 → 100 (+0.0)
  • Architecture 96 → 100 (+4.2)
  • Maturity 55 → 55 (+0.0)
  • Readiness 33 → 33 (+0.0)
  • Security 57 → 66 (+8.5)

Resolved (3)

  • Change coupling: gen_rpc_client.erl ↔ gen_rpc_server.erl (src/gen_rpc_client.erl)
  • Coverage not measured — no coverage collector is wired up
  • Orphaned knowledge (src/gen_rpc_client.erl)

New (2)

  • Dependency hygiene PARTLY measured — rebar3 pinning read, dependency currency not (no rebar.lock-pinned Hex declaration to grade)
  • No dependency lockfile committed (rebar.config)

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

priestjim/gen_rpc 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 2 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 6e17cac4e886f36ecb35bbda91e6bb3293aaa723 — the exact code this score is about.
  • Scored under rubric-2026.09.18 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-e569280dd5e2.