GSoC project: dialyzer story for the Elixir ecosystem

Hi everyone!

Today is a special day for me: it starts officially the Google Summer of Code, and in the meantime I’m here in Barcelona, chilling with some good coffee and writing this short introduction to my project :slight_smile:

My name is Gabriel Gatu, and this summer I’ll be working on dialyzer, to try and implement a library for the elixir ecosystem that could be merged inside the elixir standard lib.

This project is under the supervision of Sean Cribbs and Jose Valim, my mentors for this task. You can find more infos about this project here:

I’m sure you’ll have a lot of questions, so I’ve tried to answer to the most common ones in the Readme of the project.

But, first of all, I would like to state that by no means I’m an expert on dialyzer, so any help/suggestion/improvement/mentorship is highly welcomed! ;D

Finally, I would like to thank all the people that contributed in these years to the dialyzer integration story for elixir, without you my work would be much harder, so I look forward to learn as much as I can from you!

If you have any question or would like to discuss together some ideas, I would be glad to talk about this with you!


This is one of the threads that gives good bits of info.

1 Like

The #dialyzer tag might be worth a look too :003:

Awesome :023: we shall look forward to your updates :smiley:


Hi @gabrielgatu :wave:, nice to meet a fellow GSoC’er :smile:. It seems like you’ve got quite an interesting challenge and the README looks really good!

Let me also use the thread to introduce myself :wink: I’m Jakub and I’ve just started working on BarrelEx, an Elixir API for BarrelDB, an distributed document-oriented database written in Erlang, and I’m mentored by Benoît Chesneau, its creator.

I’ve already covered around 50% of the API, and still need to add more test coverage as well as through documentation. The code is hosted on Gitlab due to its superior CI story but you can also see the Github mirror here


Sorry for an off-topic but I’ve worked a bit lately on gitlab, and had a really bad experience with almost everything on their platform. The pushes were extremely slow, the website constantly hanged, the CI workers were in “pending” state for tens of minutes …

So if you don’t self-host a gitlab server, github is much easier to use, in my experience. And provides free CI for open source projects with great elixir support, no “pending” jobs, and simpler configs.

1 Like

Thanks for sharing your experience, I will discuss this issue with my mentor.

The builds are a bit slow, averaging 10 minutes at the moment, and it’s kind of bugging me so I might have a look at SemaphoreCI.
At the moment the other reason why I use Gitlab is that the rest of the code for the Barrel-db project is already there
Don’t worry about going off tangent as it was already a bit of an off-topic :stuck_out_tongue:

Will this be based on dializer or are you going to write your typechecker from scratch? Will you use successs typing only, or would you be open to something like untagged unions and intersection types?

My understanding is the project means to better integrate dialyzer’s success typing with Elixir and mix, not re-implement it.

In particular, I am pretty sure they are trying to add builtin mix commands capable of faster, incremental dialyzer runs; and improve the error messages it gives from its current cryptic literal success-typing messages to the more friendly and instructive ones we are used to in Elixir, with examples/suggestions around common mistakes.


Hey jxub, nice to meet you as well and I hope you’re progressing well :smiley:
Also thanks to @christhekeele, you’ve really nailed it :slight_smile:

It’s been pretty much 1 month I’ve been working on mix-dialyzer, and I have some nice news: now mix_dialyzer is in an apha stage, where you can use it to analyse your projects based on a configuration file, get informations about your project status and manage the artefacts generated.

Inside, it already caches some common things, although I still have to implement a proper caching system.

I’ve also published a doc page, explaining every implemented functionality in detail, you can find it here:

Let me know if you have any question or suggestion to make things better :smiley: