Before I dive in, I’d like to remind my readers why they might be receiving this in their inbox.
It may have been a long time ago, but you signed up for a mailing list on the Ash Framework website. I never actually used that mailing list, but I very much intend to use this one.
So what are we doing here?
From here on, I’ll be communicating a bit more frequently, and in longer form than my usual tweet announcements. The Ash community continues to grow, and I think it will behoove me to share a bit more of my voice than a changelog, or simple feature announcements.
What will I be writing about, you ask? Why, anything and everything! While you may know me from my obsession with shipping code, I am, in fact, more than a feature-shipping machine. There are lots of things I’d like to talk to you all about. From Ash & Elixir, to things that I find personally interesting, to open source & ethics.
I’d like to hear from you, too! Click below to tell me about yourself, and what you’d like to get out of this news letter.
Is that really it??
Not wanting to leave you all bored from a simple welcome email, let’s dive into our first topic! 🔥
Igniter
My latest project, and where a lot of my energy is going these days, is called Igniter. Igniter is a code generation and project patching framework. The level of DX that it provides for those writing and using code generators and installers in Elixir is, in my opinion, unparalleled.
Christian Alexander posted an awesome introductory video the other day. I was really pleased to see such a well made and informative introduction to igniter. Check it out, as well as his other content if you haven’t!
Why igniter?
Generators suck
It was high time to add generators and installers for our Ash packages. The setup was far too manual. With that said, I’ve always hated code generators as a general pattern. I’ve avoided them for years.
I was not willing to write a simple “copy templates to files” generator for new Ash projects. We needed to provide a first class experience, and build on a solid tool.
Some of the things that igniter does to provide a high quality experience:
AST based patching of code
Automatic discovery of installers
Composable generators
Diffs and confirmation of changes
DX is what Elixir needs
As someone who has been a member of the Elixir community for almost 10 years now, I know that the DX of Elixir is unparalleled. However, there are a class of things that are highly visible when new people join our community.
Our language server is lacking
Getting started is hard
Language Servers
This is not news to anyone, really, and I won’t harp on it here. The language server teams have worked hard at improving this problem, and I think that people are often far too hard on them. High quality language servers can be multi-year projects for multiple full time engineers. The most important news here is the formation of the official language server team. I was giddy when I heard the news!
Getting started
The main way that people enter into the Elixir ecosystem is via some kind of toolchain or framework. For instance, Phoenix, Ash, NX, Livebook, etc. I think we can drastically underestimate the amount of people who will bounce off of the Elixir ecosystem due to even small amounts of friction at the outset.
If we can give them a seamless getting started experience, with installers that allow them to incrementally adopt new parts of the Elixir ecosystem, with a simple, easy-to-remember CLI, then we can help smooth the way for these new folks to join our community and help bring Elixir out of its niche and put it in its rightful place.
So where is it headed?
By the time Igniter has become what I know that it can become, it will be like npm install on steroids. It will be like `brew install` but for installing libraries into your app. Your one stop shop. Additionally, it will overhaul existing generators to have a better UX, and allow for writing a whole new class of tasks with ease, like upgrade scripts and project transformers.
For one such example, see
mix igniter.update_gettext, a magic one-liner to modify your project to resolve a warning from gettext.
Thats it folks!
Thank you all for reading, and I hope to continue to awe and amaze with more rambles for many years to come. Don’t forget to take the survey! I’d love to hear from you.
Happy hacking 😎