<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Safigo</title>
    <description>The latest articles on DEV Community by Safigo (@safigo).</description>
    <link>https://dev.to/safigo</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3799178%2F9b78bcc1-7a4d-4c3e-b09a-122e6ed21d4b.png</url>
      <title>DEV Community: Safigo</title>
      <link>https://dev.to/safigo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/safigo"/>
    <language>en</language>
    <item>
      <title>Project-based local environment with mise-en-place</title>
      <dc:creator>Safigo</dc:creator>
      <pubDate>Tue, 17 Mar 2026 02:17:00 +0000</pubDate>
      <link>https://dev.to/safigo/project-based-local-environment-with-mise-en-place-fh2</link>
      <guid>https://dev.to/safigo/project-based-local-environment-with-mise-en-place-fh2</guid>
      <description>&lt;h2&gt;
  
  
  Development environment
&lt;/h2&gt;

&lt;p&gt;Do you work on open source, commercial projects, or several projects at once?&lt;/p&gt;

&lt;p&gt;Many of us do, usually with a mix of all of them.&lt;br&gt;
For example, this blog is built with Astro, and it can become outdated if I do not touch it for a while.&lt;br&gt;
How can we make sure builds stay reproducible and still work years later?&lt;/p&gt;

&lt;p&gt;Modern development relies on a few layers of version management:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dependency management, like &lt;code&gt;package.json&lt;/code&gt;, &lt;code&gt;go.mod&lt;/code&gt;, &lt;code&gt;Cargo.toml&lt;/code&gt;, etc.&lt;/li&gt;
&lt;li&gt;Deployment environments like Docker/Podman, cloud VM images, etc.&lt;/li&gt;
&lt;li&gt;OS package managers like &lt;code&gt;pacman&lt;/code&gt;, &lt;code&gt;apt&lt;/code&gt;, &lt;code&gt;yum&lt;/code&gt;, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of this works well when we target isolated environments.&lt;br&gt;
We build one cloud instance per service, one Dockerfile per app, and one dependency manifest per project.&lt;/p&gt;

&lt;p&gt;But in my local development environment, I still struggle.&lt;/p&gt;

&lt;p&gt;Most of the time I use macOS, but recently I also started using Arch Linux.&lt;br&gt;
Both operating systems have great package managers.&lt;br&gt;
On macOS I use &lt;a href="https://brew.sh/" rel="noopener noreferrer"&gt;Homebrew&lt;/a&gt;, on Arch Linux, &lt;code&gt;pacman&lt;/code&gt; and AUR are more than enough for me.&lt;/p&gt;

&lt;p&gt;But when I work on different projects, they have different requirements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Different compiler versions&lt;/li&gt;
&lt;li&gt;Extra tools, such as &lt;a href="https://github.com/amacneil/dbmate" rel="noopener noreferrer"&gt;dbmate&lt;/a&gt;, &lt;a href="https://pre-commit.com/" rel="noopener noreferrer"&gt;pre-commit&lt;/a&gt;, &lt;a href="https://prek.j178.dev/" rel="noopener noreferrer"&gt;prek&lt;/a&gt;, &lt;a href="https://biomejs.dev/" rel="noopener noreferrer"&gt;biome&lt;/a&gt;, &lt;a href="https://golangci-lint.run/" rel="noopener noreferrer"&gt;golangci-lint&lt;/a&gt;, etc.&lt;/li&gt;
&lt;li&gt;Project-specific configuration requirements, like environment variables and bootstrap scripts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And the most frustrating part: versions must be exact.&lt;br&gt;
Many tools are not backward compatible (especially linters and language toolchains), so one update can break expected behavior.&lt;/p&gt;
&lt;h2&gt;
  
  
  Testing solutions
&lt;/h2&gt;

&lt;p&gt;Over the years, different teams I worked with tried many ways to solve this and build a reproducible environment.&lt;/p&gt;
&lt;h3&gt;
  
  
  Virtual machine with file sync
&lt;/h3&gt;

&lt;p&gt;In my experience, the most obvious solution was a preconfigured project VM.&lt;br&gt;
I had to configure source synchronization and run everything remotely.&lt;/p&gt;

&lt;p&gt;This works in many cases, but it is not very comfortable, and everyone depends on a good internet connection.&lt;br&gt;
If you need to upload something large (I can only imagine uploading &lt;code&gt;node_modules&lt;/code&gt;. I would run &lt;code&gt;pnpm install&lt;/code&gt; directly on the server),&lt;br&gt;
it is painful. It takes time, and sometimes it fails entirely.&lt;/p&gt;

&lt;p&gt;Remote debugging is a separate topic, but it is rarely a pleasant experience.&lt;/p&gt;

&lt;p&gt;It also does not solve outdated projects well, where you need an older version of &lt;code&gt;Python&lt;/code&gt;.&lt;br&gt;
That can mean one VM per project if it falls outside the team's default stack.&lt;/p&gt;

&lt;p&gt;But most importantly, it's not what I personally prefer.&lt;/p&gt;

&lt;p&gt;I want to have a native local experience.&lt;br&gt;
If I want to debug something, it just works.&lt;br&gt;
I can work without internet, or with an unstable connection.&lt;br&gt;
I want to get the best experience from my IDE.&lt;/p&gt;

&lt;p&gt;It is hard to avoid LLMs now. If I use them (and many companies expect that), I still want a native local workflow.&lt;/p&gt;

&lt;p&gt;In short, I have never had a truly pleasant experience using a remote instance as my main development environment.&lt;/p&gt;
&lt;h3&gt;
  
  
  Virtual machine with IDE
&lt;/h3&gt;

&lt;p&gt;This is a relatively new idea for many developers, but not for people used to working in Vim or Emacs over terminals.&lt;/p&gt;

&lt;p&gt;Right now we have many options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/gitpod-io/gitpod" rel="noopener noreferrer"&gt;Gitpod&lt;/a&gt; - I used it when they had just started&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/codespaces" rel="noopener noreferrer"&gt;GitHub Codespaces&lt;/a&gt; - I tried it, but it feels expensive for personal use&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://code.visualstudio.com/docs/remote/vscode-server" rel="noopener noreferrer"&gt;Visual Studio Code Server&lt;/a&gt; - also an option, but not all extensions are available&lt;/li&gt;
&lt;li&gt;[N]Vim or Emacs through SSH with TMUX&lt;/li&gt;
&lt;li&gt;Google internal corporate development experience&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of these are great, but they work best for companies ready to manage developer environments with templates.&lt;/p&gt;

&lt;p&gt;They are often too expensive for personal use, and they still require internet access.&lt;br&gt;
Maybe I am old-fashioned, but sometimes I want to work offline.&lt;/p&gt;

&lt;p&gt;I'm sure many people will go for it, but it's not for me, at least for today.&lt;/p&gt;
&lt;h3&gt;
  
  
  Development Containers
&lt;/h3&gt;

&lt;p&gt;Another obvious solution is containers.&lt;/p&gt;

&lt;p&gt;The first time I tried this approach, a colleague suggested Vagrant as a dev environment.&lt;br&gt;
To be fair, it was workable, but that was more than 10 years ago, and it was less usable than most options today.&lt;/p&gt;

&lt;p&gt;Since Docker was released, deployment workflows changed significantly.&lt;br&gt;
We can now build a container and run it much more easily and cheaply across projects.&lt;/p&gt;

&lt;p&gt;Not Docker itself, but &lt;code&gt;Dockerfile&lt;/code&gt; was a revolution!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://containers.dev/" rel="noopener noreferrer"&gt;Development Containers&lt;/a&gt; can work well, but they still do not feel as smooth as a truly local setup.&lt;/p&gt;

&lt;p&gt;I still use Development Containers from time to time, but lately I almost completely migrated to a native experience.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 Tip: use isolated environments like virtual machines, containers, or devcontainers when running untrusted code.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Local and native experience
&lt;/h3&gt;

&lt;p&gt;I used to just install all required tools using Homebrew.&lt;br&gt;
It just works, no quirks.&lt;/p&gt;

&lt;p&gt;Until it does not.&lt;/p&gt;

&lt;p&gt;A recent example: I had a website built with &lt;a href="https://gohugo.io/" rel="noopener noreferrer"&gt;[Go]Hugo&lt;/a&gt; that I had not touched for years, except for small content updates.&lt;br&gt;
Some articles were added, edited, or removed. But &lt;a href="https://gohugo.io/" rel="noopener noreferrer"&gt;[Go]Hugo&lt;/a&gt; is not strongly backward compatible.&lt;br&gt;
When I come back to that site, it often does not build locally until I fix things. I cannot compile something that used to work.&lt;/p&gt;

&lt;p&gt;I had the same experience with Python, PHP, Ruby, and others. It is not just Hugo.&lt;/p&gt;

&lt;p&gt;So the problem is clear.&lt;br&gt;
I can pin app dependencies to keep runtime behavior stable.&lt;br&gt;
But that does not fully solve the local development environment itself.&lt;/p&gt;

&lt;p&gt;At one point, I wanted to try monorepo tooling.&lt;br&gt;
I thought a monorepo might fit one of my projects.&lt;br&gt;
I wired many separate &lt;a href="https://taskfile.dev/" rel="noopener noreferrer"&gt;Taskfile&lt;/a&gt; files together by including them in each other.&lt;/p&gt;

&lt;p&gt;After some research for something that worked for me (outside the JS/TS world), I found &lt;a href="https://moonrepo.dev/" rel="noopener noreferrer"&gt;moonrepo&lt;/a&gt; with&lt;br&gt;
&lt;a href="https://moonrepo.dev/proto" rel="noopener noreferrer"&gt;proto&lt;/a&gt;, and surprisingly it could pull various dependencies automatically.&lt;br&gt;
So, I did not need to configure an environment for my app.&lt;/p&gt;

&lt;p&gt;It downloaded and installed required languages and additional tools with specified versions.&lt;/p&gt;

&lt;p&gt;I was happy with it at first, but it was not enough. Some tools I needed were not available, so I still had to install them&lt;br&gt;
separately, which brought back the same problem.&lt;/p&gt;

&lt;p&gt;For me, it was a partial solution, not a complete one. It is definitely nice, but &lt;a href="https://moonrepo.dev/proto" rel="noopener noreferrer"&gt;proto&lt;/a&gt;&lt;br&gt;
still feels unfinished.&lt;/p&gt;
&lt;h2&gt;
  
  
  mise-en-place
&lt;/h2&gt;

&lt;p&gt;Then I discovered &lt;a href="https://mise.jdx.dev/" rel="noopener noreferrer"&gt;mise&lt;/a&gt;.&lt;br&gt;
It felt like a better fit, with even more potential as I learned it.&lt;/p&gt;

&lt;p&gt;Initially I started with a simple &lt;code&gt;[tools]&lt;/code&gt; block, like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="py"&gt;node&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"24.14"&lt;/span&gt;
&lt;span class="py"&gt;pnpm&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"10.32"&lt;/span&gt;
&lt;span class="py"&gt;go&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"1.25"&lt;/span&gt;
&lt;span class="py"&gt;golangci-lint&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"2.11"&lt;/span&gt;
&lt;span class="py"&gt;rust&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"1.94"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After configuring my Fish shell (you can check my &lt;a href="https://github.com/safigo/dotfiles/blob/main/.chezmoiscripts/run_once_000-install-mise.sh.tmpl" rel="noopener noreferrer"&gt;dotfiles repo&lt;/a&gt;),&lt;br&gt;
it just worked:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#!/usr/bin/env fish

brew install mise
echo 'mise activate fish | source' &amp;gt; ~/.config/fish/conf.d/mise.fish
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You &lt;code&gt;cd&lt;/code&gt; into a directory and get all required tools with the right versions.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; prek --version
fish: Unknown command: prek
&amp;gt; cd safigo.dev
&amp;gt; prek --version
prek 0.3.5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Plugins for JetBrains IDEs and Visual Studio Code significantly improve the experience.&lt;/p&gt;

&lt;p&gt;You simply create a &lt;code&gt;mise.toml&lt;/code&gt; configuration (&lt;a href="https://mise.jdx.dev/configuration.html#mise-toml" rel="noopener noreferrer"&gt;or another available way&lt;/a&gt;)&lt;br&gt;
and everyone who has configured &lt;strong&gt;mise&lt;/strong&gt; gets a reproducible local development environment and build results.&lt;/p&gt;

&lt;p&gt;You can install tools from many sources, including &lt;code&gt;npm&lt;/code&gt; and GitHub.&lt;br&gt;
This is one of its most important features. So far, I have not found a tool I need that I cannot install with &lt;strong&gt;mise&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Simplification by mise-en-place
&lt;/h3&gt;

&lt;p&gt;Before &lt;strong&gt;mise&lt;/strong&gt; I used to have &lt;code&gt;pyenv&lt;/code&gt;, &lt;code&gt;pyautoenv&lt;/code&gt;, &lt;code&gt;nvm&lt;/code&gt;, &lt;code&gt;goenv&lt;/code&gt;, &lt;code&gt;rustup&lt;/code&gt;, etc.&lt;br&gt;
All of that needed to be configured and kept working.&lt;/p&gt;

&lt;p&gt;Later I discovered tools like &lt;a href="https://github.com/astral-sh/uv" rel="noopener noreferrer"&gt;uv&lt;/a&gt; and &lt;a href="https://github.com/Schniz/fnm" rel="noopener noreferrer"&gt;fnm&lt;/a&gt;&lt;br&gt;
that simplified my environment significantly, but they are still far from &lt;strong&gt;mise&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;mise&lt;/strong&gt; is simply the next level, somewhere between a &lt;code&gt;Brewfile&lt;/code&gt; and a &lt;code&gt;Dockerfile&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  Security
&lt;/h3&gt;

&lt;p&gt;As I mentioned earlier, &lt;strong&gt;never run untrusted repositories&lt;/strong&gt;, and &lt;strong&gt;DO NOT&lt;/strong&gt; use &lt;strong&gt;mise&lt;/strong&gt; with them.&lt;/p&gt;

&lt;p&gt;By default, &lt;strong&gt;mise&lt;/strong&gt; does not allow dependency installation or environment switching until you trust the directory/project&lt;br&gt;
by running &lt;code&gt;mise trust&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Be careful, since &lt;code&gt;mise&lt;/code&gt; can execute code during &lt;code&gt;mise install&lt;/code&gt; and maybe even when you &lt;code&gt;cd&lt;/code&gt; there,&lt;br&gt;
though I have not fully explored all such hooks yet.&lt;/p&gt;
&lt;h2&gt;
  
  
  My use cases
&lt;/h2&gt;

&lt;p&gt;I want a reproducible environment when I return to my own projects or start working on someone else's project, old or new.&lt;/p&gt;

&lt;p&gt;I use various tools that can be specific to my preferences.&lt;/p&gt;

&lt;p&gt;Here is an example from my blog setup (this is the first post here):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[tools]&lt;/span&gt;
&lt;span class="c"&gt;# https://github.com/nodejs/node&lt;/span&gt;
&lt;span class="py"&gt;node&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"24.14"&lt;/span&gt;
&lt;span class="c"&gt;# https://github.com/pnpm/pnpm&lt;/span&gt;
&lt;span class="py"&gt;pnpm&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"10.32"&lt;/span&gt;
&lt;span class="c"&gt;# https://github.com/j178/prek&lt;/span&gt;
&lt;span class="py"&gt;prek&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="py"&gt;version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"0.3"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="py"&gt;postinstall&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"prek install"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c"&gt;# https://github.com/biomejs/biome&lt;/span&gt;
&lt;span class="py"&gt;"github:biomejs/biome"&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="py"&gt;version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"2.4.6"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="py"&gt;version_prefix&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"@biomejs/biome@"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="py"&gt;bin&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"biome"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nn"&gt;[tasks.install]&lt;/span&gt;
&lt;span class="py"&gt;run&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"pnpm install --frozen-lockfile"&lt;/span&gt;
&lt;span class="py"&gt;alias&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"i"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="nn"&gt;[tasks.dev]&lt;/span&gt;
&lt;span class="py"&gt;run&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"pnpm run dev"&lt;/span&gt;
&lt;span class="py"&gt;alias&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"d"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="nn"&gt;[tasks.lint]&lt;/span&gt;
&lt;span class="py"&gt;run&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"biome check"&lt;/span&gt;

&lt;span class="nn"&gt;[tasks.lint-fix]&lt;/span&gt;
&lt;span class="py"&gt;run&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"biome check --write"&lt;/span&gt;

&lt;span class="nn"&gt;[env]&lt;/span&gt;
&lt;span class="py"&gt;ENV&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"local"&lt;/span&gt; &lt;span class="c"&gt;# Just an example&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see, a contributor only needs to run &lt;code&gt;mise install&lt;/code&gt;, and everything I expect will be installed.&lt;br&gt;
It also includes a &lt;strong&gt;&lt;code&gt;post-install&lt;/code&gt; script&lt;/strong&gt; that sets up the &lt;strong&gt;pre-commit&lt;/strong&gt; hook automatically for anyone who contributes.&lt;/p&gt;

&lt;p&gt;Another interesting line in this config is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="py"&gt;"github:biomejs/biome"&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="py"&gt;version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"2.4.6"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="py"&gt;version_prefix&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"@biomejs/biome@"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="py"&gt;bin&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"biome"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It does not use a default &lt;code&gt;biome&lt;/code&gt; plugin and instead downloads from GitHub, even though Biome releases use unusual tags like &lt;code&gt;@biomejs/biome@2.4.6&lt;/code&gt;.&lt;br&gt;
Even when a repository uses unusual version tags, &lt;strong&gt;mise&lt;/strong&gt; can strip prefixes and rename the binary.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why don't I use npm to fetch &lt;code&gt;biome&lt;/code&gt;?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I used to. It worked well, but it only covers a subset of tools.&lt;br&gt;
&lt;strong&gt;mise&lt;/strong&gt; feels native and consistent across my projects: &lt;code&gt;go&lt;/code&gt;, &lt;code&gt;rust&lt;/code&gt;, &lt;code&gt;nodejs&lt;/code&gt;.&lt;br&gt;
I see no reason why &lt;code&gt;biome&lt;/code&gt; would be so &lt;em&gt;&lt;strong&gt;unique&lt;/strong&gt;&lt;/em&gt; to install it differently from other tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  Global tools
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Mise&lt;/strong&gt; also supports to install tools on a global level, similar to &lt;code&gt;npm&lt;/code&gt; or &lt;code&gt;go install&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;But why? We already have our package manager and &lt;code&gt;npm&lt;/code&gt; and other tools!&lt;/p&gt;

&lt;p&gt;There are few reasons:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Your tool is not available in your particular package manager&lt;/li&gt;
&lt;li&gt;You want to have dotfiles that will install something independently on your OS and Linux distro&lt;/li&gt;
&lt;li&gt;You'd prefer to have the latest version of tools pulling directly from their direct repo.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Given all of that, Mise can be handy for global (user) level tool management as wel las project-level.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bottom line
&lt;/h2&gt;

&lt;p&gt;I know everyone is focused on AI/LLM right now. But foundational tools are still here: &lt;code&gt;libc&lt;/code&gt;, &lt;code&gt;gcc&lt;/code&gt;, &lt;code&gt;go&lt;/code&gt;,&lt;br&gt;
&lt;code&gt;python&lt;/code&gt;, &lt;code&gt;makefile&lt;/code&gt;, &lt;code&gt;taskfile&lt;/code&gt;, &lt;code&gt;curl&lt;/code&gt;, &lt;code&gt;brew&lt;/code&gt;, &lt;code&gt;pacman&lt;/code&gt;, &lt;code&gt;apt&lt;/code&gt;, &lt;code&gt;mise&lt;/code&gt;, and more.&lt;/p&gt;

&lt;p&gt;AI may replace some tools, some programs, maybe even some professions, but there will always be a foundation.&lt;br&gt;
Something still has to run the infrastructure where AI operates.&lt;/p&gt;

&lt;p&gt;I see &lt;code&gt;mise&lt;/code&gt; as closer to those fundamental tools and services that power development infrastructure, rather than just&lt;br&gt;
another hype tool.&lt;/p&gt;

&lt;p&gt;I encourage my colleagues to integrate it into their workflows. So far, I have received only positive feedback.&lt;/p&gt;

</description>
      <category>development</category>
      <category>tools</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
