Anyone working on a Kamal2-style deployment tool for Elixir/BEAM or anything else to help make deployment easier?

I discovered Elixir six years ago, and it’s been one of my favorite languages since. It feels like cheating — fun, easy to write, and easy to reason about. I’ve spent more time and money on Elixir/BEAM content than any other language.

Elixir is often marketed as a tool for everyone — from solo devs to large teams — and I believe that, especially with tools like Phoenix, LiveView, Nerves, and Nx. With Phoenix, I can build full-featured web apps on my own with far less effort than in Go, JavaScript, or Rust.

But that’s where the smooth experience ends. Deployment feels clunky and inconsistent, especially compared to the elegance of writing Elixir or the convenience of modern serverless platforms. I don’t mind spinning up a VPS and throwing a container on it, but it feels primitive compared to what other ecosystems offer.

Serverless feels almost too good to ignore. Sure, there are concerns about vendor lock-in or surprise bills, but with open-source options and better billing safeguards, those risks are becoming manageable.

Last weekend, I was building something and wanted to use Phoenix — it would’ve been 10x easier and more enjoyable — but deployment made me hesitate. I ended up using Rust with Cloudflare Workers instead.

So here’s my question: is the Elixir core team or community working on simpler deployment solutions for solo devs — something like Kamal2, but for the BEAM? I get that orchestrating BEAM nodes is powerful and part of the magic, but for many solo devs, deployment feels like muddy plumbing compared to writing Elixir. And while BEAM might offer better performance-per-dollar on a VPS, that often misses the point — solo devs would rather save time and ship faster using platforms like Vercel or CF Workers.

TL;DR: Is anyone working on a Kamal2-style deployment tool for Elixir/BEAM to help solo devs harness its full power without the deployment headaches?

1 Like

Have you took a look at: GitHub - thiagoesteves/deployex: The ideal project to supervise your Elixir/Erlang/Gleam application?

6 Likes

wow thank you so much, this is the first time seeing this project. From reading the desc, it seems like everything i want, i will give the beam talk a watch now

Did you try hosting phoenix on fly? If you’re fine with vendor lock in I don’t see that option be any more difficult than other serverless platforms.

This concern comes up quite often, but I don’t really understand why we need a elixir specific tool here. Especially once you’re in docker deployment land there’s absolutely no difference in deploying elixir to any other common alternative you’d use. And even if you don’t use docker for deployment I still don’t see how elixir would be any more complex than say deploying rails. You can even stick to the “install the language on the server” pattern if you want by installing erlang on your server and building a release without embedding erts. Then you don’t need to care where you build the release – no matching target triple needed between build machine and the server, but you just copy the release where you want to run it and start it there.

Once you get into NIFs things get more tricky, though in my experience this is kind of a mess no matter where you have to deal with ffi.

I honestly havent kept up with fly.io since their initial launch and subsequent outages , i did not really have much fate in them after so many outages, i understand they are new and ironing out issues. so ill give them another look

Yeah, I agree that spinning up a Docker container is the way to go. But for me, it’s really about the ergonomics. I feel like deployment is more involved and tedious than people often admit. I haven’t used Rails or Laravel, but if I weren’t using Elixir, I’d probably just go with JavaScript, Go, or Rust—mainly because deployment tends to be much simpler, and each language usually has a smooth onboarding experience.

With Elixir, though, the BEAM feels unique, and I want to make sure I’m using it the right way. I couldn’t replicate the same setup I’d have with Go or Rust because of the BEAM VM. Maybe I’m wrong, but I think there’s real value in properly orchestrating Elixir nodes during deployment, that sort of power is what serverless tries to mimic and as of now the latter is way more simpler for a solo dev, i just want similar ramp for BEAM

Edit: I also think elixir popularity would shoot, if such a simple ramp was available. As in the ability to deploy an elixir application like a pro with ease, work with multiple nodes etc it doesn’t matter if its opinionated

I don’t doubt this. I just doubt that this is a truely elixir specific problem that requires an elixir specific solution. Maybe once you get into wanting to do hot code updates, but I’d argue at that point you’re likely in “custom solution” territory anyways, because knowning if you can do a hot code update and/or doing those safely is a quite application specific problem.

1 Like

you’re right, but the ambiguity is still there. I understand its a cart before the horse sort of problem that most people in the community dont face, but I sit at a crossroad were elixir is my fav language to write, dx is nice and smooth , but then i have to step outside that comfort zone , when it comes to deployment land versus using a language i do not really like, but deployment strategy is like drag and drop

its not an urgent issue , since its clearly a skill issue. but i wish there was a specific opinionated solution that covered most grounds of BEAM capability

1 Like

I wanted to chime in to say that fly has made deployment for me with Mosslet super easy, all things considered. I’m a solo dev and workign aroudn also being a stay-at-home parent so I often feel pressed for time and headspace, and I’ve been able to run a distributed setup in production with fly and using existing tooling/packaging.

With fly there is some manual managing you have to do, but my experience with it has been really great. I’ll often have documentation opened up whenever I need to update things because I’ll forget a particular command or something. But I’ve found it’s really easy to quickly find the information you need. They’re also working on a managed postgres offering so that could be another plus for solo devs and small teams.

It might be worth revisiting fly for you — anyway didn’t mean to be such an ad for them, just thought I’d share they’re part of the stack that I feel makes it possible for me to be a solo dev.

5 Likes

Thanks for the response, i will give fly another look/shot. I just stopped taking it seriously after seeing negative press on hn and weird outages

Truth to be told, the only hard part about deploying with docker is building the images. I usually do it using gitlab runners and the config for doing that is 20-30 lines (which you can copy-paste). I am not sure what are the free tier limits on gitlab, but you can setup a 5$ hetzner VPS as a custom runner in 10 minutes.

As for deploying, if you are not doing abominations like distributed deploys, a simple docker-compose file with all your services is more than enough to get you going. My usual setup for compose is: server, postgres, nginx(or lately nginx-proxy-manager).

1 Like

You can deploy Elixir apps with Kamal.

Fly is also great.

1 Like

IMHO an Elixir project is hand down the easiest to deploy than anything else, with the exception of a fat binary Go project. Everything is contained in a release already. Now, I skip all the tooling and just rsync a release, then restart the daemon. Do you really need Kamal?

2 Likes

What about rollbacks?

roll back the code, build again, and deploy again? Or I can keep several date coded releases around; I can make it work with just a few lines of shell scripts.

I have seen fancy tools that automate all these and much more. However, as a solo-developer, I value simplicity above everything else. Everything will eventually break, at the most inconvenient time. When that happens, do I want to fix my 10 line script, or do I want to stare at 5 layers of abstractions, have no clue, and search the web in panic?

2 Likes

Sound like a very interesting option, do you build the release on your machine exclusively or it doesn’t matter?

I have a basement PC for the build. I could build on a VPS but that would be slow. The basement PC also run tests, hold backups for the database, among other things.

1 Like

There is no reason to not deploy with Kamal2 I do not see the point of having anything specific to elixir. Elixir release bundles can be deployed as a compressed file over ssh if you want nothing except a VPS you can even bundle Erlang if you want so all in one. Other then that just ship a docker container, kamal2, fly.io, Kubernetes, ECS task and IIRC there is even a AWS lambda runtime. We need less tools and more unified ways of working so we can use as much as possible the same tools no matter what is the programming language.

4 Likes

In case you need an example Elixir clustering on a Kamal+Hetzner deployment

1 Like

More on this topic