[ANN] Juliaup Preview - Julia version manager and Windows Store installer

I am looking for some brave Windows users that are willing to test drive a new installer for Julia on Windows that is called Juliaup.

Juliaup is a new Julia version manager for Windows that is distributed via the Windows Store and manages your Julia installation on Windows. Juliaup makes it easy to keep your Julia installation up-to-date and to manage multiple Julia versions on one system. Juliaup is currently in preview, but should be fairly stable and ready for real world usage.

If you want to try it, here is what you should do:

  • Make sure you don’t have any version of Julia on your PATH. Juliaup will handle all PATH related aspects of your Julia installation.
  • Install Julia from the Windows Store here.

Once you have that installed, julia is on the PATH, there is a start menu shortcut and it will show up as a profile in Windows Terminal. Any of those will start Julia. The VS Code extension will also automatically find this Julia installation.

I am currently shipping an outdated version of Julia out-of-the-box. This is on purpose, so that you can experience Juliaup first hand! When you start Julia, you should see a message that tells you that you are using an outdated Julia version, and that you can update to the latest version with juliaup update. Just run that from a command prompt, and then everything should be up-to-date. That is the same experience you’ll have in the future when a new Julia version is released.

There are more things you can do with juliaup:

  • juliaup status shows you which Julia versions you have installed and which one is configured as the default.
  • juliaup add 1.5.1 adds Julia 1.5.1 to your system.
  • juliaup setdefault 1.5.3 configures the julia command to start Julia 1.5.3.
  • juliaup setdefault 1.6 configures the julia command to start the latest 1.6.x version of Julia you have installed on your system (and inform you if there is a newer version in 1.6.x available).
  • juliaup setdefault 1 configures the julia command to start the latest 1.x version of Julia (this is also the default value).
  • juliaup remove 1.5.3 deletes Julia 1.5.3 from your system.
  • juliaup add 1.6.1~x86 installs the 32 bit version of Julia 1.6.1 on your system.
  • juliaup setdefault 1.6~x86 configures the julia command to start the latest 1.6.x 32 bit version of Julia you have installed on your system.
  • juliaup shows you what other commands are available.

This entire system around juliaup installs Julia versions into ~/.julia/juliaup. If you want to restart from scratch, just delete that entire folder.

The code for Juliaup and the installer is hosted at GitHub - JuliaLang/juliaup: An experimental Julia version manager, currently only for Windows. Most of it is written in Julia itself, so it should be fairly easy to help and contribute :slight_smile: Which of course would be fantastic! There is a long list of improvements that would make things work smoother, we need help with the artwork for the store listing, and it would be great if some folks would try to port this to Mac and Linux!

The caveat for all of this is: this is a preview release, and things might be broken or break. If you have a deadline coming up and need a working Julia version, this is not for you!

If you do try this, please report back about your experience here! In particular if things work, before we could make this a more official option we need some confirmation that things actually work for folks.

42 Likes

I just tried it, it is great, thanks!

One suggestion: I had Julia 1.6 installed before with Revise in my startup. After installing Juliaup (with Julia 1.5), Julia did not start because Revise is not in my (blank) 1.5 default environment. This is of course easy to fix, but slightly inconvenient.
Would it be possible to copy the newest / closest existing default environment if a new Julia minor version is installed?

1 Like

Good idea, tracking it here!

4 Likes

Brilliant. Easy to install and update!

Not sure about this “the VS Code extension will also automatically find this Julia installation.”, as it did not seem to load the startup.jl file in:
C:\Users\jrafa\.julia\juliaup\x64\julia-1.6.1\etc\julia\startup.jl ?

Wish list: it could ship with JuliaMono fonts and have JuliaMono Semibold font as default.

3 Likes

Some more nice-to-haves:

  • The default Julia starts with 1 thread, but I think most users want Julia running with Threads == physical CPU cores. Could Juliaup set the JULIA_NUM_THREADS environment variable automatically?
  • Maybe an automatic way to set up complete notebook or development environments, especially Pluto.jl, Jupyter + IJulia, VSCode+ Julia ?
3 Likes

Hm, so I think you should probably treat C:\Users\jrafa\.julia\juliaup\x64\julia-1.6.1\etc\julia\startup.jl as read-only, right? The way the VS Code extension should (in theory) find this install is that if there is a julia command on the PATH, then the extension will use that. So not sure, but maybe you have another julia on your PATH somehow? You can pretty easily figure out which version of Julia exactly is running inside the VS Code Julia REPL by typing Sys.BINDIR in the REPL.

3 Likes

Hm, I’m a bit hesitant about this, I think if the core dev team thinks that the default should be to use as many threads as core, they should just make that the default in Julia itself.

For VS Code, we’ll soon have native Jupyter notebooks support in the Julia extension that will no longer require installation of IJulia.jl. So at that point it should be enough to install Julia, VS Code and then some VS Code extensions.

2 Likes

Note that this has always been the default in Juno, so it’s semi-officially endorsed by nature of Juno shipping bundled with JuliaPro.

Great work, thanks!
The download (although slow) and installation worked fine, that is, the ~/.julia/juliaup folders and start menu shortcut are created and the commands such as juliaup update work fine. However, it seems that julia is not added to the PATH, and consequently, VS Code did not automatically find this installation. I did check that there were no other julia versions on the PATH or any other Julia installation folders left before starting this whole procedure (uninstalled all previous Julia versions), and I also removed the Julia VS Code extension before starting, to make the install as clean as possible. After installing juliaup and the Julia VS Code extension, the executable path in VS Code points to ~\AppData\Local\Programs\Julia 1.5.1\bin\julia.exe which is strange as that path (\Programs\Julia 1.5.1) does not even exist (anymore), and is also not on my PATH (anymore). I’m working on a Windows 10 Enterprise laptop managed by my institute (although I have administrator rights).

@Klaas_Pauly Are you sure that julia is not on the PATH? If juliaup works I can’t really imagine a scenario where julia itself wouldn’t also work… When you start a command prompt and type julia, what happens?

Re the VS Code situation: my best guess is that you have a path to the Julia binary configured in VS Code, and that will stay around, even if you uninstall the VS Code extension. The way to fix this is to go into your user settings in VS Code, go to the Julia section and remove the configuration for the Julia binary path, so that that setting is just empty. At that point the extension should find the Juliaup configured Julia.

1 Like

I have to admit that experience makes me hesitant to add something similar here :slight_smile: At least from my point of view the bundled JuliaPro stuff often didn’t work very smoothly…

2 Likes

For the PATH and how Windows 10 finds the executables, juliaup uses the folder AppData\Local\Microsoft\WindowsApps\ . There you find (hard) links (I think) to the executables and this folder is in the PATH by default.
This is in my opinion, a very clean way to make julia available as easy as possible without changing anything the user may have set by purpose (like an entry in the PATH envrionment).

1 Like

Yes, exactly! And that whole part is actually handled by the MSIX installer engine that ships with Windows 10, the way we hook into this is that we just declare that we want something to appear on the path in this line in the setup program.

2 Likes

Haha, fair point, although it was true as well for regular Juno without JuliaPro, which I guess is what most people use in practice. I guess I wanted to point out that a significant part of the Julia userbase is used to (or has unknowingly accepted) the fact that the “official” Julia IDE runs on multiple threads by default.

Oh, sorry, I completely missed the context of your comment, I was thinking that you were talking about something entirely different (namely bundling a lot of software together) :slight_smile:

Oh OK, thanks for the clarification @oheil! I was actually looking for “julia” somewhere in the path so completely missed that… And you were right @davidanthoff, it was indeed a path I had entered manually (which I assumed would be gone when I uninstalled the extension). Everything works like a charm now, thanks!!

3 Likes

Is there a way to include git bash in this kind of setup? Julia without git would not help me.

1 Like

I don’t think I want Juliaup to go in the direction of bundling more stuff, in my view it should really just be for Julia and nothing else. Maybe other tools that bundle more things could sit on top of it, not sure…

But I think with the release of winget the entire situation should just get a lot easier, I’m pretty sure winget install git should be enough to get git installed on Windows already. And then once we think that Juliaup is stable, winget install julia would be enough to get this Juliaup/Julia story installed.

4 Likes

With Juliaup there is now only one single big Julia app in Win10 showing in the list of installed programs, with possibly many versions encapsulated inside it.
In snapshot below, Julia 1.6.1 was the legacy installation, while Juliaup’s installed “Julia” containing in this case 2 versions after updating:

Assume that hobby Julia users can safely remove the different installations of Julia and work from now on with Juliaup only?