
"The problem with most tools is not that they don't work - it's that they solve the wrong problem." - Gerald Weinberg
We were one decision away from pulling in D3 or ECharts for a CodeScene-style visualisations; treemaps, chord diagrams, knowledge maps. That seemed like an obvious move. Everyone does interactive charts in JavaScript.
Stopping and asking: "why does everyone do charts in JavaScript?" changed the direction.
Round trips to a remote server are expensive. You push layout logic to the client to avoid latency. That's the premise the entire client-side charting ecosystem is built on.
In Elixir Desktop, the Phoenix LiveView server and the WebView client live in the same OS process. There is no network. Round-trip latency is effectively zero. The problem JavaScript charting solves just isn't a problem we need to solve here.
This thought flipped our decision completely. Pure Elixir SVG. Layout algorithms as pure functions - fully unit testable, no browser required. An ops-as-data pipeline: the layout module produces a list of plain Elixir structs, a shared renderer consumes that list and produces SVG, and the WebView paints what it's given. Zero JavaScript in the rendering path.
The renderer itself ships as an extension - a standalone OTP app that any plugin can load. If something better comes along, we can simply swap one extension. The code analysis plugin, the delivery flow plugin, every future plugin benefits without touching their own code.
The point isn't "Elixir over JavaScript." The point is that assumptions travel with tools. Client-side rendering is the right answer to a specific problem. Check whether that problem exists in your context before you inherit the complexity.
Ours didn't.
Always challenge the assumption you're making. ;-)














