# Running Old Project on Latest Julia Version?

**URL:** <https://discourse.julialang.org/t/running-old-project-on-latest-julia-version/114356>\
**Category:** General Usage\
**Created:** [May 16, 2024, 12:48pm UTC](https://discourse.julialang.org/t/running-old-project-on-latest-julia-version/114356 "2024-05-16T12:48:41Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![r0b0ty](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/r0b0ty/32/27250_2.png) [@r0b0ty](https://discourse.julialang.org/u/r0b0ty)\
**Post date:** [May 16, 2024, 12:48pm UTC](https://discourse.julialang.org/t/running-old-project-on-latest-julia-version/114356/1 "2024-05-16T12:48:41Z")

</div>

Is there a proper way (best practice) to _convert_ a project originally compiled in an **older** Julia version, to the **latest** released version?

The message I’m greeted with in this scenario is:

> Warning: The active manifest file has dependencies that were resolved with a different julia version (1.8.5). Unexpected behavior may occur.

I’ve managed to get this working now, but I feel like it was more of a trial-and-error job. **Thanks for your time!**

---

<div class="post-metadata">

**Author:** ![lmiq](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lmiq/32/18314_2.png) [@lmiq](https://discourse.julialang.org/u/lmiq)\
**Post date:** [May 16, 2024, 12:55pm UTC](https://discourse.julialang.org/t/running-old-project-on-latest-julia-version/114356/2 "2024-05-16T12:55:12Z")

</div>

usually just `julia> ] up` will update everything.

of course if the syntax of packages changed during the updates, your code might have to be updated for newer versions of the packages you’re using.

---

<div class="post-metadata">

**Author:** ![r0b0ty](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/r0b0ty/32/27250_2.png) [@r0b0ty](https://discourse.julialang.org/u/r0b0ty)\
**Post date:** [May 16, 2024, 1:06pm UTC](https://discourse.julialang.org/t/running-old-project-on-latest-julia-version/114356/3 "2024-05-16T13:06:58Z")

</div>

Wow, seems simple enough. Thank you, @lmiq. And yes, totally understandable if there are changes to syntax, etc.

I’ll try it out on another “old” project and see what happens. Thanks again.

---

<div class="post-metadata">

**Author:** ![lmiq](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lmiq/32/18314_2.png) [@lmiq](https://discourse.julialang.org/u/lmiq)\
**Post date:** [May 16, 2024, 1:08pm UTC](https://discourse.julialang.org/t/running-old-project-on-latest-julia-version/114356/4 "2024-05-16T13:08:42Z")

</div>

Another more conservative alternative is to just keep using the version of Julia where the project worked to start with. For that, if you have installed `julia` with `juliaup`, you can just do:

```julia
juliaup add 1.8.5

```

and then

```julia
julia +1.8.5 --project

```

---

<div class="post-metadata">

**Author:** ![mbauman](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mbauman/32/31082_2.png) [@mbauman](https://discourse.julialang.org/u/mbauman)\
**Post date:** [May 16, 2024, 1:35pm UTC](https://discourse.julialang.org/t/running-old-project-on-latest-julia-version/114356/5 "2024-05-16T13:35:49Z")

</div>

I’ve found what typically works best for me is to manually add compat specifiers to the project for the top-level dependences. That is, if I have a Project/Manifest with a dozen packages in the project and hundreds in the manifest, I’ll grab the `status` of the status quo and then copy all the current versions of the dozen top level into [exact compat specs](https://pkgdocs.julialang.org/v1/compatibility/#Equality-specifier). And _then_ I’ll `update` everything else.

This ensures that the packages that I (apparently) cared most about preserve their APIs, but lower level dependencies are free to grab newer versions.

---

<div class="post-metadata">

**Author:** ![r0b0ty](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/r0b0ty/32/27250_2.png) [@r0b0ty](https://discourse.julialang.org/u/r0b0ty)\
**Post date:** [May 16, 2024, 1:40pm UTC](https://discourse.julialang.org/t/running-old-project-on-latest-julia-version/114356/6 "2024-05-16T13:40:10Z")

</div>

The package update route, `pkg> up` worked perfectly. I’ll have to try out **juliaup** , though, as I haven’t done so yet.

@mbauman, thanks for the feedback. This would be an even more conservative approach to make the jump to a later Julia version.

---

<div class="post-metadata">

**Author:** ![mkitti](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkitti/32/12459_2.png) [@mkitti](https://discourse.julialang.org/u/mkitti)\
**Post date:** [May 16, 2024, 3:40pm UTC](https://discourse.julialang.org/t/running-old-project-on-latest-julia-version/114356/7 "2024-05-16T15:40:29Z")

</div>

I would backup your old Manifest.toml in case you run into trouble.

---

<div class="post-metadata">

**Author:** ![Palli](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/palli/32/3380_2.png) [@Palli](https://discourse.julialang.org/u/Palli)\
**Post date:** [May 16, 2024, 5:19pm UTC](https://discourse.julialang.org/t/running-old-project-on-latest-julia-version/114356/8 "2024-05-16T17:19:11Z")

</div>

Julia has a syntax guarantee, since 1.0/0.7. Julia also has a stable API guarantee, but some _undocumented_ “API” is used by some packages, and then Julia potentially changes, and they break. Either you don’t update Julia, or you do, and then upgrading packages usually fixes. This is probably less of a problem over time, and you can try updating up one Julia version at a time, at least if you have a problem, or I guess just jump to latest, at least try it first.

There has been no new, or at least changed _syntax_ since 0.7. [Except if I recall in 1.7, something new and _technically_ breaking, not in practice, very obscure related to nD matrix syntax.]

I wasn’t aware of that warning but here’s the solution (or one of):

> [@The active manifest file is an older format](https://discourse.julialang.org/t/the-active-manifest-file-is-an-older-format/72963/2):
>
> From the release notes: A new Manifest.toml format is now used that captures extensible metadata fields, including the julia version that generated the manifest. Old format manifests are still supported and will be maintained in their original format, unless the user runs Pkg.upgrade\_manifest() to upgrade the format of the current environment’s manifest without re-resolving (#40765). Nothing is wrong, you’re just getting a warning so you know there’s been a change of versions. You can run up…

> Nothing is wrong, you’re just getting a warning so you know there’s been a change of versions. You can run `upgrade_manifest` to get rid of the warning.

---

<div class="post-metadata">

**Author:** ![mbauman](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mbauman/32/31082_2.png) [@mbauman](https://discourse.julialang.org/u/mbauman)\
**Post date:** [May 16, 2024, 5:23pm UTC](https://discourse.julialang.org/t/running-old-project-on-latest-julia-version/114356/9 "2024-05-16T17:23:52Z")

</div>

No, those are all very different — and quite unrelated — points.

The Manifest format change happened in Julia 1.7 (and support for it was backported to 1.6). This isn’t about the format of the manifest itself, but rather the fact that it was generated and — more importantly — **_resolved_** using a different version of Julia. Why does this matter? It matters because some packages have specific compatibility requirements with Julia itself. And as such, the manifest may be specifying versions of packages than what is actually supported.
