TL;DR
Elixir v1.20 now includes a gradually typed system with type inference and the dynamic() type, allowing detection of verified bugs without adding type annotations. This marks a significant step in static analysis for the language.
Elixir v1.20 has been officially released, introducing a gradually typed system that performs type inference and verifies bugs in existing code without requiring developers to add type annotations. This development marks a significant milestone in making Elixir more developer-friendly while enhancing code safety and reliability.
The new type system in Elixir v1.20 is based on set-theoretic types and includes a dynamic() type that allows for gradual typing. Unlike other systems that rely on an explicit any() type, Elixir’s dynamic() type enables the language to infer types and narrow them as code executes, reducing false positives and improving bug detection.
Elixir’s type inference works seamlessly with existing code, identifying dead code and verified bugs by analyzing type compatibility and narrowing. The implementation performs well in benchmarks, passing 12 of 13 categories, which demonstrates its ability to recover precise type information from typical Elixir codebases.
Why It Matters
This update is significant because it enhances Elixir’s ability to detect bugs and dead code without burdening developers with additional annotations. It also strengthens the language’s safety guarantees while maintaining its dynamic nature, making it more appealing for production use and large codebases.
By integrating a set-theoretic, gradual type system, Elixir bridges the gap between dynamic flexibility and static safety, potentially influencing how other dynamically typed languages approach type inference and verification.

Elixir in Action, Third Edition
As an affiliate, we earn on qualifying purchases.
As an affiliate, we earn on qualifying purchases.
Background
Elixir has historically been a dynamically typed language, emphasizing developer productivity and flexibility. In 2022, the Elixir community announced efforts to incorporate set-theoretic types, and by June 2023, published a paper on the design of this type system. The move to v1.20 marks the transition from research to practical implementation, driven by partnerships with CNRS and sponsors like Fresha and Tidewave.
This release builds on prior experimental work, aiming to improve code safety and maintainability without disrupting existing workflows, unlike traditional static type systems that require explicit annotations.
“The v1.20 release marks a milestone in making Elixir more robust and developer-friendly through gradual typing and type inference.”
— Elixir core team member
“Elixir’s dynamic() type allows for precise bug detection without the false positives common in other gradual type systems.”
— Elixir type system researcher

INSBAHA Anti-Static Keychain – ESD Tool & Static Remover – Electrostatic Belt
High-quality ABS plastic structure, excellent conductive resin, (about 120,000 ohms) resistance.
As an affiliate, we earn on qualifying purchases.
As an affiliate, we earn on qualifying purchases.
What Remains Unclear
It is still unclear how widespread adoption will be among existing Elixir developers or how the type system will integrate with complex, real-world projects. Additionally, the long-term impact on performance and developer workflow remains to be seen as more projects adopt the new system.
Elixir type inference software
As an affiliate, we earn on qualifying purchases.
As an affiliate, we earn on qualifying purchases.
What’s Next
Next steps include monitoring how developers adopt the type system, gathering feedback, and refining the algorithms for better performance and usability. Further updates may extend type inference capabilities and improve error messaging, with potential integration of optional annotations in future releases.

Rehabilitation Advantage Right Handed Slip-On Keyboard Typing Assistance Tool, Large, Tan
Intended to help user's easily type on keyboards of any size
As an affiliate, we earn on qualifying purchases.
As an affiliate, we earn on qualifying purchases.
Key Questions
What is the main benefit of Elixir v1.20’s new type system?
It allows for automatic type inference and bug detection in existing code without requiring developers to add type annotations, improving code safety and reducing bugs.
How does the dynamic() type differ from other gradual type systems?
Unlike the common any() type, dynamic() in Elixir can narrow as code executes, enabling more precise bug detection while avoiding false positives.
Will this require changes to existing Elixir projects?
No, the new system works with existing codebases without requiring annotations, although developers can benefit from additional type hints if desired.
What are the limitations or uncertainties of this release?
It is not yet clear how well the system performs in large, complex projects or how it will impact development workflows long-term.
Source: Hacker News