Skip to content
CAI
Software that uses CAICheck a score

lpgauth/shackle

74.5

Strong · 2 October 2026

1.6k

lines of production code

Erlang

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Shackle is a high-performance Erlang library that manages network connections and request backlogs using a pool-centric architecture. It supports multiple transport protocols, including TCP, UDP, SSL, and a custom NIF-based TLS implementation, while providing telemetry metrics and automatic connection recycling. The system is designed to optimize client-server communication through efficient backlog management and pluggable protocol handlers.

Removals

Removed generated EDoc documentation files

The generated EDoc documentation files for the Shackle application modules (including shackle\_app, shackle\_backlog, shackle\_backoff, shackle\_cache, shackle\_queue, shackle\_server, and shackle\_sup) have been removed from the repository. This cleanup eliminates the static markdown and edoc-info files that previously provided API reference material for these components.

doc · high confidence

Behavioural changes

6 commits (0 fixes) modifying bin

A change to existing behaviour in bin — 6 commits, 1 file.

bin · medium confidence · unverified

Refactor include files to separate defaults, internals, and records

The library's include structure has been reorganized to improve maintainability and clarity. Default configuration values (such as address, backlog size, pool strategy, and timeouts) are now centralized in a new \shackle\_defaults.hrl\ file, while internal macros, application environment lookups, and logging helpers have been moved to \shackle\_internal.hrl\. The main \shackle.hrl\ file now exclusively defines record structures for client casts and reconnect states, replacing the previous flat definition of ETS table names and app constants. This change simplifies the public interface and makes default values easier to locate and modify.

include · high confidence

Shackle 0.8.0: Complete rewrite with new architecture and protocol support

Shackle has been upgraded to version 0.8.0, introducing a complete architectural rewrite that replaces the previous ETS-based caching and queueing system with a new pool-centric design using the Foil library for lookup optimization and atomics for backlog management. The framework now supports a pluggable protocol system with built-in implementations for TCP, UDP, SSL, and a new NIF-based socket protocol (shackle\_socket) that requires OTP 28. A new telemetry module provides detailed metrics for client operations, and the application now manages its own lifecycle with explicit start/stop behaviors. Deprecated modules like shackle\_cache and shackle\_queue have been removed, and the public API has been standardized with new call/cast/receive\_response functions.

src · high confidence

Version 0.8.0 release with new client options and TLS protocol

This release introduces a \max\_requests\ client option that automatically recycles connections after a specified number of requests, enabling DNS rebalancing across load balancers. It also adds \shackle\_ssl\_socket\, an opt-in TLS protocol built on the \socket\ NIF module that requires OTP 28. Performance improvements include moving the request backlog from ETS to atomics and using \socket:sendv/2\ for iolists. The minimum supported Erlang/OTP version is now 25, and the \granderl\ dependency has been replaced with \knot\.

(repo-wide) · high confidence

Test coverage

Added EUnit test suite for arithmetic protocol over TCP, UDP, SSL, and socket transports

Added a comprehensive EUnit test suite that exercises the arithmetic protocol (add, multiply, noop operations) across multiple transport layers: raw TCP, UDP, SSL, and the new shackle\_ssl\_socket NIF-based TLS protocol. The tests include client and server implementations for each transport, SSL certificate/key fixtures, and coverage for behaviors such as connection setup, request/response parsing, timeouts, backlog handling, max requests, and reconnection strategies.

test · high confidence

Dependencies

Added Mix project configuration for Shackle

A new mix.exs file has been added to define the Shackle project structure, including version management via git tags and application properties sourced from src/shackle.app.src. This file is intended for use by Shackle as a dependency, with rebar3 recommended for compiling and running tests.

(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

Score

  • CAI 73 → 75 (+1.1)
  • Rubric changed (rubric-2026.09.12 → rubric-2026.09.18) — scores are not directly comparable.

Lenses

  • Code Health 98 → 98 (+0.0)
  • Architecture 100 → 100 (+0.0)
  • Maturity 59 → 59 (-0.0)
  • Readiness 78 → 80 (+2.2)
  • Security 92 → 96 (+4.0)

Resolved (2)

  • Coverage not measured — no coverage collector is wired up
  • Documentation: no installation or build instructions (README.md)

New (1)

  • Outdated: foil

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

Survey your own repository

lpgauth/shackle 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 b8d02a30d2afe0aa78adeec33b380982bf06e75a — 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.