The 2023 elixir-tools Update (Vol. 5)

December 26, 2023

elixir-tools has had an incredible first year!

The amount of support from the community has far exceeded my expectations, and I couldn't be happier. I wanted to wrap up the year sharing the progress that has been made and thank all of our wonderful contributors and sponsors.

There is also a small announcement/surprise at the end 😉.

Next LS

Next LS is the main project from elixir-tools, so the star child gets to go first 😄.

As of writing, Next LS supports the following features:

  • Compiler Diagnostics
  • Go To Definition
  • Completions
  • Find References
  • Formatting
  • Hover Documentation
  • Document Symbols
  • Workspace Symbols
  • Workspace Folders
  • Credo (Extension)

Next LS is also supported in the following editors:


Tableau is the static site generator that powers this very website!

Tableau has started to become very feature complete this year, supporting most of the essentials you'd expect from any static site generator:

  • Good code and browser reloading on file change
  • Easy to use the current Node.js JS/CSS tooling
  • Extensions
  • Ability to work with "data" (either dynamic data or static files)
    • YAML Files
    • Elixir scripts (.exs files)
  • Handles stuff like Posts, RSS, sitemap, SEO.
    • Posts
    • Pages
    • RSS
    • Sitemap
    • SEO

Tableau is also very easy to use with any templating language you want! This website is built with Temple, but you can easily use EEx or even HEEx.

If you are migrating from a Jekyll site, you might take advantage of the solid library for Liquid templates.

I'd also like to give a shoutout to Leandro Pereira for the wonderful MDEx library. This markdown library uses a NIF to a rust library that supports the full CommonMark spec and the GitHub Flavored Markdown spec. This is important as it allows an easier migration for blogs and websites built in other frameworks like Jekyll.

Also, a feature that I particularly like, is that it supports syntax highlighting with tree-sitter, which means we immediately get support for almost every syntax that exists, as well as tons of colorschemes that come from the Helix text editor.

Thank you Leandro!


One side effect from building out Tableau, is that I had copy pasted the same utilities into an app for the third time, so I decided to finally make it a package.

web_dev_utils is a small package that provides modules for adding asset watchers, file watching, and browser live reloading to your library or framework.

This couldn't have been possible without Phoenix laying the foundation, so thank you Phoenix!


Here's the surprise 🎉.

I am currently building a new error tolerant parser for Elixir that I am code naming "Spitfire".

The driving factor behind this parser is to make it possible to "successfully" parse malformed or incomplete Elixir code, which will allow us to properly query the "environment" of the cursor in a text editor.

This is currently possible for proper/correct Elixir code, but not incomplete code (which occurs more often than complete code when you are in your text editor). This information will eventually allow editor tooling like Next LS to provide accurate and context aware completion candidates, among other features.

This work has been discussed in elixir-lang/elixir#12645. You can follow along there or in the Spitfire repo elixir-tools/spitfire for updates!



The discord server keeps growing!

We currently have 195 members and are getting more every day, come join the party!

Thank you

I'd like to give a huge shout out to all of the contributors, bug reporters, and to all of my GitHub sponsors! Without the support of all of you, none of this would be possible.

akoutmos andrepaes baldwindavid
brettwise chriscrabtree cigrainger
clark-lindsay dbernheisel dkarter
dvic dyackson ethangunderson
getsupered jlgeering jwright
kgautreaux leonqadirie mikl
Nezteb NFIBrokerage oestrich
PJUllrich qdentity RudolfMan
sb8244 shenaor simon-wolf
sorenone sorentwo v1d3rm3

How to get involved

If you'd like to get involved with elixir-tools, there are several ways: