Ok, this is probably a bit out of left field but I thought I would share this, just for fun ![]()
What is it?
A visual editor for making Elm code/programs using blocks and connecting them together:
It is written in elm and compiles to elm. Press the compile button at the top to see the result.
How do you use it?
You add blocks to the model (by dragging or just typing in the canvas) and connect outputs to inputs. If a block is purple, it is a function and you can double click it to look âinsideâ.
Does it work?
Kind of, but probably not very well! But I made one more complicated model, just to show it is possible:
Why did I make it?
Basically I made it (well about 60% of it) many years ago in elm 0.18, long before LLMs and vibe coding. And back then I worked as a developer for automotive control systems, which are almost all built using visual tools to make block diagrams (Simulink). I got into my head it would be interesting to see what general purpose programming would look like using that approach. And Elm seemed like the perfect fit, a simple pure language maps directly to block diagram editing.
At the time I didnât have enough motivation to finish it, and moving to elm 0.19 was difficult, so it was just abandoned. But with LLMs now doing amazing things, I thought it would be fun to see if it could be resurrected.
Other reasons why I quite enjoyed it and ended up spending a fair bit of time on it are that I always wanted to understand type inference and compilation better and this actually taught me a lot about them. The program basically has to do full type inference over the model every time it is changed.
Is it a good idea?
No! I donât think so. At one point I guess I thought there were some advantages to using a visual programming tool, and it seems quite hard to convince control systems engineers to use text based programming. But now, with LLMs, I think visual programming is clearly a bad idea.
Vibe coding comments
I havenât touched elm for quite a few years and as I said the code was in elm 0.18. Claude Code made upgrading it to the point it compiled and worked using 0.19.1 quite painless. It would have been tedious to do by hand. Fixing the type inference code (I had an awful/broken adhoc algorithm) was definitely easier with LLM help, but needed a lot of human input/guiding. Elmâs type system definitely seems to help keep LLM coding on track. I would definitely not have done it without LLMs (and some might say that would be a good thing!).
Final thoughts
I had fun making it and learned some new stuff, so I am glad I did it. But ultimately it just convinced me how terrible an idea it would be to actually use visual programming. The game demo was generated in about 10 seconds by Claude Code and then took me a day and a half to manually create using the block diagram editor!
So maybe it is a strange curiosity to have a quick look at. But any comments are welcome, even just to say how bad the idea is ![]()
Happy Easter.
