Compatibility and Deprecations
Compatibility between Elixir and Erlang/OTP
Erlang/OTP versioning is independent from the versioning of Elixir. Each version of Elixir supports a specific range of Erlang/OTP versions. The compatibility table is shown below.
| Elixir version | Supported Erlang/OTP versions |
|---|---|
| 1.0 | 17 - 17 (and OTP 18 from v1.0.5) |
| 1.1 | 17 - 18 |
| 1.2 | 18 - 18 (and OTP 19 from v1.2.6) |
| 1.3 | 18 - 19 |
| 1.4 | 18 - 19 (and OTP 20 from v1.4.5) |
| 1.5 | 18 - 20 |
| 1.6 | 19 - 20 |
While Elixir often adds compatibility to new Erlang versions on released branches, such as support for OTP 20 in v1.4.5, those releases usually contain the minimum changes for Elixir to run without errors. Only the next minor release, in this case v1.5.0, does effectively leverage the new features provided by the latest Erlang release.
Deprecations
Policy
Elixir deprecations happen in 3 steps:
The feature is soft-deprecated. It means both CHANGELOG and documentation must list the feature as deprecated but no warning is effectively emitted by running the code. There is no requirement to soft-deprecate a feature.
The feature is effectively deprecated by emitting warnings on usage. In order to deprecate a feature, the proposed alternative MUST exist for AT LEAST two versions. For example,
Enum.uniq/2was soft-deprecated in favor ofEnum.uniq_by/2in Elixir v1.1. This means a deprecation warning may only be emitted by Elixir v1.3 or later.The feature is removed. This can only happen on major releases. This means deprecated features in Elixir v1.x shall only be removed by Elixir v2.x.