Skip to content
CAI
Software that uses CAICheck a score

lpgauth/swirl

59.9

Adequate · 2 October 2026

1.2k

lines of production code

Erlang

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Swirl is a high-performance Erlang stream processing engine designed for distributed data flows. It enables users to define configurable pipelines with mappers, reducers, and windowing logic, while managing state and node coordination through built-in mechanisms like ETS tables and a code distribution server. The system supports event filtering via a query language and provides telemetry instrumentation to monitor flow lifecycle and dispatch granularity.

Features

Add telemetry instrumentation and modernize build infrastructure

Version 0.2.9 introduces four new telemetry events (\[swirl, flow, start\], \[swirl, flow, stop\], \[swirl, mapper, window\], \[swirl, reducer, window\]) to monitor flow lifecycle and window dispatch granularity, requiring the addition of the telemetry 1.4.2 dependency. This release also includes infrastructure updates from version 0.2.8, such as switching the uuid dependency to the hex package uuid\_erl 2.0.7, migrating documentation generation from edown to rebar3\_ex\_doc, and updating the CI matrix to support OTP 25-28.

(repo-wide) · high confidence

Initial release of Swirl stream processing engine

Swirl is introduced as a high-performance Erlang stream processor (version 0.2.9) that enables distributed data flows with configurable mappers and reducers. The system features a code distribution mechanism via a code server to handle module updates across nodes, a query language (swirl\_ql) for filtering events, and a heartbeat system to automatically restart dead mappers. Users can define flows with specific windowing, flushing, and concurrency options, while the engine manages state through ETS tables and exposes telemetry events for monitoring.

src · high confidence

Introduce Swirl distributed processing API and data structures

This change adds the core header file for the Swirl library, defining the records and types that constitute its public API. Users can now define flows using the new \#flow record, which supports configuration for mappers and reducers (including options, windows, and node limits), stream filtering, and heartbeats. The file also introduces the \#stream record for tracking stream state and defines the exp\_tree type for stream filtering expressions, establishing the foundational data structures for the library's distributed processing capabilities.

include · high confidence

Behavioural changes

3 commits (0 fixes) modifying bin

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

bin · medium confidence · unverified

Documentation rebuilt with ExDoc v0.39.1 for swirl v0.2.8

The project documentation has been regenerated using ExDoc v0.39.1, updating the API reference, changelog, and search assets for swirl v0.2.8. This rebuild reflects the infrastructure modernization in version 0.2.8, which migrated the documentation toolchain from edown to rebar3\_ex\_doc, switched the uuid dependency to the uuid\_erl hex package, and updated the CI matrix to support OTP 25-28.

doc · high confidence

Test coverage

Added unit tests for Flow and Query Language components

Added new test suites to verify the behavior of the \swirl\_flow\ module and the \swirl\_ql\ query language parser/evaluator. The \swirl\_flow\_tests\ module exercises the flow lifecycle, including mapper/reducer logic and stream filtering, while \swirl\_ql\_tests\ validates the parsing and evaluation of comparison, set membership, and logical predicates.

test · 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 59 → 60 (+0.6)
  • Rubric changed (rubric-2026.09.12 → rubric-2026.09.18) — scores are not directly comparable.

Lenses

  • Code Health 99 → 99 (+0.0)
  • Architecture 69 → 69 (+0.0)
  • Maturity 39 → 39 (+0.0)
  • Readiness 78 → 80 (+2.3)
  • Security 92 → 96 (+4.0)

Resolved (1)

  • Coverage not measured — no coverage collector is wired up

New (2)

  • Documentation: no licence statement (README.md)
  • Documentation: no project overview (README.md)

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/swirl 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 ab631a01a1b49a1b08710ca997c3c555ba4c26ae — 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.