Skip to content
CAI
Software that uses CAICheck a score

whatyouhide/redix

70.0

Strong · 23 September 2026

6.6k

lines of production code

Elixir

primary language

5

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a Redis client library for Elixir that provides robust connectivity to Redis, including support for standard connections, Redis Cluster, and Redis Sentinel. It features advanced capabilities such as SSL/TLS encryption, Telemetry integration for observability, and synchronous Pub/Sub handling. The library ensures reliability through comprehensive testing, including property-based tests and Docker-based infrastructure for validating cluster, sentinel, and authentication scenarios.

How it got here

2015 — Redix v0.9.0 and v1.9.2 major releases

8 changes.

This period focused on significant API overhauls and feature expansions for the Redix Elixir client, including the introduction of Redis Sentinel, SSL, Telemetry integration, and Redis Cluster support. The work involved removing legacy internal modules and configuration files while updating dependencies to require newer versions of Elixir and Erlang/OTP. Comprehensive test suites were added to validate these new capabilities, including ACL authentication, topology discovery, and protocol parsing.

2018–2023 — PubSub architecture and test infrastructure

5 changes.

The project introduced a synchronous pub/sub connection architecture with dedicated processes and telemetry, significantly improving reliability and state tracking. Concurrently, extensive test coverage was added through Docker-based Sentinel environments and stateful property-based tests for core, cluster, and pub/sub modules.

2026 — Redis Cluster routing infrastructure

4 changes.

This period focused on implementing robust command parsing and dynamic key resolution for Redis Cluster routing, introducing dedicated modules to accurately direct commands to the correct nodes. Comprehensive testing infrastructure was established, including Docker-based cluster environments and fake node simulations, to validate the new routing logic and handle complex redirection scenarios.

Features

Initial repository structure and documentation

The repository has been initialized with the core project files, including a comprehensive README describing the Redix Redis client for Elixir, a CHANGELOG tracking versions from v0.1.0 to v1.9.2, and an AGENTS.md file detailing code conventions and testing procedures. A .formatter.exs file has been added to enforce code style using the stream\_data dependency, and a .gitignore file excludes build artifacts like /doc, /cover, and /plts. Additionally, a docker-compose.yml file is provided to spin up the necessary Redis instances (base, sentinel, cluster, pub/sub) for running the test suite locally.

(repo-wide) · high confidence

Introduce Redix.Cluster for Redis Cluster support

Adds the \Redix.Cluster\ module, providing a new API to connect to and interact with Redis Cluster deployments. This feature allows users to start a cluster connection by specifying a list of seed nodes, after which the library automatically discovers the full cluster topology. It supports standard commands, pipelines (which are transparently split across nodes and reassembled), and transactions. Key capabilities include reading from replicas via the \:route\ option, configuring connection pooling per node, and handling topology changes with exponential backoff. The implementation introduces new internal modules (\Redix.Connection\, \Redix.Connector\, \Redix.SocketOwner\) to manage connections using \gen\_statem\, and integrates Telemetry for monitoring connection and cluster events.

lib/redix · high confidence

Introduces static command parsing and dynamic key resolution for Redis Cluster routing

Adds \Redix.Cluster.CommandParser\ and \Redix.Cluster.KeyResolver\ to improve how commands are routed to the correct cluster nodes. The new parser uses a static table to quickly identify the key position for common Redis commands, while the resolver handles unknown or complex commands by querying the server via \COMMAND INFO\ and \COMMAND GETKEYS\, caching the results to minimize network overhead. This change ensures more accurate key-based routing for a wider variety of Redis commands in a cluster environment.

lib/redix/cluster · high confidence

Removals

Removal of Recs.Connection and Recs.Parser modules

The \Recs.Connection\ and \Recs.Parser\ modules have been removed from the library. This eliminates the previous implementation of the Redis protocol parser (handling bulk strings, arrays, integers, and simple strings) and the connection module, which may impact any code relying on these specific internal components for parsing or connection management.

lib/recs · high confidence

Removed legacy application configuration file

The \config/config.exs\ file, which previously held application and dependency settings via the \Mix.Config\ module, has been deleted. This removes the default configuration template and any environment-specific imports that were defined there, simplifying the project's configuration structure.

config · high confidence

Behavioural changes

New synchronous pub/sub connection architecture

The \lib/redix/pubsub\ module now uses a dedicated \Redix.PubSub.Connection\ process (based on \:gen\_statem\) to manage Redis connections for pub/sub operations. This change introduces synchronous subscription handling, meaning calls to subscribe or unsubscribe will block until the operation is acknowledged by the server, improving reliability for applications that require confirmation of subscription state. The connection logic now explicitly tracks client IDs, peer addresses, and subscription states, and integrates Telemetry events for connection lifecycle events (established, disconnected, failed).

lib/redix/pubsub · high confidence

Redix v0.9.0: Major API overhaul with Sentinel, SSL, and Telemetry support

This release introduces significant new capabilities and behavioral changes to the Redix Redis client. Users can now connect to Redis Sentinel clusters via the new \:sentinel\ option in \start\_link/1\ and \start\_link/2\, enabling automatic failover to primary nodes. SSL/TLS connections are fully supported with configurable socket options and automatic system CA store usage on Erlang/OTP 25+. The library now integrates with the Telemetry ecosystem for instrumentation, emitting events for commands, pipelines, and errors. The public API has been expanded with new functions such as \transaction\_pipeline/3\ (replacing \multi\_exec/3\), \noreply\_command/3\, \noreply\_pipeline/3\, and \pubsub?/1-2\. Error handling has been refined to return \{:error, %Redix.ConnectionError{}}\ tuples instead of raising exceptions in non-bang functions, and the \Redix.ConnectionError\ type has replaced the previous \Redix.NetworkError\. Additionally, the internal \Recs\ module has been removed, and the library now requires Elixir 1.7+.

lib · high confidence

Test coverage

Added Docker infrastructure for Redis Cluster testing; Added Docker test environment for Redis Sentinel with authentication; Added Docker-based test infrastructure for Redis Sentinel; Added benchmark for bulk string parsing performance; Added stateful property-based tests for Redix core, Cluster, and PubSub; Added test infrastructure for cluster topology and local infrastructure ports; Enhanced test infrastructure with Redis ACL and configuration scenarios; Expanded test coverage for Redix cluster, connection, and protocol components; Expanded test coverage for Redix.Cluster internals.

Dependencies

Redix v1.9.2: Major dependency and configuration overhaul

This release updates the project configuration in mix.exs and mix.lock, reflecting a significant shift in the library's dependencies and build requirements. The Elixir requirement is raised to \~\> 1.15, and the application now explicitly lists :ssl in its extra\_applications. Key runtime dependencies have been updated or added, including telemetry (\~\> 0.4.0 or \~\> 1.0), castore (optional, \~\> 0.1.0 or \~\> 1.0), and nimble\_options (\~\> 0.5.0 or \~\> 1.0). Development and testing tooling has also been refreshed, with dialyxir (\~\> 1.4), ex\_doc (\~\> 0.28), excoveralls (\~\> 0.17), propcheck (\~\> 1.1), and stream\_data (\~\> 1.2) now specified with their respective versions. Benchmarking dependencies like benchfella and redo have been removed.

(dependencies) · 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

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 65 → 70 (+5.1)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 92 → 96 (+3.5)
  • Architecture 100 → 100 (+0.0)
  • Maturity 61 → 59 (-2.3)
  • Readiness 59 → 70 (+11.4)
  • Security 66 → 83 (+16.9)

Resolved (19)

  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — no supported dependency manifest was read
  • Documentation Quality not included (check did not complete)
  • Duplicated block (7 lines × 2) (lib/redix/pubsub/connection.ex)
  • Duplicated block (9 lines × 2) (lib/redix/connection.ex)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • Hotspot: lib/redix/cluster/command_parser.ex (lib/redix/cluster/command_parser.ex)
  • No exposed public API
  • Off-boarding risk: anonymized user #1
  • Test reliability not included
  • TooManyMethods: Cluster (lib/redix/cluster.ex)
  • TooManyMethods: Connection (lib/redix/pubsub/connection.ex)
  • TooManyMethods: Manager (lib/redix/cluster/manager.ex)

New (17)

  • Connector.connect_socket (cognitive 25) (lib/redix/connector.ex)
  • Duplicated block (11 lines × 2) (lib/redix/pubsub/connection.ex)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • Medium IaC: WD-COMPOSE-0002 (docker-compose.yml)
  • Medium IaC: WD-COMPOSE-0002 (docker-compose.yml)
  • Medium IaC: WD-COMPOSE-0002 (docker-compose.yml)
  • No dependency advisory monitoring
  • Outdated: dialyxir
  • Outdated: ex_doc
  • TodoComment (test/redix_test.exs)
  • TodoComment (test/redix_test.exs)

Changes since last survey

  • 21 commits — 20 feature/other, 1 fixes

By area

  • (root) — 8 commits
  • lib/redix — 8 commits
  • test/redix — 5 commits

Notable commits

  • fix: Fix a spec in Redix.Cluster
  • change: Add :address_mapper option (#346)
  • change: Add :cluster metadata to Telemetry events (#348)
  • change: Add a few telemetry events
  • change: Expose Redix.Cluster.hash_slot/1 (#347)
  • change: Improve some Telemetry docs
  • change: Least-busy routing in Redix.Cluster pools (#351)
  • change: Multi-node pool clusters (#345)
  • change: Raise on negative RESP bulk string/array lengths (#353)
  • change: Really trim down AGENTS.md
  • change: Reduce Redis Cluster pool churn (#350)
  • change: Release v1.7.0
  • change: Release v1.8.0
  • change: Release v1.8.1
  • change: Release v1.8.2
  • change: Release v1.9.0
  • change: Release v1.9.1
  • change: Release v1.9.2
  • change: Route cluster commands around unavailable pooled connections
  • change: Support for resolving multiple addresses (#349)
  • …and 1 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

whatyouhide/redix 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 6e95bbd533f7d2c8d6fde5f30269a8fe52628794 — 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.