absinthe-graphql/dataloader
65.9
Adequate · 3 October 2026
1.5k
lines of production code
Elixir
primary language
2
measurements over time
What this system is
Dataloader is an Elixir library designed to batch and optimize data loading from various sources, primarily focusing on Ecto associations and key-value stores. It provides a protocol-based architecture that allows users to define custom sources for concurrent, batched fetches with configurable error handling and telemetry. The system supports complex database relationships, including joins and lateral queries, while offering flexible execution modes and integration with OpenTelemetry for observability.
Features
Introduce Dataloader.Ecto source and Source protocol
This change introduces the \Dataloader.Ecto\ module, providing a new data source implementation for Ecto that supports batched loading of associations, custom queries, and lateral joins for complex scenarios like \has\_many :through\. It also adds the \Dataloader.Source\ protocol, defining the interface for source behavior (load, run, fetch, etc.), and includes a new \Dataloader.KV\ source for simple key-value based loading with configurable concurrency and telemetry events.
lib/dataloader · high confidence
Removals
Removal of Ecto source implementation and Source protocol
The \DataLoader.Ecto\ module and the \DataLoader.Source\ protocol have been removed from the library. This eliminates the built-in support for batching and loading data via Ecto, meaning users can no longer use this specific implementation to resolve associations or perform batched database queries through DataLoader.
_lib/data\loader · high confidence
Behavioural changes
Dataloader v2.0.0 release with breaking protocol changes and Elixir 1.10+ requirement
This release introduces Dataloader v2.0.0, which requires Elixir 1.10 or higher and upgrades the development toolchain to Elixir 1.18.0 and Erlang 27.2. The primary breaking change is the automatic handling of sync vs. async execution in the Ecto dataloader source; custom source implementations must now add an \async?\ function to comply with the updated protocol. Additionally, the KV source no longer double-wraps results in \{:ok, {:ok, value}}\ tuples when using the tuple policy. The package name has been standardized to \:dataloader\ (lowercase), and the project now includes a Code of Conduct, MIT License, and CI workflows via GitHub Actions.
(repo-wide) · high confidence
Initial configuration structure and Elixir config modernization
The application now includes dedicated configuration files for development and test environments, establishing a PostgreSQL connection for the Dataloader test repository and setting the logger level to warning in tests. The main configuration file has been updated to use the modern \import Config\ syntax instead of the deprecated \use Mix.Config\, and the environment-specific config import now correctly invokes \Mix.env()\ as a function.
config · high confidence
Renamed Dataloader module and overhauled API for batching and error handling
The main library module has been renamed from \DataLoader\ to \Dataloader\ (lowercase 'l'). The API has shifted from item-level operations (\add\, \get\_result\) to batch-oriented functions (\load\, \load\_many\, \get\_many\). The \run/1\ function now executes sources concurrently using async streams, respects per-source timeouts, and introduces a configurable \get\_policy\ option (\:raise\_on\_error\, \:return\_nil\_on\_error\, or \:tuples\) to control how load errors are handled when retrieving data.
lib · high confidence
Test coverage
Added comprehensive test coverage for Ecto dataloader associations; Added comprehensive test suite for Dataloader; Added test coverage for Ecto and KV data sources; Added test database schema for association loading; Added test support schemas for complex association testing.
Dependencies
Dataloader v2.0.1 release with Elixir 1.12+ support and OpenTelemetry integration
This update bumps the library to version 2.0.1, raising the minimum Elixir requirement to 1.12 and renaming the application from :data\_loader to :dataloader. It introduces optional OpenTelemetry support via the opentelemetry\_process\_propagator dependency and updates telemetry to version 1.0. The release also includes configuration for Dialyxir to analyze dependencies and updates documentation generation settings.
(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 66 → 66 (+0.3)
- Rubric changed (rubric-2026.09.15 → rubric-2026.10.1) — scores are not directly comparable.
Lenses
- Code Health 99 → 99 (+0.0)
- Architecture 69 → 69 (+0.0)
- Maturity 53 → 53 (+0.0)
- Readiness 75 → 77 (+1.8)
- Security 94 → 95 (+1.1)
Resolved (1)
- Documentation: no installation or build instructions (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
absinthe-graphql/dataloader 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 3 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 9af722ccb7e1de68066e7252cafeb1b4b082b243 — the exact code this score is about.
- Scored under rubric-2026.10.1 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-8fe32cd45d00.