# Upgrading flox, am I doing the right thing?

**URL:** https://discourse.flox.dev/t/upgrading-flox-am-i-doing-the-right-thing/550
**Category:** Developing with flox
**Created:** [December 5, 2022, 9:43pm UTC](https://discourse.flox.dev/t/upgrading-flox-am-i-doing-the-right-thing/550 "2022-12-05T21:43:48Z")
**Posts on this page:** 8
**Page:** 1

<div class="post-metadata">

### Author: ![etorreborre](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.flox.dev/etorreborre/32/428_2.png) [@etorreborre](https://discourse.flox.dev/u/etorreborre)
#### Post date: [December 5, 2022, 9:43pm UTC](https://discourse.flox.dev/t/upgrading-flox-am-i-doing-the-right-thing/550/1 "2022-12-05T21:43:48Z")

</div>

A new flox version just came out, r84, and I wanted to install it.

I did a `flox pull flox/default` and eventually did:

```auto
flox search -c flox flox
flox rm -e flox/default stable.flox.flox
flox install -e flox/default stable.flox.flox@0.0.7-r84

```

1. find the full name of the new version
2. remove the old version from the default flox environment
3. install the new one

That works but that looks cumbersome. So I tried just the recommended `flox upgrade` (in the recent release announcement) which took more time and… I actually don’t know if that changed anything since my current version is still the latest one.

One thing that is slightly puzzling to me is the notion of stable/staging/unstable and prerelease for flox versions. I would expect the next flox version to appear in `unstable` then progress to `staging ` and `stable`, without even having to mention the name “prerelease”. But in the case of `r84` it is directly available in `stable`.

Maybe I should just wait a bit until the dust settles down and the documentation gets updated :-).

---

<div class="post-metadata">

### Author: ![jurraca](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.flox.dev/jurraca/32/397_2.png) [@jurraca](https://discourse.flox.dev/u/jurraca)
#### Post date: [December 5, 2022, 10:55pm UTC](https://discourse.flox.dev/t/upgrading-flox-am-i-doing-the-right-thing/550/2 "2022-12-05T22:55:34Z")

</div>

Hi Eric!

First, regarding the install flow, you shouldn’t need to remove the older version. I believe it should just replace the version in the given environment.

Regarding upgrade, do you mind trying it again now that we’ve pushed r85? It should upgrade. If not we have a bug.

Regarding stabilities, you’re right that this is a bit confusing and we are working to make the documentation clearer. In this particular case we sent the newest release to stable right away since it included some critical fixes. Since we run the “flox” channel, we tend to be a little more cavalier with our stabilities, whereas with “nixpkgs-flox” (mapping a stability to nixpkgs) we follow the stability schedule exactly.

---

<div class="post-metadata">

### Author: ![etorreborre](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.flox.dev/etorreborre/32/428_2.png) [@etorreborre](https://discourse.flox.dev/u/etorreborre)
#### Post date: [December 6, 2022, 8:30am UTC](https://discourse.flox.dev/t/upgrading-flox-am-i-doing-the-right-thing/550/3 "2022-12-06T08:30:35Z")

</div>

I can indeed see r85 and even r86 with `flox search` but when I do `flox upgrade` I get `No environment changes detected .. exiting` after a bunch of derivations evaluations.

---

<div class="post-metadata">

### Author: ![limeytexan](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.flox.dev/limeytexan/32/10_2.png) [@limeytexan](https://discourse.flox.dev/u/limeytexan)
#### Post date: [December 6, 2022, 10:24am UTC](https://discourse.flox.dev/t/upgrading-flox-am-i-doing-the-right-thing/550/4 "2022-12-06T10:24:58Z")

</div>

`flox upgrade` did have had a bug that was fixed recently, and should now upgrade all packages in an environment. If you’re on an older version with the bug or just want to upgrade a single package in an environment then the command would be `flox upgrade <package>`, where package can either be the fully-qualified form (e.g. “stable.flox.flox”) or the abbreviated “alias” form “flox.flox”.

See the “PACKAGE ARGUMENTS” of the `flox(1)` man page for a description of package naming convention with flox.

UPDATE: I just noticed a few issues with the commands you mentioned above.

### Use of pinned package references.

```auto
flox install -e flox/default stable.flox.flox@0.0.7-r84

```

The above command installs a version of “stable.flox.flox” _pinned_ at version 0.0.7-r84. With that a `flox upgrade` will not upgrade to a new semantic version, but it may replace the package with a new rebuild of the same semantic version if an underlying dependency is updated (e.g. libc).

### Modifying `flox/default` environment.

While you _can_ modify your local copy of the `flox/default` environment, that will just create a merge conflict when you eventually `flox pull -e flox/default` to incorporate our latest updates from upstream. You’re right that we’ve fallen behind on updates - I’m working to automate those updates going forward but all you should ever have to do for an environment managed by someone else is run `flox pull`. Thanks as ever for the feedback - I’ll log an issue to warn before allowing local modifications to an environment when you don’t have rights to modify the upstream version. 👍

### What I’d recommend

I’m pretty sure these commands will get you back on track:

```auto
flox pull -e flox/default --force # to remove your local modifications
flox install flox.flox # to install the latest stable flox to your default env

```

If you do that then a simple `flox upgrade flox.flox` will update the version of flox in your default environment, or `flox upgrade` will update everything in your environment (including stable.flox.flox).

Hope this helps!

---

<div class="post-metadata">

### Author: ![etorreborre](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.flox.dev/etorreborre/32/428_2.png) [@etorreborre](https://discourse.flox.dev/u/etorreborre)
#### Post date: [December 6, 2022, 11:04am UTC](https://discourse.flox.dev/t/upgrading-flox-am-i-doing-the-right-thing/550/5 "2022-12-06T11:04:03Z")

</div>

I think that I got thoroughly confused with my default environment and `flox/default`. In my `~/.zshrc` file I was activating `default` and `flox/default`. Then I got `r83`. After removing the `flox/default` activation I got `r86`.

Here is a bit of rambling to try to wrap my head around all this:

Maybe something that’s not yet clear to me is the workflow with environments. Actually if I think about how I should upgrade `flox` in my default environment, I’m thinking that I shouldn’t have to even use the `flox/default` environment. I should just be able to subscribe to the flox channel and install from there.

It feels weird to pull from an environment to upgrade just one package. My mental model is currently that I would pull from an environment to grab a coherent set of packages for a specific purpose (I don’t know, like “python development tools”).

Unless you see `flox/default` as this set of packages because `tracelinks` is also in there? Then my approach of enabling `default` and `flox/default` when I start a shell is the right one isn’t it? Then I don’t understand why I got `r83`. This gives me `r86` but I’m not sure I’m supposed to do that because now I created a new generation in `flox/default`

```auto
○ flox activate -e flox/default -- flox --version default
Version: 0.0.7-r83

~
○ flox pull -e flox/default default
Already on 'x86_64-darwin.default'
Your branch is up to date with 'origin/x86_64-darwin.default'.
Everything up-to-date

~
○ flox activate -e flox/default -- flox --version default
Version: 0.0.7-r83

~
○ flox upgrade -e flox/default flox.flox default
created generation 6

~
○ flox activate -e flox/default -- flox --version default
Version: 0.0.7-r86

```

If I rollback

```auto
○ flox pull -e flox/default --force default
Already on 'x86_64-darwin.default'
Your branch is up to date with 'origin/x86_64-darwin.default'.
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
To /Users/etorreborre/.cache/flox/meta/flox
 + 8c76823...e3607ca x86_64-darwin.default -> x86_64-darwin.default (forced update)

~
○ flox activate -e flox/default -- flox --version default
Version: 0.0.7-r83

```

I’m back on r83 from the flox/default environment and I still have r86 in my default environment.

---

<div class="post-metadata">

### Author: ![limeytexan](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.flox.dev/limeytexan/32/10_2.png) [@limeytexan](https://discourse.flox.dev/u/limeytexan)
#### Post date: [December 6, 2022, 11:05am UTC](https://discourse.flox.dev/t/upgrading-flox-am-i-doing-the-right-thing/550/6 "2022-12-06T11:05:22Z")

</div>

One other thing to note - if you ever wanted to duplicate and make local modifications to an environment managed by someone else then these commands may be useful:

```auto
flox pull -e foo/bar
flox export -e foo/bar | flox import -e myfoobar

```

---

<div class="post-metadata">

### Author: ![limeytexan](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.flox.dev/limeytexan/32/10_2.png) [@limeytexan](https://discourse.flox.dev/u/limeytexan)
#### Post date: [December 6, 2022, 11:13am UTC](https://discourse.flox.dev/t/upgrading-flox-am-i-doing-the-right-thing/550/7 "2022-12-06T11:13:04Z")

</div>

> [@etorreborre](#):
>
> I’m back on r83 from the flox/default environment and I still have r86 in my default environment.

Yes, that was what I was referring to when I mentioned I had fallen behind on updating the `flox/default` and `flox/prerelease` environments. At the moment I’m bumping those manually but it is our intent for those environments to be automatically managed going forward. Apologies that is probably the biggest source of confusion here!

> [@etorreborre](#):
>
> Unless you see `flox/default` as this set of packages because `tracelinks` is also in there?

Precisely - at present `flox` and `tracelinks` are the only tools we are serving up in the `flox/default` environment, but we anticipate adding more to this list over time, and that will be the place where you can always find our latest supported versions. With that you should always be able to `flox pull -e flox/default` and know you are up-to-date. Future versions of flox will also warn you when new generations are available for download so that upgrades can be as simple as responding “yes” to an upgrade prompt. (That feature should be in place in a few weeks.)

This is all great feedback - thanks as ever for your time!

---

<div class="post-metadata">

### Author: ![etorreborre](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.flox.dev/etorreborre/32/428_2.png) [@etorreborre](https://discourse.flox.dev/u/etorreborre)
#### Post date: [December 6, 2022, 11:25am UTC](https://discourse.flox.dev/t/upgrading-flox-am-i-doing-the-right-thing/550/8 "2022-12-06T11:25:35Z")

</div>

Ahhh, thanks, I forgot about export/import:

```auto
flox export -e foo/bar | flox import -e myfoobar

```

That indeed completes my understanding.
