Expert v0.2 is out
Hi everyone!
We have released Expert v0.2. This has been a big effort by several people and marks an important milestone for Expert.
This release focused on these aspects: performance, merging the Next LS indexing architecture into Expert. All planned features for the 0.3 milestone(the ElixirLS milestone) were completed, and we're releasing them now as part of 0.2.
Before we dive into the release details, let's thank the project sponsors and contributors.
Funding
As of today, the project is financially sponsored by the following companies. This money is donated to the Erlang Ecosystem Foundation and is earmarked for Expert development. This money can be distributed to people working full time on Expert. Please see the Sponsors for more information.
These funds are currently helping to pay Lucas San Roman to work on Expert full time. Lucas has been working mostly full time on Expert since June 2025.
Jump is also dedicating funds to employ Paweł Świątkowski as an open source contributor.
Since v0.1.0
Expert v0.2 includes work from 203 pull requests merged since v0.1.0. During that time, we also published 11 patch releases, delivering bug fixes and stability improvements as they were ready. This work included more reliable toolchain detection and manual configuration when automatic detection fails.
Fourteen people contributed to Expert for the first time during this release cycle, bringing the project to 97 contributors.
We'd especially like to thank AltCode and Nguyen Van Thang. AltCode improved Expert's release and installation tooling. Nguyen contributed declaration and signature help, code folding improvements, and indexer performance work. We'd also like to thank Software Mansion for sponsoring Piotr Figiela to help improve the indexer accuracy.
Contributors
Thank you to the 24 people who contributed code to Expert since v0.1.0:
alfie
AltCode
Ben Wilson
Cameron Duley
Christian Guetnga
David Bernheisel
Dhruvin Purohit
Dom-MN
Dorgan
Gabriel Ortuño
gpact
Igor de Alcantara Barroso
Jeremiah Tabb
Kevin Schweikert
Matt Van Horn
Mitchell Hanberg
Nguyen Van Thang
Paweł Świątkowski
Piotr Figiela
Quinn Wilton
Richard Kallos
Sai Asish Y
spicychickensauce
Steve Cohen
What's new
We have reworked Expert's indexer (the system that analyzes your project to find definitions and references) to be faster and more complete. Next LS used SQLite as its backend, while before this release, Expert used a combination of ETS and a :disk_log-based WAL. The old approach caused issues when multiple Expert instances ran against the same project and was generally hard to maintain. Moving to SQLite fixed both issues.
Another important piece of Next LS was its use of compiler tracers. Expert indexes your project by reading your source code files. This lets us see all the code you wrote and accurately index it, but definitions created through macros or metaprogramming were invisible. Compiler tracers provide the BEAM metadata that the compiler sees, including functions and modules created through macros. However, they do not include anything for .exs files because those files do not run through the compiler. Expert can index your code while or before it is compiled, so we implemented a middle ground: we now read your compiled .beam files to index generated code that source analysis cannot find.
Aside from that, we've also made several performance improvements, which were backported to the 0.1 releases due to their impact. Users have reported the indexer running about 6x faster, and the ElixirSense completions cache has received a similar speedup, drastically reducing the overall startup times for Expert. Code formatting has also been improved, preventing the Expert formatter from freezing on large codebases and making it easier for clients to apply changes efficiently.
As an example, on a moderately large project like Sequin, we've seen a drop in indexing time, memory and disk usage compared to the initial v0.1 release:
| v0.1.0 | v0.2.0 | Improvement | |
|---|---|---|---|
| Indexing time | 98.88 s | 14.61 s | 6.77x faster |
| Memory usage | 1.10 GB | 638.7 MB | 42% lower |
| Index disk use | 726.1 MB | 49.5 MB | 93% lower |
On top of that, we've also ported the remaining Next LS features that were missing from Expert:
- Document Outline for files with syntax errors
- Workspace Folders
- "Add missing require" and "Create undefined function" code actions
The following features from ElixirLS were ported into Expert:
We also added entirely new features:
- Hex dependency completions
- Configuration for your Elixir and OTP toolchain
- Offline support
- Remote shell for debugging
What's next
Now that we have a stable foundation, we are ready to start implementing new features that were not part of Lexical, Next LS or ElixirLS. You can track our progress by visiting our milestones.
This is where we will focus our efforts. However, you are welcome to contribute any feature or change that you think would improve Expert, even if it is not on our roadmap!
Code
If you'd like to contribute or open an issue, you can find our various projects here.
- expert-lsp/expert: the Expert source code
- expert-lsp/vscode-expert: the Visual Studio Code extension
- elixir-tools/spitfire: our error-tolerant Elixir parser
- elixir-tools/gen_lsp: the language server protocol process abstraction
- expert-lsp/expert-lsp.org: the source code for this website
How to help
Please try the release and report any bugs you find! Bug reports are most helpful when they include a reproduction case, your .expert/expert.log, OS, Elixir version, Erlang version, and project size.