What's the meaning of project_hash in Manifest.toml?

Let’s create a new environment in Julia 1.8.5:

(@v1.8) pkg> activate .
  Activating new project at `/private/tmp/test`

(test) pkg> add Example
    Updating registry at `~/.julia/registries/General.toml`
   Resolving package versions...
    Updating `/private/tmp/test/Project.toml`
  [7876af07] + Example v0.5.3
    Updating `/private/tmp/test/Manifest.toml`
  [7876af07] + Example v0.5.3

The Manifest.toml file then looks as follows:

# This file is machine-generated - editing it directly is not advised

julia_version = "1.8.5"
manifest_format = "2.0"
project_hash = "2ca1c6c58cb30e79e021fb54e5626c96d05d5fdc"   # <- What's this?

[[deps.Example]]
git-tree-sha1 = "46e44e869b4d90b96bd8ed1fdcf32244fddfb6cc"
uuid = "7876af07-990d-54b4-ab0e-23690620f79a"
version = "0.5.3"

My question is, what is the meaning of project_hash? Is it a hash of Manifest.toml? Or maybe Project.toml? Or something else entirely? Searching for project_hash on https://pkgdocs.julialang.org/ didn’t yield any results…

It’s computed here: Pkg.jl/Types.jl at master · JuliaLang/Pkg.jl · GitHub

So it’s a content hash of the deps and compat sections of Project.toml. Judging from the comment this is used to determine whether the Manifest is up to date with the Project.

2 Likes