1.19.0

Released on 2025-10-16

Changes

Type
enhancement
Tool
Elixir
Module
Access
Description
Add `Access.values/0` for traversing maps and keyword lists values
Type
enhancement
Tool
Elixir
Module
Base
Description
Add functions to verify if an encoding is valid, such as `valid16?`, `valid64?`, and so forth
Type
enhancement
Tool
Elixir
Module
Calendar
Description
Support 2-arity options for `Calendar.strftime/3` which receives the whole data type
Type
enhancement
Tool
Elixir
Module
Code
Description
Add `:migrate_call_parens_on_pipe` formatter option
Type
enhancement
Tool
Elixir
Module
Code
Description
Add `:indentation` option to Code.string_to_quoted/2
Type
enhancement
Tool
Elixir
Module
Code.Fragment
Description
Preserve more block content around cursor in `container_cursor_to_quoted`
Type
enhancement
Tool
Elixir
Module
Code.Fragment
Description
Add `:block_keyword_or_binary_operator` to `Code.Fragment` for more precise suggestions after operators and closing terminators
Type
enhancement
Tool
Elixir
Module
Code.Fragment
Description
Add `Code.Fragment.lines/1`
Type
enhancement
Tool
Elixir
Module
Enum
Description
Provide more information on `Enum.OutOfBoundsError`
Type
enhancement
Tool
Elixir
Module
Inspect
Description
Allow `optional: :all` when deriving Inspect
Type
enhancement
Tool
Elixir
Module
Inspect.Algebra
Description
Add optimistic/pessimistic groups as a simplified implementation of `next_break_fits`
Type
enhancement
Tool
Elixir
Module
IO.ANSI
Description
Add ANSI codes to turn off conceal and crossed_out
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Raise when U+2028 and U+2029 characters are present in comments and strings to avoid line spoofing attacks
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Include the line for the previous clause in errors/warnings related to conflicts between defaults on function definitions
Type
enhancement
Tool
Elixir
Module
Kernel
Description
Support `min/2` and `max/2` as guards
Type
enhancement
Tool
Elixir
Module
Kernel.ParallelCompiler
Description
Add `each_long_verification_threshold` which invokes a callback when type checking a module takes too long
Type
enhancement
Tool
Elixir
Module
Kernel.ParallelCompiler
Description
Include lines in `== Compilation error in file ... ==` slogans
Type
enhancement
Tool
Elixir
Module
Macro
Description
Print debugging results from `Macro.dbg/3` as they happen, instead of once at the end
Type
enhancement
Tool
Elixir
Module
Macro
Description
Add `__escape__/1` callback so structs can escape references and other runtime data types in `Macro.escape/1`
Type
enhancement
Tool
Elixir
Module
Module
Description
Do not automatically load modules after their compilation, guaranteeing a more consistent compile time experience and drastically improving compilation times
Type
enhancement
Tool
Elixir
Module
OptionParser
Description
Support the `:regex` type
Type
enhancement
Tool
Elixir
Module
OptionParser
Description
Enhance parsing error to display available options
Type
enhancement
Tool
Elixir
Module
Protocol
Description
Type checking of protocols dispatch and implementations
Type
enhancement
Tool
Elixir
Module
Regex
Description
Add `Regex.to_embed/2` which returns an embeddable representation of regex in another regex
Type
enhancement
Tool
Elixir
Module
Regex
Description
Raise error message when regexes are used as default values in struct fields for compatibility with Erlang/OTP 28
Type
enhancement
Tool
Elixir
Module
Registry
Description
Add key-based partitioning of duplicate registries
Type
enhancement
Tool
Elixir
Module
String
Description
Add `String.count/2` to count occurrences of a pattern
Type
enhancement
Tool
Elixir
Module
String
Description
Update to Unicode 17.0.0
Type
enhancement
Tool
ExUnit
Module
ExUnit
Description
Set a process label for each test
Type
enhancement
Tool
ExUnit
Module
ExUnit.CaptureLog
Description
Parallelize log dispatch when multiple processes are capturing log
Type
enhancement
Tool
ExUnit
Module
ExUnit.Case
Description
Add `:test_group` to the test context
Type
enhancement
Tool
ExUnit
Module
ExUnit.Doctest
Description
Support ellipsis in doctest exceptions to match the remaining of the exception
Type
enhancement
Tool
ExUnit
Module
ExUnit.Doctest
Description
Add `:inspect_opts` option for doctest
Type
enhancement
Tool
IEx
Module
IEx
Description
Support multi-line prompts (due to this feature, `:continuation_prompt` and `:alive_continuation_prompt` are no longer supported as IEx configuration)
Type
enhancement
Tool
IEx
Module
IEx.Autocomplete
Description
Functions annotated with `@doc group: "Name"` metadata will appear within their own groups in autocompletion
Type
enhancement
Tool
Logger
Module
Logger
Description
Accept any enumerable in `Logger.metadata/1`
Type
enhancement
Tool
Mix
Module
mix
Description
Add support for `MIX_PROFILE_FLAGS` to configure `MIX_PROFILE`
Type
enhancement
Tool
Mix
Module
mix compile
Description
Debug the compiler and type checker PID when `MIX_DEBUG=1` and compilation/verification thresholds are met
Type
enhancement
Tool
Mix
Module
mix compile
Description
Add `Mix.Tasks.Compiler.reenable/1`
Type
enhancement
Tool
Mix
Module
mix deps.compile
Description
Support `MIX_OS_DEPS_COMPILE_PARTITION_COUNT` for compiling deps concurrently across multiple operating system processes
Type
enhancement
Tool
Mix
Module
mix help
Description
Add `mix help Mod`, `mix help :mod`, `mix help Mod.fun`, `mix help Mod.fun/arity`, and `mix help app:package`
Type
enhancement
Tool
Mix
Module
mix format
Description
Add options to mix format to allow excluding of files
Type
enhancement
Tool
Mix
Module
mix test
Description
Add `--name-pattern` option to mix test
Type
enhancement
Tool
Mix
Module
mix test
Description
Allow to distinguish the exit status between warnings as errors and test failures
Type
enhancement
Tool
Mix
Module
mix xref graph
Description
Add support for `--format json`
Type
enhancement
Tool
Mix
Module
mix xref graph
Description
Emit a warning if `--source` is part of a cycle
Type
enhancement
Tool
Mix
Module
Mix
Description
Support the `:compilers` option
Type
enhancement
Tool
Mix
Module
Mix.Task.Compiler
Description
Add `Mix.Task.Compiler.run/2`
Type
bugfix
Tool
Elixir
Module
Code
Description
Return error on invalid unicode sequences in `Code.string_to_quoted/2` instead of raising
Type
bugfix
Tool
Elixir
Module
Code
Description
Properly handle column annotation for `in` in `not in` expressions
Type
bugfix
Tool
Elixir
Module
DateTime
Description
Do not truncate microseconds regardless of precision in `DateTime.diff/3`
Type
bugfix
Tool
Elixir
Module
Enum
Description
Fix infinite loop on `Enum.take/2` with negative index on empty enumerable
Type
bugfix
Tool
Elixir
Module
File
Description
Properly handle permissions errors cascading from parent in `File.mkdir_p/1`
Type
bugfix
Tool
Elixir
Module
Inspect
Description
Inspect ill-formed structs as maps
Type
bugfix
Tool
Elixir
Module
Kernel
Description
Properly increment metadata newline when `?` is followed by a literal newline character
Type
bugfix
Tool
Elixir
Module
Kernel
Description
`not_a_map.key` now raises `BadMapError` for consistency with other map operations
Type
bugfix
Tool
Elixir
Module
Protocol
Description
`defstruct/1` and `defexception/1` are now disabled inside `defprotocol` as to not allow defining structs/exceptions alongside a protocol
Type
bugfix
Tool
Elixir
Module
Regex
Description
Fix `Regex.split/2` returning too many results when the chunk being split on was empty (which can happen when using features such as `/K`)
Type
bugfix
Tool
Elixir
Module
Stream
Description
Ensure `Stream.transform/5` respects suspend command when its inner stream halts
Type
bugfix
Tool
Elixir
Module
URI
Description
Several fixes to `URI.merge/2` related to trailing slashes, trailing dots, and hostless base URIs
Type
bugfix
Tool
ExUnit
Module
ExUnit.Assertions
Description
Fix order of pinned variables in failure reports
Type
bugfix
Tool
ExUnit
Module
ExUnit.Assertions
Description
Raise if attempting to raise an assertion error with invalid message (not a binary)
Type
bugfix
Tool
ExUnit
Module
ExUnit.Case
Description
Do not crash on empty test unit groups
Type
bugfix
Tool
IEx
Module
IEx
Description
Abort pipelines when there is an error in any step along the way
Type
bugfix
Tool
Mix
Module
mix cmd
Description
Preserve argument quoting in subcommands by no longer performing shell expansion. To revert to the previous behaviour, pass `--shell` before the command name
Type
bugfix
Tool
Mix
Module
mix compile
Description
Fix bug where reverting changes to an external resource (such as HEEx template) after a compilation error would make it so the source module would not be compiled
Type
bugfix
Tool
Mix
Module
mix compile
Description
Avoid failures when locking compilation across different users
Type
bugfix
Tool
Mix
Module
mix compile
Description
Fix race condition when renaming files used by the compilation lock
Type
bugfix
Tool
Mix
Module
mix format
Description
Ensure the formatter does not go over the specified limit in certain corner cases
Type
bugfix
Tool
Mix
Module
mix release
Description
Fix `RELEASE_SYS_CONFIG` for Windows 11
Type
bugfix
Tool
Mix
Module
mix test
Description
Ensure modules are preloaded in `mix test --slowest-modules=N`
Type
bugfix
Tool
Mix
Module
mix xref graph
Description
Provide more consistent output by considering strong connected components only when computing graphs
Type
soft_deprecation
Tool
Elixir
Module
Inspect.Algebra
Description
`next_break_fits` is deprecated in favor of `optimistic`/`pessimistic` groups
Type
soft_deprecation
Tool
Elixir
Module
Node
Description
`Node.start/2-3` is deprecated in favor of `Node.start/2` with a keyword list
Type
soft_deprecation
Tool
Mix
Module
mix compile
Description
`--no-protocol-consolidation` is deprecated in favor of `--no-consolidate-protocols` for consistency with `mix.exs` configuration
Type
soft_deprecation
Tool
Mix
Module
mix compile.protocols
Description
Protocol consolidation is now part of `compile.elixir` and the task itself has no effect
Type
hard_deprecation
Tool
Elixir
Module
Code
Description
Warn if line-break characters outside of `\r` and `\r\n` are found in strings according to UX#55. This warning will be fast-tracked into an error for security reasons in Elixir v1.20, following a similar rule to bidirectional control characters. They will already raise if found in comments
Type
hard_deprecation
Tool
Elixir
Module
Code
Description
The `on_undefined_variable: :warn` is deprecated. Relying on undefined variables becoming function calls will not be supported in the future
Type
hard_deprecation
Tool
Elixir
Module
File
Description
Passing a callback as third argument to `File.cp/3` is deprecated, pass it as a `on_conflict: callback` option instead
Type
hard_deprecation
Tool
Elixir
Module
File
Description
Passing a callback as third argument to `File.cp_r/3` is deprecated, pass it as a `on_conflict: callback` option instead
Type
hard_deprecation
Tool
Elixir
Module
Kernel
Description
The struct update syntax, such as `%URI{uri | path: "/foo/bar"}`, now requires the given variable (or expression) to explicitly pattern match on the struct before it can be updated. This is because, thanks to the type system, pattern matching on structs can find more errors, more reliably, and we want to promote its usage. Once pattern matching is added, you may optionally convert the struct update syntax into the map update syntax `%{uri | path: "/foo/bar"}` with no less of typing guarantees
Type
hard_deprecation
Tool
Elixir
Module
Kernel.ParallelCompiler
Description
Passing `return_diagnostics: true` as an option is required on `compile`, `compile_to_path` and `require`
Type
hard_deprecation
Tool
Logger
Module
Logger
Description
The `:backends` configuration is deprecated, either set the :default_handler to false or start backends in your application start callback
Type
hard_deprecation
Tool
Mix
Module
mix
Description
The `:default_task`, `:preferred_cli_env`, and :preferred_cli_target configuration inside `def project` in your `mix.exs` has been deprecated in favor of `:default_task`, `:preferred_envs` and `:preferred_targets` inside the `def cli` function
Type
hard_deprecation
Tool
Mix
Module
mix do
Description
Using commas as task separator in `mix do` (such as `mix do foo, bar`) is deprecated, use `+` instead (as in `mix do foo + bar`)