elpd

elpd

Ten years ago I got curious: what would a Chef/Ansible-like tool look like built entirely in Elixir? One that uses Erlang distribution instead of agents installed on remote machines.

I got most of it working — SSH tunnels, remote BEAM bootstrap, transparent clustering. But in the last piece, full code loading I run out of time. Life happened. The project sat.

A few weeks ago I picked it back up. Finished the bytecode pushing and dependency resolution with some AI assist, cleaned it up to newer utilities and shipped it in a day.

What it does

Connect to a remote server over SSH, push your modules, run them. No deployment. No pre-installed app on the remote. Just SSH access and Elixir.

target = %Fusion.Target{
  host: "10.0.1.5",
  port: 22,
  username: "deploy",
  auth: {:key, "~/.ssh/id_ed25519"}
}

{:ok, manager} = Fusion.NodeManager.start_link(target)
{:ok, remote_node} = Fusion.NodeManager.connect(manager)

# Run your own modules remotely — dependencies are pushed automatically
{:ok, result} = Fusion.run(remote_node, MyApp.Worker, :process, [data])

When you call MyApp.Worker remotely, Fusion reads the BEAM bytecode, walks the dependency tree, and pushes everything the module needs. No manual tracking.

Why build this

Back then it was mainly for curiosity. The idea was that instead of python or ruby, you can run Elixir on remote machines without a full deployment pipeline. Ad-hoc tasks across a fleet. Provisioning. One-off diagnostics. Interactive remote exploration.

Fusion gives you that without leaving Elixir.

How it works (the short version)

  • 3 SSH tunnels bridge Erlang distribution through firewalls — two reverse, one forward
  • Remote BEAM bootstrap starts Elixir on the remote with flags that route all traffic through the tunnels
  • Bytecode pushing transfers compiled .beam binaries (not source) with automatic dependency resolution

Zero runtime dependencies. ~700 lines of Elixir.

Deep dive articles

I wrote a three-part series covering the internals:

  1. Running Elixir on Remote Servers with Fusion — hands-on tutorial
  2. How Fusion Works: Tunnels and Distribution — SSH tunnel architecture
  3. How Fusion Works: Bytecode Pushing — dependency resolution and code loading

Links

https://github.com/elpddev/fusion

Feedback welcome

This is a POC. I do not plan using it in prod anytime soon. If someone find this interesting I’d love to hear your thoughts. API design, use cases I haven’t considered, rough edges. Maybe someone will find this useful.

Showing Posts 1 to 2

adam12

adam12

This looks great!

I rewrote one of my older applications just recently which is an IaaS platform similar to Linode/DO/etc. I originally had it as Ruby orchestrator + a Go sidecar deployed to each hypervisor, but when I brought it over to Elixir/Phoenix I ended up using SSH as the transport for simplicity, with nothing running on the hypervisor.

I looked at doing something similar to Fusion but I couldn’t completely crack the problem. I wanted to keep things simple, but I definitely made a few compromises in the journey.

I’m going to check this out in depth once I get a free moment.

AndyL

AndyL

I dislike Ansible but have not been able to find a better replacement. So I’m rooting for you!

For design inspiration, you might like to review the work done on JetPorch, a deploy tool by Michael DeHaan, the original Ansible developer. DeHaan worked on this project for a year-ish, then abandoned the project. But IMO his design was very good! You can find the archived JetPorch repo here: ~mpdehaan/jetporch - the Jet Enterprise Professional Orchestrator - sourcehut git

— All posts loaded —

Where Next? Top

Trending in Announcing Top

mudasobwa
I fully migrated to my own harness from Anthropic/Gemini and I think it’s time to share it. Welcome DSH, the DeepSeek Harness, fully writ...
New
kip
Localize is the next generation localisation library for Elixir. Think of it as ex_cldr version 3.0. The first version will be released ...
New
quatermain
Hello, I’m sharing my plugin here in forum after some time so it has time to mature and proof yourself. I use Claude Code daily on a pr...
New
gtcode
Aloha gang, There’s a new class of AI model out from TypeSafe. Jev is their flagship model. You can learn about it here: ...
New
LostKobrakai
I’ve recently created a small library phoenix_vite integrating the vite build tooling with phoenix. It provides an igniter.installer t...
New
danschultzer
I needed something like premailer for rails, and after searching, I decided to make an easy-to-use library to handle inline styles and co...
New
kraleppa
If you’ve ever had to debug a BEAM node you know it can be a painful process. Parsing raw data, or dealing with clutter often gets in the...
New

Other Trending Topics Top

dominicletz
Hey there, I haven’t seen a list of useful Elixir specific skills for the popular AI tools yet so I’m starting one here with my first. ...
New
raa-ziq
Hi everyone :waving_hand: I wanted to share something I’ve been building — NowBlind, a random chat app designed to help people discover ...
New
KristerV
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
OndrejValenta
(I just needed to vent somewhere and LinkedIn is full of hope, or hype, I’m not sure which exactly) AI dream has many faces, but general...
New
webofbits
With AI doing more of the implementation work, I’ve been wondering how much coding I should deliberately keep doing myself. My main conc...
#ai
New
AstonJ
AI tools and services seem to be the new JS framework - with new ones popping up every 5 minutes - hence it might be worth posting one of...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews