Anvl is a parallel, scalable and (somewhat) rebar3-compatible build system.
Planned features include:
- [X] Parsing rebar.config
- [ ] Plugin support
- [ ] Build graph visualization
- [ ] Build profiling tools
- [ ] Erlang compilation
- [ ] Git dependencies
- [ ] Hex dependencies
- [ ] Dialyzer
- [ ] Common test
- [ ] Eunit
- [ ] Relx integration
- [ ] Escriptize
We all love rebar3. It is opiniated, compliant with the OTP design principles, declarative, and easy to use. Unfortunately, it has some shortcomings that lie deep within its architecture:
- Granularity of the build targets. Minimal build unit in rebar3 is not the beam file or the Erlang application, but “provider”. (Providers include compile, get_deps, etc.). This destroys parallelism, e.g. it’s impossible to compile one app while another one is being downloaded
- Global mutable state. Rebar3 providers rely on the global state, which further limits parallelism
- Error handling. rebar3 crashes with a BEAM dump on innocuous configuration errors
While anvl strives to understand more or less complex rebar.config
files, some things will never work:
- Plugins. anvl plugin interface is fundamentally different from rebar’s
Anvl only works with OTP 21+.
This project contains heavily refactored code originating from rebar project, written by its respective authors.