From Rails to Phoenix: Why we Switched from ASDF to Mise for Tool Version Management
Hello everyone, I am Ziyan, a lead engineer at Edge Payment Technologies, Inc., where I've been immersed in code since joining in 2022 as a senior software engineer. These days, I helm our Tooling Division, keeping our main application humming along while wrangling supporting tools like Invoices and Paylinks. I also chip in on our SDKs, making sure developers have a smooth ride integrating with our payment platform. If you've ever wondered what it takes to migrate a battle-tested Ruby on Rails app to Phoenix on Elixir without breaking a sweat—or at least, without too many all-nighters—stick around. Today, I want to dive into a quieter but game-changing part of that journey: ditching ASDF for Mise in our tool version management.
A Quick Trip Down Memory Lane: Our Stack's Evolution
Our flagship Edge app started life on Ruby on Rails v7, running on Ruby 3, with ERB templates, Stimulus JS for the frontend spice, PostgreSQL and Redis under the hood, Sidekiq handling the heavy lifting for background jobs, and a solid testing suite of RSpec plus Playwright for end-to-end checks. We exposed a JSON API v1 that powered everything from merchant dashboards to seamless payment flows. Tooling-wise, we'd evolved through the classics: rbenv, then RVM, and eventually landed on ASDF for its multi-language prowess. It kept our Rubies, Nodes, and what-have-yous in check across the team.
But from the early days, there was this itch to go functional. Elixir and Phoenix promised fault-tolerant, scalable magic that Rails just couldn't match for our growing transaction volumes—especially with banking partners breathing down our necks for reliability. Approval delays hit (year-end spikes don't care about your migration dreams), but we turned that waiting game into action. About a year ago, we flipped the switch: Phoenix took the wheel, Heex templates replaced ERB, we blended Phoenix Hooks with Alpine JS for client-side interactivity, swapped Sidekiq for Oban, and leaned into Phoenix's built-in testing alongside Playwright. PostgreSQL stuck around as our reliable DB anchor.
The migration was a beast, but it paid off in spades—fewer outages, blazing performance, and a team that's actually excited about Elixir's concurrency superpowers. But amid the framework fireworks, one upgrade flew under the radar: our tooling shift from ASDF to Mise. If you're knee-deep in polyglot setups like ours, this is the unsung hero that kept our devs sane.
What Are ASDF and Mise, Anyway?
For the uninitiated, ASDF is a CLI tool for managing runtime versions across languages—think Ruby, Elixir, Node.js, you name it. It's plugin-based, so you pull in what you need, and it handles shims to point your shell to the right versions per project. We loved it during the Rails era for juggling Ruby patches without global drama.
Enter Mise (pronounced "meez," short for mise-en-place, the chef's prep mantra). It's a Rust-powered drop-in successor to ASDF, designed to fix the pain points while keeping the good stuff. We started with ASDF post-migration for Elixir management, but as our workflows got more complex—mixing Elixir builds, JS tooling for Alpine, and even some lingering Ruby SDK maintenance—the cracks showed. That's when I pulled the trigger on Mise. And folks, it was like upgrading from a flip phone to a smartphone.
The Real Wins: Why Mise Crushed It for Our Team
Here's the meat: after months of hands-on use, Mise isn't just "better"—it's transformed how our Tooling Division operates. Let me break down the top advantages, straight from the trenches.
1. Blistering Speed That Actually Saves Hours
ASDF's shell-script heart meant installs and switches could drag, especially on CI/CD pipelines or when onboarding new hires. We're talking minutes per tool bump during peak seasons. Mise? It's Rust-fast—benchmarks show it's up to 7x quicker for installs like Elixir or Node. In our case, what used to take 5-10 minutes per dev setup now clocks under a minute. That's hundreds of hours reclaimed across the team, letting us focus on SDK tweaks instead of waiting games.
2. Ditching Shims for Sane, Reliable PATH Management
ASDF's shim system—those little wrappers that redirect commands—sounds clever until it bites you with edge cases, like mismatched paths in Docker or weird interactions with our Oban jobs. We'd debug "command not found" gremlins way too often, especially when mixing Phoenix Hooks with Alpine's JS ecosystem. Mise skips shims entirely, using a smart PATH hook that prepends the right envs on-the-fly. No more ghosts in the machine; our E2E Playwright runs went from flaky to rock-solid overnight.
3. Team-Friendly Configs and Conflict Resolution
With a distributed team tweaking Invoices and Paylinks in parallel, version drift was a nightmare under ASDF. One dev on Elixir 1.15, another on 1.18—boom, merge conflicts and "it works on my machine" hell. Mise shines here with built-in env var exports and task running, plus seamless ASDF plugin compatibility. We dropped a simple .mise.toml
into our repo roots, and suddenly everyone's synced without the old plugin-hunting rituals. It nixed our version squabbles, saving us from those 2 AM Slack pings.
4. Simpler CLI and Broader Workflow Smarts
ASDF's commands? Solid, but you'd asdf -h
every other week. Mie's CLI is intuitive—mise install
, mise use
, mise exec
for one-offs—and it bundles task management like running scripts in the right env. For our SDK maintenance (still some Ruby love), this means quick switches without context loss. Plus, it's lighter on resources.
5. Future-Proof Ecosystem
Mise isn't reinventing the wheel—it taps ASDF's vast plugins but layers on Rust efficiency and curated additions. As we eye more Elixir concurrency experiments or even dipping into other langs for tooling, Mie's extensibility feels limitless. No more "why isn't this plugin maintained?" headaches.
Wrapping It Up: Mise, Meet Your New Dev Bestie
Switching to Mise wasn't a flashy Phoenix migration headline, but it's the quiet upgrade that's kept our Edge app—and our sanity—intact. From the Rails days' ASDF loyalty to today's Elixir-powered future, it's clear: when your tooling lags, your whole stack suffers. If you're wrestling with version managers in a hybrid setup, give Mise a spin. It's drop-in easy, wicked fast, and just works.
What's your go-to for tool management? Drop a comment—I'm always up for geeking out on this stuff. Until next time, keep building those unbreakable apps.
Cheers,
About the Author
Ziyan Junaideen -
Ziyan is an expert Ruby on Rails web developer with 8 years of experience specializing in SaaS applications. He spends his free time he writes blogs, drawing on his iPad, shoots photos.