Remix.run Logo
PufPufPuf 5 hours ago

I have switched my full OS-level dev env to https://mise.jdx.dev/ from Homebrew+pipx+npm, initially as an experiment but found out that it actually works amazingly well. Many things get installed directly from GitHub releases or a corresponding package manager (uv, pnpm, go get ...), zero glue code to "repackage", zero version lag. You can install any arbitrary version of a package, even multiple ones at once, and dynamically adjust which ones are active per working folder or explicitly through environments.

Funnily Mise does not support dependencies, and I was quite surprised that it mostly doesn't matter, as either pnpm/uv handles that, or it's a static binary that just works. In the past, had the unfortunate experience of packaging a Python application for Homebrew (the ridiculous process involved importing around 50 dependencies as "resources", building every single one from source or manually checking if it's already on Homebrew, declaring build toolchains for 5 different programming languages as dependencies, waiting over an hour for CI to finish on every update, then an upstream update introduced a "build-time dependency loop" and the project suddenly became unpackable for Homebrew) so I totally get why Mise took the "easy way out" and just relies on language-specific package managers directly.

Only thing from my Brewfile that I couldn't replace was the Docker CLI (needed to interact with Colima). And I still use Homebrew for casks. I encourage others to experiment with their dev setups, there are some amazing new tools out there.

jpeeler an hour ago | parent | next [-]

Mise does seem to be in a class of its own. As mentioned elsewhere, it does rely on other registries such as aqua and obviously asdf. For people who want to use Mise for brew packages, there's https://github.com/kennyg/mise-zerobrew.

chuckadams 3 hours ago | parent | prev | next [-]

As a PHP developer, I found mise's support to be pretty sub-par compared to Shivam Mathur's packaging work for homebrew. Most of my projects are using Docker anyway, the local PHP is for stuff like static analysis that doesn't need it. And I've got a couple using Nix, which laughs at everything else (but damn, the overall UX is still even more hostile than git).

thatxliner 3 hours ago | parent | prev | next [-]

Glad you're having a good experience, but I personally switched from Mise back to Brew. I don't know if it was just my skill issue, but there were too many packages which found Mise to be problematic.

PufPufPuf 3 hours ago | parent [-]

Haven't had any serious problems so far!

zchrykng an hour ago | parent | prev | next [-]

I like mise a lot, but only use it for project specific tool management, JDK versions, etc.

I tried to use it for system wide things, but found it didn't work as well for me with things that I wanted to just be tools where I didn't care what specific version it was as long as it was more or less current, Helix, NeoVim, RipGrep, etc.

jdxcode 4 hours ago | parent | prev | next [-]

mise kind of supports dependencies, just not in the way people expect coming from any other package manager. The dependencies in mise are not automatic and all of them need to be manually defined. They're to get around ordering issues since mise installs in parallel, e.g.: if you use "pipx:black" you need to wait for python to finish installing. (This is the "depends" option on tools")

This is intentional as mise is not intended to be a full bootstrapping solution in the way homebrew/nix is, mise is designed to be an overlay on top of existing systems. So if you want to manage python with brew and black with mise it basically just works without extra configuration. I think this design decision has paid off in spades. It sounds like a drawback but at the end of the day it's probably the #1 reason users find mise easy to use.

PufPufPuf 3 hours ago | parent [-]

Thank you for making Mise!

nesarkvechnep 4 hours ago | parent | prev | next [-]

I did the same but with Nix.

dnlzro 3 hours ago | parent | next [-]

Me too, but it definitely doesn't qualify as "zero glue code."

dominotw 2 hours ago | parent | prev [-]

me too but feels like bringing bazooka to a watergun fight. might go back to brew

notpushkin 3 hours ago | parent | prev | next [-]

Hmm, `mise use -g docker-cli` works for me. `docker compose` is a bit trickier – it gets installed as `docker-cli-plugin-docker-compose`, but docker-cli doesn’t seem to pick it up. I’ve added a symlink as `docker-compose` for the time being.

Also using brew for casks, and I think there’s a couple tools I couldn’t install with mise (e.g. pngpaste and zbar for scanning QR codes from screenshots).

PufPufPuf an hour ago | parent [-]

FWIW you can replace pngpaste with a simple script: https://til.simonwillison.net/macos/impaste

Zbar seems to provide prebuilt binaries here https://linuxtv.org/downloads/zbar/binaries/ (haven't checked it myself)

Thanks for the docker tip!

threecheese 4 hours ago | parent | prev | next [-]

Do you have an example? Sounds interesting.

PufPufPuf 4 hours ago | parent [-]

Here's my modest collection of global tools I install in my dotfiles: https://github.com/JanPokorny/dotfiles/blob/master/dot_confi...

Projects then have their own dependencies, e.g. https://github.com/i-am-bee/agentstack/blob/main/mise.toml

Mise also has a task runner which automatically uses correct tools. Onboarding a new team member is super easy now, they just need Mise, "mise install" and they're up.

jrop an hour ago | parent | next [-]

I really prefer to lock the version numbers instead:

    mise use -g somepackage --pin
I can commit/rollback to known good versions. To upgrade:

    mise up -il
Not so long ago, I was outspoken against mise. I've since come around. It truly is a fantastic tool.
stouset 17 minutes ago | parent [-]

What were your criticisms, and what changed?

mmcclure 4 hours ago | parent | prev [-]

I've been using mise as a pure version manager for a pretty long time, and I had no idea you could use it for general tools like this.

snthpy 2 hours ago | parent [-]

Same

esafak 5 hours ago | parent | prev | next [-]

Don't forget that mise depends on package registries, to install itself as well as its tools.

PufPufPuf 5 hours ago | parent [-]

Mise installs itself as a static binary actually (but it's of course packaged in many registries), and while there are some third party registries it delegates to for some packages (aqua, asfd), most stuff I have installed is either built-in, or from PyPI, npm or GitHub, i.e. directly published by the upstream maintainers. More info: https://mise.jdx.dev/dev-tools/backends/

esafak 5 hours ago | parent [-]

You'll see that mise recommends installing itself exclusively through package registries: https://mise.jdx.dev/installing-mise.html

pypi, npm, and even github (through releases) are registries.

curl | sh is an anti-pattern. It passes no security check.

lachieh 27 minutes ago | parent | next [-]

There's always the chicken/egg problem of which dependency manager to install first, though. AFAIK there's no "trusted" installed for Homebrew on macOS though I might be wrong.

PufPufPuf 3 hours ago | parent | prev [-]

Exclusively? No, the very first option is the install script, which downloads and unpacks the correct binary for your OS from the Mise website:

curl https://mise.run | sh

...which is the same way Homebrew is installed too.

sieabahlpark 4 hours ago | parent | prev | next [-]

[dead]

altern8 3 hours ago | parent | prev [-]

That's kind of weird that you're using this announcement to steer people to another project.

Or am I missing something..?