Skip to content
CAI
Software that uses CAICheck a score

rvirding/luerl

62.0

Adequate · 23 September 2026

18.9k

lines of production code

Erlang

with Lua

5

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Luerl is a Lua interpreter implemented in Erlang, designed to execute and benchmark Lua scripts within the Erlang ecosystem. The system provides both a legacy and a modern API, with the latter optimized for idiomatic usage in Elixir via pipe-friendly wrappers. It includes comprehensive test coverage for core functions and library interactions, alongside benchmarking tools to evaluate performance across various language features.

Features

Add Elixir-style API wrappers for Luerl

Introduces new Erlang modules, \Elixir.Luerl\ and \Elixir.Luerl.Old\, which provide Elixir-friendly wrappers for the Luerl Lua interpreter. These modules reposition the VM state argument to the first position, enabling idiomatic usage with the Elixir pipe operator. The \Elixir.Luerl\ module wraps the new Luerl interface, while \Elixir.Luerl.Old\ wraps the legacy interface.

src · high confidence

Add Lua benchmark runner and test suites

Added a new benchmarking tool for the luerl Lua interpreter, including a Makefile and a \benchmarks.erl\ runner that executes Lua scripts from the \suites/\ directory. The update also introduces a collection of Lua benchmark suites (e.g., \accum\, \arguments\, \callmap1\) that test various language features and performance characteristics.

examples/benchmark · high confidence

Add Luerl benchmarking examples

Added two new benchmarking examples, minibench and minibench2, which measure the performance of frequent calls to small Luerl scripts. These examples demonstrate various usage patterns including state initialization, parsing, and execution, providing a way to evaluate the Luerl engine's speed for common operations.

examples/minibench · high confidence

Added Project Euler benchmarking examples

Added ten Lua scripts (problem\_001 through problem\_010) that solve Project Euler problems using the luerl Lua interpreter, along with a Makefile to compile and run them. These examples serve as benchmarks for the new flat emulator loop and updated luerl API.

examples/euler · high confidence

Initial release of Luerl 1.5.1

The project introduces a formal CHANGELOG to track version history and adopts the Apache License, Version 2.0. The release includes a Makefile for building and testing, a rebar3 configuration with ex\_doc integration, and a README with community links. The CHANGELOG documents that this version fixes the display of illegal tokens, updates community links to Discord, and includes various parser and scanner improvements.

(repo-wide) · high confidence

Behavioural changes

Add application metadata for Luerl 1.5.1

The ebin/luerl.app file was added to define the Luerl application metadata, specifying version 1.5.1 and listing all associated modules, dependencies, and configuration. This enables the Erlang runtime to properly recognize and manage the Luerl library as a standard application.

ebin · high confidence

Added luerl.hrl header file to the include directory

The luerl.hrl header file, containing all basic macros and records for Luerl (such as luerlstate, luerldata, and various internal record definitions), has been added to the include directory. This ensures the header is available for compilation and includes updated versioning and cleanup of the file structure.

include · high confidence

Moved legacy Luerl documentation to doc\_legacy

The legacy Luerl documentation, including man pages and source files for the main interface (luerl), the old interface (luerl\_old), and the sandbox interface (luerl\_sandbox), has been moved into the doc\_legacy directory. This change prevents collisions with the new ex\_doc-based documentation, ensuring that the older API references remain accessible in their original location.

_doc\legacy · high confidence

Updated hello examples to use the new Luerl API

The hello examples have been updated to use the new Luerl API, including the introduction of a Makefile for building and running the examples, and the addition of new example files (hello2, hello\_funcalls, hello\_sandbox, hello\_table, hello\_userdata) that demonstrate the updated interface for executing Lua code, handling function calls, sandboxing, table access, and userdata.

examples/hello · high confidence

Test coverage

Expanded test coverage for Luerl core and library functions

Added comprehensive test suites for the Luerl Erlang/OTP integration, including new test modules for function calls, return values, and the \os.date\ library. The changes introduce tests for encoding and decoding Lua values, handling variable arguments, managing private state, and verifying Unicode and table indexing behavior. Additionally, the suite now covers error propagation via \pcall\ and validates the \\_\_newindex\ metamethod, ensuring robustness across different time zones and external function interactions.

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

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 54 → 62 (+8.0)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 66 → 87 (+20.8)
  • Architecture 100 → 100 (+0.0)
  • Maturity 33 → 34 (+1.7)
  • Readiness 78 → 78 (+0.0)
  • Security 68 → 97 (+29.8)
  • Event Sourcing 100 → 100 (+0.0)

Resolved (15)

  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • 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)
  • No exposed public API
  • Off-boarding risk: anonymized user #1
  • Test reliability not included
  • TooManyMethods: luerl_emul (src/luerl_emul.erl)
  • TooManyMethods: luerl_lib_string (src/luerl_lib_string.erl)
  • TooManyMethods: ttdict (src/ttdict.erl)
  • complexity unreadable for .erl, .hrl — churn × complexity hotspots could not be measured

New (48)

  • Coverage not measured — no coverage collector is wired up
  • Documentation: no installation or build instructions (README.md)
  • Duplicated block (11 lines × 2) (src/luerl.erl)
  • Duplicated block (12 lines × 2) (src/luerl.erl)
  • Duplicated block (12 lines × 2) (src/luerl.erl)
  • Duplicated block (12 lines × 2) (src/luerl.erl)
  • Duplicated block (12 lines × 2) (src/luerl_comp_env.erl)
  • Duplicated block (15 lines × 2) (src/luerl.erl)
  • Duplicated block (5 lines × 2) (src/luerl_comp.erl)
  • Duplicated block (5 lines × 2) (src/luerl_comp_env.erl)
  • Duplicated block (5 lines × 2) (src/luerl_comp_env.erl)
  • Duplicated block (5 lines × 2) (src/luerl_comp_vars.erl)
  • Duplicated block (5 lines × 2) (src/luerl_emul.erl)
  • Duplicated block (5 lines × 2) (src/luerl_heap.erl)
  • Duplicated block (5 lines × 2) (src/luerl_lib_string.erl)
  • Duplicated block (6 lines × 2) (src/luerl.erl)
  • Duplicated block (6 lines × 2) (src/luerl_comp_cg.erl)
  • Duplicated block (6 lines × 2) (src/luerl_emul.erl)
  • Duplicated block (7 lines × 2) (src/luerl_comp_lint.erl)
  • Duplicated block (7 lines × 2) (src/luerl_lib_table.erl)
  • …and 28 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

rvirding/luerl 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 41f14bf01abaad9f84e9bb43203c5ab6b3f27e4c — 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.