whatyouhide/redix
70.0
Strong · 23 September 2026
6.6k
lines of production code
Elixir
primary language
5
measurements over time
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.