Elixir is a fantastic choice for building a fast, scalable, and resilient server that is a joy to develop and maintain. Here’s why.

  • Failures are isolated in Elixir applications. An uncaught exception in Node could and often would crash the entire application.

  • Elixir lets code execute in parallel. Node applications execute code on a first-come-first-serve basis.

  • Elixir’s process isolation makes it easy to find slow, or leaky code. It’s been my experience that it’s next to impossible to track down memory leaks, and CPU hogs in a Node app.

  • Erlang/Elixir applications come with a built-in graphical debugger. Debugging Node applications in production is very hard and potentially risky.

  • Erlang’s Observer gives you a ton of information about every process in your system. Node doesn’t expose nearly as much information about the running application and runtime.

  • Logging is built into Erlang and Elixir’s core. Serious logging is an afterthought in Node applications.

  • Elixir is 10 years old, and Erlang is 35 years old.

  • Elixir is fast. Simple Phoenix requests are measured in nanoseconds, not milliseconds like Node.

  • Elixir is scalable.
  • There is a community focus on building distributed systems.

  • The Elixir documentation is extensive and extremely high quality.

  • Elixir’s Phoenix/LiveView framework lets you quickly build real-time web applications. Building a Phoenix application is much faster than building a similar React application.

  • Telemetry is a metrics library built into the Elixir core.

Elixir does have a few downsides. Here they are.

  • Elixir and Erlang are smaller communities and ecosystems than Node.

  • It’s a new language and ecosystem to learn.

  • It’s different than our other stacks. There’s value in consistency.

  • The backend language would (potentially) be different than the frontend language.