Skip to content
CAI
Software that uses CAICheck a score

openx/ox-thrift

59.7

Adequate · 17 September 2026

2.6k

lines of production code

Erlang

primary language

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

This system is an Erlang library implementing the Apache Thrift RPC protocol, providing both client and server components for high-performance remote procedure calls. It supports binary and compact protocols, manages TCP connections via a socket pool built on Ranch, and includes configuration options for timeouts, message sizes, and data structures. The library also features a test suite validating protocol encoding, field handling, and client integration.

Features

Initial release of OX Thrift library

This entry introduces the OX Thrift library, a high-performance Erlang implementation of the Apache Thrift RPC protocol. The package includes the core client and server modules, a socket connection pool, and support for both binary and compact protocols. It is built using rebar3 and depends on the Ranch network acceptor pool (version 1.7.1). The release also includes documentation on the message protocol, a BSD 3-Clause license, and build configuration files.

(repo-wide) · high confidence

Initial release of ox\_thrift server configuration and types

This change introduces the \ox\_thrift.hrl\ header file, defining the core data structures and options for the ox\_thrift server. It establishes the \ox\_thrift\_config\ record, which specifies the service module, handler module, and an optional protocol module (defaulting to auto-detection between binary and compact protocols if unset). The configuration also supports options for receive timeouts, map module selection (\dict\ or \maps\), maximum message size, stats collection modules, and process spawn options. Additionally, it defines the \ox\_thrift\_option\ type and constants for application exception types.

include · high confidence

Initial release of the ox\_thrift Erlang Thrift client and server library

This change introduces the core ox\_thrift library, providing a complete Thrift implementation for Erlang. It includes a client module (ox\_thrift\_client) for making RPC calls, a server module (ox\_thrift\_server) built on Ranch for handling incoming requests, and a connection pool (ox\_thrift\_socket\_pool) for managing TCP connections. The library supports both binary and compact Thrift protocols, allows configuration of map modules (dict or maps), and enables receive timeouts and maximum message sizes for both client and server operations.

src · high confidence

Test coverage

Added test suite for Thrift encoding, skipping, and shackle client integration

Added EUnit tests in the test directory to verify Thrift binary and compact protocol encoding round-trips, handling of skipped/missing fields, and integration with the shackle client pool. The test suite includes a direct transport for in-process server calls and a socket transport for network-based tests, covering service operations like add\_one, sum\_ints, and exception handling.

test · high confidence

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

Baseline

  • First survey — no prior run to compare against. CAI 60.

Lenses

  • Code Health 95
  • Architecture 100
  • Maturity 48
  • Readiness 68
  • Security 60

Changes since last survey

  • 155 commits — 140 feature/other, 15 fixes

By area

  • (root) — 87 commits
  • src/ox_thrift_socket_pool.erl — 18 commits
  • src/ox_thrift_protocol.hrl — 13 commits
  • test/ox_thrift_tests.erl — 7 commits
  • src/ox_thrift_internal.hrl — 4 commits
  • src/ox_thrift_protocol_binary.erl — 4 commits
  • src/ox_thrift_server.erl — 3 commits
  • fw-pkgin/config — 2 commits
  • src/ox_thrift_protocol_compact.erl — 2 commits
  • test/skip.thrift — 2 commits
  • (repo) — 1 commit
  • .devcontainer/Dockerfile — 1 commit
  • .github/workflow — 1 commit
  • .github/workflows — 1 commit
  • include/ox_thrift.hrl — 1 commit
  • src/ox_thrift_client.erl — 1 commit
  • src/ox_thrift_reconnecting_socket.erl — 1 commit
  • src/test.erl — 1 commit
  • test/Makefile — 1 commit
  • test/ox_thrift_binary_tests.erl — 1 commit

Notable commits

  • fix: Add client library and fix exception support.
  • fix: Fix bug in ServiceModule:function_info call for oneway functions.
  • fix: Fix compilation under Erlang 18. Version 0.5.1.
  • fix: Fix declaration of {map_module, maps} in ox_thrift_option type. Version 0.10.4.
  • fix: Fix ox_thrift_client's handling of closed connections.
  • fix: Fix proplist_as_map_test unit test warning.
  • fix: Fix skipping of unknown structs. Version 0.13.0.
  • fix: Revert "ox_thrift_socket_pool: Do selective receive of checkin when idle queue is empty."
  • fix: Revert "ox_thrift_socket_pool: Remove the monitor queue added in version 0.11.2.1."
  • fix: Unit tests for unknown throw reason fix. Version 0.10.5.
  • fix: ox_thrift_server: Fix handling of oneway void functions that throw an exception.
  • fix: ox_thrift_socket_pool: Fix a bug in remaining_async_opens accounting.
  • fix: ox_thrift_socket_pool: Fix occasional transient unit test failure.
  • fix: ox_thrift_socket_pool: Fix remaining_async_opens accounting.
  • fix: ox_thrift_socket_pool: Fix unit tests for OpenX DNS changes.
  • change: APPS-13779: Add encode_record and decode_record functions. Version 0.6.0.
  • change: Add LastId argument to write_field_begin and read_field_begin to support compact binary.
  • change: Add a max_age_jitter_ms option to ox_thrift_socket_pool. Version 0.18.0.
  • change: Add a max_message_size option to ox_thrift_server. Version 0.11.0.
  • change: Add actions to test PRs
  • …and 135 more

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

Survey your own repository

openx/ox-thrift 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 17 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 ef318c5f01fef63aea576bed386eba17d8f8e14b — the exact code this score is about.
  • Scored under rubric-2026.09.13 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-d1ef6c0bd534.