We are deprecating tuistenv in favor of Mise
In this blog post, we share why we are deprecating tuistenv in favor of mise, a runtime executor that allows you to manage multiple versions of a tool and activate the right one when you choose a directory in your terminal.
If you’ve used Tuist for a while,
you probably know that Tuist’s default installation installs a version manager,
tuistenv
,
which allows you to install multiple versions of Tuist and switch between them easily.
We built this early in the life of Tuist,
because installation solutions like Homebrew are not able to install and activate multiple versions of the same tool.
Using the same Tuist version across environments is important to avoid non-deterministic results across environments.
Do you remember when you used to do bundle exec pod install
?
Bundler,
Ruby’s official dependency manager,
provides that exec
command to ensure everyone is using the same version pinned in the Gemfile.lock
file.
As we shared earlier this year, one of our focus this years is to make Tuist sustainable, and that means we need to focus on the core features that make Tuist great. Version management is not one of them. But if Homebrew is not a sensible solution for Tuist, what could we use instead?
Luckily, a few years ago I had the opportunity to met with Jeff Dickey.
He’s one of the talented engineers behind OCLIF,
a framework for building command line interfaces,
and a person I admire for his work on open source and CLI tools.
He told me about a new project of him,
mise,
which he describes as a “runtime executor”.
mise
can manage multiple versions of a tool,
and not only that, but activate the right one when you choose a directory in your terminal.
It does it by using a .tools-version
file in the directory,
which contains the version of the tool that should be used in that directory and its subdirectories.
Sounds familiar? We solved the exact same problem with tuistenv
and the .tuist-version
file.
It sounded too good to be true, so we decided to give it a try.
Tuist uses it to manage and activate versions of tuist
(which we use with Tuist itself), swiftformat, and swiftlint, and it’s been working great so far.
It’s proven to be one of those tools that works so well that you forget it’s there.
mise
includes handy commands like ls-remote
, which lists all the remotely-available versions:
After thorough usage and having a great experience, we’ve decided to deprecate tuistenv
in favor of mise
.
If you are currently using tuistenv
to manage Tuist versions, we recommend you to migrate to mise
by following the instructions below.
We’ll continue to support tuistenv
until we release the next major version of Tuist in January, Tuist 4.
We are sharing this early so you have time to migrate and give us feedback.
We belive mise
is the right solution for Tuist. It provides a great developer experience, it’s very well maintained and stable, and most importantly, it’ll allow us to focus on the core features that make Tuist great.