basho/rebar
53.3
Adequate · 23 September 2026
10.3k
lines of production code
Erlang
primary language
5
measurements over time
What this system is
This system is a build tool and package manager for the Erlang ecosystem, responsible for compiling code, resolving dependencies, and managing project lifecycles. It provides a comprehensive suite of commands for building, testing, and releasing Erlang applications, including support for Common Test, EUnit, and xref. The tool scaffolds new projects with templates for NIFs, gen\_servers, and test suites, while also handling complex transitive dependency resolution and plugin loading. Additionally, it offers shell completion and structured logging to streamline the development workflow.
How it got here
2009–2010 — Rebar3 CLI and template expansion
13 changes.
This period focused on expanding the Rebar3 build tool with new project templates for Erlang development patterns and enhanced command-line interface features like shell completion. The team also significantly broadened the compiler's capabilities to support various languages and added extensive integration tests to verify dependency resolution and release generation.
2011 — integration and upgrade test coverage
7 changes.
This period focused on expanding test coverage for release upgrade workflows and integration scenarios. New test fixtures and scripts were added to validate the behavior of the release handler, Common Test suite discovery, and dynamic plugin loading.
2012–2013 — test coverage and dependency resolution
4 changes.
This period focused on improving the reliability of Rebar's build system by fixing transitive dependency resolution and adding integration tests for plugin and dependency update behaviors. Additionally, zsh shell completion was added to enhance the command-line user experience.
Features
Add bash shell completion for the Rebar3 CLI
Users can now use the Tab key to auto-complete Rebar3 commands (such as compile, create, and get-deps) and their associated options (like --jobs, --config, and --verbose) directly in their bash shell, improving workflow efficiency.
priv/shell-completion/bash · high confidence
Add zsh completion for the Rebar command-line tool
Users can now use zsh to autocomplete Rebar commands and options. The new completion script defines global options (such as --help, --verbose, --jobs) and provides autocompletion for subcommands like clean, compile, create, and others, along with relevant arguments for each command.
priv/shell-completion/zsh · high confidence
Initial project structure and build system setup
The repository is initialized with a complete build system, including a Makefile for managing targets like 'check', 'test', and 'clean', and a bootstrap script to compile the tool. Documentation and contributor acknowledgments are added via README.md, CONTRIBUTING.md, and THANKS files. The project also establishes a .gitignore to exclude build artifacts, a LICENSE file (Apache 2.0), and configuration templates (rebar.config.sample) that document available build options for Erlang compilation, testing, and dependency management.
(repo-wide) · high confidence
New project templates for NIFs, gen\_server, gen\_fsm, and Common Test suites
Added new template files in priv/templates to scaffold Erlang projects. This includes a basic NIF template (C and Erlang files) for writing native interface modules, a simple gen\_server template for building server processes, a simple gen\_fsm template for finite state machines, and a Common Test suite template for writing test suites. These templates provide starting points for common Erlang development patterns.
priv/templates · high confidence
Removals
Removed bundled rebar build script
The bundled rebar build script (priv/rebar) has been removed from the project. This script previously provided a self-contained Erlang-based build tool for compiling and cleaning applications. Its removal indicates that the project no longer ships with an internal build tool, likely relying on external tooling or a different build system instead.
priv · high confidence
Behavioural changes
Add integration test for rebar\_ct spec file location
Added an integration test case in inttest/ct2 that verifies the Common Test suite discovery mechanism, specifically ensuring that the .spec file is correctly located and processed by the rebar\_ct command line tool.
inttest/ct2 · high confidence
Add structured logging macros and abort/abort-with-args macros to rebar.hrl
The include/rebar.hrl header now defines structured logging macros (DEBUG, INFO, WARN, ERROR) that delegate to rebar\_log:log/3, and introduces ABORT and FMT macros for error handling and formatting. This replaces the previous global\_state record and the simple CONSOLE macro with more granular, log-level-aware output and formatted string handling.
include · high confidence
Fix transitive dependency resolution with lib\_dir directives
The build system now correctly handles transitive dependencies when a project uses lib\_dir directives. Previously, the compiler might have over-aggressively cleaned the code path, leading to missing headers or unresolved dependencies in complex dependency trees. This change ensures that all necessary headers and libraries are properly included and compiled, preventing build failures in projects with deep or multiple dependency chains.
inttest/tdeps3 · medium confidence
Rebar 2.1.0-pre release with expanded compiler and utility modules
The rebar application metadata has been updated to version 2.1.0-pre. The module list has been significantly expanded to include new compiler plugins for ABNF, ASN.1, Diameter, ErlyDTL, LFE, Neotoma grammars, Protobufs, and port drivers, as well as utilities for appups, CT, EUnit, escripts, edoc, xref, and shell. The application dependencies have also been extended to include compiler, crypto, syntax\_tools, and tools.
ebin · medium confidence
Test coverage
Add integration test for custom configuration file handling; Add integration test for plugin dependency resolution; Add integration test for transitive Erlang dependencies; Add integration test for transitive dependency resolution; Add integration test suite for common test functionality; Add integration tests for dynamic plugin loading and error handling; Add pre and post script support for all commands; Add test project for release upgrade workflows; Added EUnit and xref test suites for Rebar; Added dummy application for upgrade testing; Added integration test for recursive dependency updates; Added integration test for release generation with templating; Added test infrastructure for upgrade project; New integration test for bug 5.
Dependencies
Updated getopt library to v0.3.0
The getopt command-line parsing library has been updated to version 0.3.0. This update brings improved option parsing and usage information formatting to the build tool's command-line interface.
src · 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 55 → 53 (-1.4)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 86 → 93 (+6.9)
- Architecture 98 → 100 (+2.4)
- Maturity 37 → 49 (+12.3)
- Readiness 47 → 39 (-7.6)
- Security 95 → 63 (-31.7)
- Event Sourcing 100 → 100 (+0.0)
Resolved (10)
- Change coupling: rebar_erlydtl_compiler.erl ↔ rebar_neotoma_compiler.erl (src/rebar_erlydtl_compiler.erl)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- No exposed public API
- Test reliability not included
- TooManyMethods: getopt (src/getopt.erl)
- TooManyMethods: rebar_deps (src/rebar_deps.erl)
- TooManyMethods: rebar_eunit (src/rebar_eunit.erl)
- complexity unreadable for .erl, .hrl — churn × complexity hotspots could not be measured
- dormant codebase — no living knowledge left to concentrate
New (39)
- Coverage not measured — no coverage collector is wired up
- Dependency hygiene PARTLY measured — rebar3 pinning read, dependency currency not (no rebar.lock-pinned Hex declaration to grade)
- Documentation: contradicts the code (test/upgrade_project/README.md)
- Documentation: no installation or build instructions (README.md)
- Duplicated block (11 lines × 2) (inttest/tdeps1/tdeps1_rt.erl)
- Duplicated block (5 lines × 2) (src/rebar_deps.erl)
- Duplicated block (5 lines × 2) (src/rebar_erlydtl_compiler.erl)
- Duplicated block (5 lines × 2) (src/rebar_eunit.erl)
- Duplicated block (6 lines × 2) (src/mustache.erl)
- Duplicated block (6 lines × 4) (inttest/tdeps1/tdeps1_rt.erl)
- Duplicated block (8 lines × 3) (inttest/bug_5_rt.erl)
- Duplicated block (8 lines × 7) (inttest/depplugins/depplugins_rt.erl)
- Duplicated block (9 lines × 2) (src/getopt.erl)
- Duplicated block (9 lines × 2) (src/rebar_erlydtl_compiler.erl)
- Members sharing a duplicated core (7 members, 50+ identical tokens) (inttest/depplugins/depplugins_rt.erl)
- No ADRs found
- No SBOM
- No artifact signing
- No build provenance
- No dependency lockfile committed (inttest/depplugins/rebar.config)
- …and 19 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
basho/rebar 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 cd55176009df794f506771fd574de9303ff2a42e — 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.