Skip to content
CAI
Software that uses CAICheck a score

sabiwara/aja

72.2

Strong · 18 September 2026

8.7k

lines of production code

Elixir

primary language

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

Aja is an Elixir library that provides high-performance, persistent data structures and utility functions as optimized alternatives to the standard library. It introduces Aja.Vector for efficient immutable vector operations and Aja.OrdMap for maps that preserve insertion order, alongside Aja.Enum for tuned collection manipulation. The system also includes helper modules for string processing and randomization, supported by comprehensive benchmarking and property-based testing to ensure correctness and performance.

Features

Initial release of Aja library with persistent vectors and ordered maps

This entry marks the initial public release of the Aja library, introducing \Aja.Vector\ (a persistent vector implementation) and \Aja.OrdMap\ (an ordered map that preserves insertion order). The library provides optimized alternatives to the Elixir standard library's \Enum\ module via \Aja.Enum\, along with convenience macros like \vec/1\ and \ord/1\ for pattern matching and construction. The release also includes the \JSON.Encoder\ protocol implementation for Elixir 1.18+ and establishes the foundational data structures and utility functions for the project.

(repo-wide) · high confidence

Introduce Aja library with optimized data structures and Enum replacement

This release adds the Aja library, providing high-performance alternatives to standard Elixir collections. It introduces \Aja.Vector\ (persistent vectors with efficient random access and appends) and \Aja.OrdMap\ (maps preserving insertion order), along with \Aja.Enum\ which offers optimized implementations of Enum functions specifically tuned for these structures. Convenience macros \vec/1\ and \ord/1\ are added for compile-time vector and ordered map construction, and \Aja.String.slugify/2\ is included for URL-safe string generation.

lib · high confidence

Behavioural changes

Configurable property-based testing duration

The application now supports configurable property-based testing via the StreamData library. A new test configuration file sets the maximum run time for property tests to 200 milliseconds by default, but this duration can be overridden by setting the PROP\_TEST\_RUNTIME environment variable, allowing users to adjust test execution speed or stability as needed.

config · high confidence

Introduce persistent vector implementation with optimized trie-based internals

The \Aja.Vector\ module now uses a new internal architecture based on a trie data structure to provide persistent, immutable vector operations. This change introduces new internal modules (\Aja.Vector.Builder\, \Aja.Vector.CodeGen\, \Aja.Vector.Node\, \Aja.Vector.Tail\, \Aja.Vector.Trie\) that handle efficient construction, access, and modification of vectors. Users benefit from improved performance for vector operations such as concatenation, slicing, and element access, while maintaining the expected immutable behavior of the vector API.

lib/vector · high confidence

Optimized and deterministic random and enumeration helpers

The library now includes optimized implementations for \Enum.map/2\ and \Enum.flat\_map/2\ in \Aja.EnumHelper\, which provide performance improvements by handling \Aja.Vector\ and \Aja.OrdMap\ structures more efficiently than the standard library. Additionally, \Aja.RandomHelper\ vendors Elixir 1.17's \shuffle/1\ and \take\_random/2\ functions to ensure deterministic CI results across different Elixir versions and to leverage their improved speed.

lib/helpers · high confidence

Test coverage

Added test support utilities for property-based testing and error handling; Benchmark suite for Aja.OrdMap operations added; Comprehensive benchmark suite for Aja.Vector operations; Initial test suite for Aja collections and utilities; Updated benchmark suite for Aja.Enum functions.

Dependencies

Initial release of Aja 0.7.4 with Elixir 1.12+ support

This entry introduces the Aja library (version 0.7.4), an extension of the Elixir standard library focused on data structures, manipulation, and performance. The project requires Elixir 1.12 or higher and includes optional support for JSON encoding via Jason (version 1.4.4). Development tooling is configured with Dialyxir 1.4.6 for static analysis, StreamData 1.2.0 for property-based testing, ExDoc 0.38.4 for documentation generation, and Benchee 1.4.0 for benchmarking.

(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 72.

Lenses

  • Code Health 93
  • Architecture 99
  • Maturity 53
  • Readiness 83
  • Security 99

Changes since last survey

  • 300 commits — 246 feature/other, 54 fixes

By area

  • (root) — 113 commits
  • lib/vector — 48 commits
  • bench/vector — 35 commits
  • lib/enum.ex — 19 commits
  • .github/workflows — 16 commits
  • lib/vector.ex — 13 commits
  • lib/ord_map.ex — 11 commits
  • bench/enum — 9 commits
  • bench/io — 4 commits
  • bench/ord_map — 3 commits
  • lib/a.ex — 3 commits
  • lib/aja.ex — 3 commits
  • test/aja_test.exs — 3 commits
  • lib/helpers — 2 commits
  • test/enum_prop_test.exs — 2 commits
  • test/support — 2 commits
  • test/vector_prop_test.exs — 2 commits
  • bench/bench.sh — 1 commit
  • bench/maps — 1 commit
  • bench/plots — 1 commit

Notable commits

  • fix: Fix Aja.Enum.empty?/1 for ranges
  • fix: Fix CI and add 1.14 / OPT 25
  • fix: Fix CI for OTP 21
  • fix: Fix CI in Elixir 1.18
  • fix: Fix CI on Elixir 1.19
  • fix: Fix CI on OTP 24
  • fix: Fix CI: migrate to erlef actions
  • fix: Fix Inspect implementation for Aja.Vector in Elixir 1.19
  • fix: Fix OrdMap.t/2 spec
  • fix: Fix and improve readme
  • fix: Fix and optimize A.Vector.filter/2
  • fix: Fix any? and all? call order
  • fix: Fix benches
  • fix: Fix broken benchmark
  • fix: Fix bug in A.OrdMap.take/2
  • fix: Fix bug in A.Vector.join/2 when using chardata
  • fix: Fix bug in A.Vector.take/2
  • fix: Fix bug in Vector.concat/2
  • fix: Fix bug on ord/1 macro with computed keys
  • fix: Fix bug on vec/1 with first
  • …and 280 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

sabiwara/aja 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 f48dc5c4fe95997336dd40bd7424e63f9df7f334 — 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.