For some time now there's also Gradualizer. Disclaimer: I'm one of the contributors.
Gradualizer is a static type checker for Erlang
with support for gradual typing. It can infer some types, but mostly relies on function specs. It checks for consistency of a function body with its declared spec and for consistency of a callee's spec with passed in arguments. It supports equi-recursive types (user types which expand to user types), union types, a limited form of intersection types (multi-clause specs, i.e. overloaded functions).
Gradualizer is written in Erlang, so contributing by the community should be possible. Since recently, it can self-check without reporting any errors. It's a work in progress, but at an advanced stage with coverage of practically the entire Erlang syntax (tuples, records, maps, whatnot). Thanks to dogfooding it on itself, we know how convenient (or inconvenient) it already is in comparison with writing untyped Erlang and can focus on the most important things to improve next. It comes with a Rebar3 plugin and a CLI interface.
Check it out on GitHub or on HexDocs!