Skip to content
CAI
Software that uses CAICheck a score

evadne/etso

50.2

Adequate · 18 September 2026

567

lines of production code

Elixir

primary language

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

Etso is an Ecto adapter that enables data persistence using Erlang Term Storage (ETS). It supports core database operations including inserts, selects with complex filtering and sorting, preloads, and bulk deletions. The system also handles nested JSON data extraction and null checks within queries. It is designed as a lightweight, in-memory storage solution for Ecto-based applications.

Features

Added Apache 2.0 License and comprehensive documentation

The project now includes an Apache 2.0 LICENSE file, clarifying the terms for use, reproduction, and distribution. The README has been significantly expanded to include installation instructions, a detailed feature coverage list (highlighting supported Ecto operations like inserts, selects, and preloads), a section on missing features (such as joins and transactions), and acknowledgments for contributors and use cases like the Erlef website.

(repo-wide) · high confidence

Added module documentation and type definitions to Etso

The top-level Etso module now includes @moduledoc documentation and defines three public types: repo (Ecto.Repo.t()), schema (module()), and table (:ets.tab()). This provides better IDE support and documentation for developers using the library.

lib · high confidence

Behavioural changes

Enhanced ETS query support with sorting, JSON extraction, and nil checks

The ETS query engine now supports sorting results via the ObjectsSorter module, which applies Ecto order-by predicates to ETS data. Match specifications have been updated to handle \is\_nil\ conditions and \json\_extract\_path\ operations for navigating nested JSON data within ETS tuples. Additionally, the \:in\ query operator has been refactored to use a more efficient tuple-based OR structure, and the build logic for match bodies now correctly handles queries with no select fields.

lib/etso/ets · high confidence

Etso adapter refactored to delegate Ecto behaviors via dynamic implementation

The Etso adapter in lib/etso has been restructured to explicitly implement the Ecto.Adapter.Schema and Ecto.Adapter.Queryable behaviors. Instead of using the \use\ macro to import these behaviors, the adapter now dynamically delegates function calls to dedicated implementation modules (Etso.Behaviour.Schema and Etso.Behaviour.Queryable) at compile time. This change also updates the adapter metadata structure to use a new Etso.Adapter.Meta module and adds explicit implementation callbacks for Ecto.Adapter, such as \checked\_out?\.

lib/etso · high confidence

Support for delete\_all queries and result sorting in the ETS adapter

The ETS adapter now supports deleting all records in a table via \delete\_all\ queries, handling both unfiltered deletions and those with specific conditions. Additionally, query results are now sorted according to the query's order specifications before being returned to the user, ensuring consistent ordering in select operations.

lib/etso/adapter · high confidence

Test coverage

Expanded test coverage for Northwind Repo query capabilities; Moved Northwind test support models to test/support.

Dependencies

Dependency upgrades and new development tooling

The project has upgraded its core dependency on Ecto from version 3.0.8 to 3.8.3, which also pulls in updates for the Decimal library (to 2.0.0) and introduces Telemetry support. Additionally, new development-only dependencies have been added: Dialyxir (1.0.0-rc.6) for static analysis and ExDoc (0.21.2) for documentation generation, with corresponding configuration added to the project manifest.

(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

Baseline

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

Lenses

  • Code Health 100
  • Architecture 66
  • Maturity 49
  • Readiness 33
  • Security 100

Changes since last survey

  • 74 commits — 69 feature/other, 5 fixes

By area

  • (repo) — 37 commits
  • (root) — 20 commits
  • lib/etso — 13 commits
  • test/support — 2 commits
  • lib/northwind — 1 commit
  • test/northwind — 1 commit

Notable commits

  • fix: Added spacing fixes to test models
  • fix: Fixed handling of where/in
  • fix: Fixed non-flat :orelse query crashing OTP 23.0
  • fix: Fixed reporting of errors on conflicting primary key
  • fix: Fixed where/in query
  • change: Acknowledged PR # 6
  • change: Add erlef.org use case
  • change: Added ExDoc integration; refined project structure
  • change: Added LICENSE
  • change: Added Maintainer information; refined README
  • change: Added ability to sort results
  • change: Added additional test for insert_all
  • change: Added insert_all test
  • change: Added support for delete_all
  • change: Added support for is_nil in queries
  • change: Added support for json_extract_path() in select queries
  • change: Added support for parallel preloading
  • change: Amended Etso with Ecto 3.8.2
  • change: Amended README
  • change: Attributed author of json_extract_path() support in README
  • …and 54 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

evadne/etso 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 18 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 cae311eedf42003ddbc6796798a67193d5e56454 — 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-5d04157a340d.