Changelog for Elixir v1.21
June 23, 2026 ยท View on GitHub
v1.21.0-dev
1. Enhancements
EEx
- [EEx] Support splitting middle expressions across EEx clauses
Elixir
- [Access] Add support for keyword lists in
Access.key/2andAccess.key!/1 - [Code] Add support for the
:erlc_optionscompiler option - [Kernel] Warn on binary patterns with segments that are not byte-aligned
- [Keyword] Optimize
Keyword.pop/3,Keyword.pop!/2, andKeyword.pop_lazy/3 - [List] Add
List.to_existing_atom/2andList.to_unsafe_atom/1 - [MapSet] Optimize
MapSet.symmetric_difference/2when set sizes differ - [Registry] Optimize exact key matching in lookups
- [String] Optimize
String.bag_distance/2 - [String] Add
String.to_existing_atom/2andString.to_unsafe_atom/1 - [URI] Optimize percent-decoding and
URI.to_string/1
ExUnit
- [ExUnit.Assertions] Add
trace/3helper
2. Bug fixes
Elixir
- [Kernel] Fix expansion of rebound variables in bitstring size expressions
- [Kernel] Fix variables defined in one default argument leaking into subsequent default arguments
- [Kernel.Typespec] Preserve metadata when proxying to Elixir typespecs
ExUnit
- [ExUnit.CaptureLog] Fix the typespec for capture log options
Mix
- [Mix.SCM.Git] Raise if Git refspecs start with
- - [mix deps.compile] Preserve code paths and compiler options across OS partitions
3. Hard deprecations
Elixir
- [Macro.Env]
Macro.Env.fetch_alias/2andMacro.Env.fetch_macro_alias/2are deprecated, useMacro.Env.expand_alias/4instead
4. Soft deprecations
Elixir
- [Kernel] Atom interpolation (
:"foo_#{bar}") is deprecated in favor of explicitString.to_unsafe_atom/1 - [List]
List.to_atom/1is deprecated in favor ofList.to_unsafe_atom/1 - [String]
String.to_atom/1is deprecated in favor ofString.to_unsafe_atom/1
v1.20
The CHANGELOG for v1.20 releases can be found in the v1.20 branch.