Skip to content

Journal · September 8, 2026

Why we build in Elixir

Every product the Lab runs (Agora, m2, Wodloop, Wodlane) and every platform it has built since 2021 is written in Elixir. Not out of habit: here is the case, with what it costs.

One language, six products

Agora, m2, Wodloop, Wodlane, Keyro's platform, Roster: everything the Lab has shipped since 2021 runs on Elixir, with Phoenix for the web, LiveView for the interface and PostgreSQL underneath. Six products, one runtime, one set of habits. A team of four cannot afford six stacks, and the choice of the one had to hold for years, across a participation platform for a public utility and a competition app for CrossFit boxes.

This is the case we make to ourselves every time a new product starts: because the temptation to pick the fashionable tool is real, and because a client who asks 'why not JavaScript everywhere' deserves an answer in full sentences.

What it gives a small team

The first thing is that a whole product fits in one head. A Phoenix application is the web server, the background jobs, the real-time channels and the scheduled work in one deployable, on one runtime that was built for telephone switches and has been keeping things up for thirty years. There is no separate queue to run, no separate socket server, no cache to invalidate because the language handles a million light processes without asking. When something breaks at two in the morning it is in one log.

The second is LiveView. An interface that updates live, a leaderboard during a competition, a vote count on a participatory budget, a schedule as members book, is written once, on the server, in the same language as the business rules. There is no API to version between a frontend team and a backend team because there is neither. For a lab that ships a product every year, the day that saves is not the first one; it is every day after, when a change touches one file instead of three.

The third is the discipline the language pushes on you. Immutable data, explicit pattern matching, processes that crash and restart rather than limp on with corrupted state: the failures a system has are the ones you designed for, and the rest are loud. Ash, the framework we build our domain models with, takes that further: a resource declares its attributes, its actions and its authorisation rules in one place, and the admin console, the API and the audit trail follow from the declaration.

What it costs

Hiring. The pool of Elixir developers in France is small; we have grown ours by training people who already thought in the right shapes rather than by recruiting on the keyword. The bet is that a good engineer learns Elixir in a quarter, and it has held for every hire so far.

Libraries. There is one good library for most things and none for some. When Wodlane needed Stripe Connect there was a maintained client; when Agora needed to render a hosted receipt to PDF we drove a headless browser ourselves. A JavaScript team would have had a package for each, and, in our experience, an upgrade story for none.

Explaining. A public buyer's technical reviewer will ask about it, and 'it is what Discord and Pinterest run on' only goes so far. What answers the question is the architecture the language makes cheap: one instance per client, on its own release and its own database, which is the honest answer to their security questionnaire. Elixir did not decide that; it made it affordable.

When we would not choose it

A mobile app the store has to review: we build the member app for Wodloop in a mobile framework and talk to the Phoenix backend. Heavy numerical work, a model, a large batch transformation, belongs in Python or a database, and Elixir is happy to orchestrate it. A brochure site with no state: the CMS this site runs on is Elixir because we made it, but a static generator would do.

Everything else, a platform with users, rules, deadlines, live screens and a back office, is where the language earns its keep. That is what the Lab makes, which is why the choice has not moved in five years, and why the next product will make it again.