# \`$JULIA\_LOAD\_PATH\` and Packages with no \`Project.toml\`

**URL:** <https://discourse.julialang.org/t/julia-load-path-and-packages-with-no-project-toml/134059>\
**Category:** General Usage\
**Tags:** package, pkg\
**Created:** [November 23, 2025, 8:33pm UTC](https://discourse.julialang.org/t/julia-load-path-and-packages-with-no-project-toml/134059 "2025-11-23T20:33:01Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![Chrysoberyl](https://avatars.discourse-cdn.com/v4/letter/c/ed655f/32.png) [@Chrysoberyl](https://discourse.julialang.org/u/Chrysoberyl)\
**Post date:** [November 23, 2025, 8:33pm UTC](https://discourse.julialang.org/t/julia-load-path-and-packages-with-no-project-toml/134059/1 "2025-11-23T20:33:01Z")

</div>

Some packages don’t have a `Project.toml` file, like this one: [GitHub - JuliaString/InternedStrings.jl: Fully transparent string interning functionality, with proper garbage collection](https://github.com/JuliaString/InternedStrings.jl)

In this case, how can Julia find this package via `$JULIA_LOAD_PATH`? For example, the project can exist in `/data/packages/InternedStrings`, and if I set `$JULIA_LOAD_PATH="/data/packages:"`, Julia can’t find this package.

This is for offline compilation so Julia can’t fetch unknown projects from the internet.

---

<div class="post-metadata">

**Author:** ![ufechner7](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ufechner7/32/51363_2.png) [@ufechner7](https://discourse.julialang.org/u/ufechner7)\
**Post date:** [November 23, 2025, 8:43pm UTC](https://discourse.julialang.org/t/julia-load-path-and-packages-with-no-project-toml/134059/2 "2025-11-23T20:43:28Z")

</div>

Well, from my point of view, a package without a `Project.toml` file is not a valid Julia package. So don’t use such code. Or create a fork and add a valid `Project.toml` file.

---

<div class="post-metadata">

**Author:** ![GunnarFarneback](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gunnarfarneback/32/1827_2.png) [@GunnarFarneback](https://discourse.julialang.org/u/GunnarFarneback)\
**Post date:** [November 23, 2025, 9:04pm UTC](https://discourse.julialang.org/t/julia-load-path-and-packages-with-no-project-toml/134059/3 "2025-11-23T21:04:59Z")

</div>

This package (and a couple more) are historical artifacts. They predate Julia 1.0 and the current package manager and were never properly updated to Julia 1.0. They could still work with Julia 1.0 through some temporary compatibility measures to packages built for the previous package manager. Most of that was dismantled at some point, leaving these packages to only work with the `Pkg.add` mechanism for registered packages, but not with `Pkg.develop` and presumably `JULIA_LOAD_PATH`.

The best solution is to make a PR adding the missing `Project.toml` (UUID can be found in the General registry). Obviously this requires a receptive maintainer. Otherwise you can just patch your own copy.

---

<div class="post-metadata">

**Author:** ![Chrysoberyl](https://avatars.discourse-cdn.com/v4/letter/c/ed655f/32.png) [@Chrysoberyl](https://discourse.julialang.org/u/Chrysoberyl)\
**Post date:** [November 23, 2025, 9:34pm UTC](https://discourse.julialang.org/t/julia-load-path-and-packages-with-no-project-toml/134059/4 "2025-11-23T21:34:12Z")

</div>

I’m using `Pickle` as a dependency and `Pickle` depends on `InternedStrings`, so I have my hands tied.

---

<div class="post-metadata">

**Author:** ![Chrysoberyl](https://avatars.discourse-cdn.com/v4/letter/c/ed655f/32.png) [@Chrysoberyl](https://discourse.julialang.org/u/Chrysoberyl)\
**Post date:** [November 23, 2025, 9:47pm UTC](https://discourse.julialang.org/t/julia-load-path-and-packages-with-no-project-toml/134059/5 "2025-11-23T21:47:06Z")

</div>

Since I’m using packages dependent on this package, would it be sufficient to do manually create `Project.toml` for such legacy packages? e.g.

```julia-auto
$ cat $JULIA_LOAD_PATH/InternedStrings/Project.toml
name = "InternedStrings"
uuid = "7d512f48-7fb1-5a58-b986-67e6dc259f01"
version = "0.7.0"
authors = ["Julia"]

```

---

<div class="post-metadata">

**Author:** ![GunnarFarneback](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gunnarfarneback/32/1827_2.png) [@GunnarFarneback](https://discourse.julialang.org/u/GunnarFarneback)\
**Post date:** [November 23, 2025, 10:48pm UTC](https://discourse.julialang.org/t/julia-load-path-and-packages-with-no-project-toml/134059/6 "2025-11-23T22:48:02Z")

</div>

That’s what I would try at least, but I’ve rarely used `JULIA_LOAD_PATH`.

---

<div class="post-metadata">

**Author:** ![ufechner7](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ufechner7/32/51363_2.png) [@ufechner7](https://discourse.julialang.org/u/ufechner7)\
**Post date:** [November 24, 2025, 12:21am UTC](https://discourse.julialang.org/t/julia-load-path-and-packages-with-no-project-toml/134059/7 "2025-11-24T00:21:47Z")

</div>

> [@Chrysoberyl](#):
>
> I’m using `Pickle` as a dependency

Created an issue: [Add Project.toml · Issue #27 · JuliaString/InternedStrings.jl · GitHub](https://github.com/JuliaString/InternedStrings.jl/issues/27)

---

<div class="post-metadata">

**Author:** ![Chrysoberyl](https://avatars.discourse-cdn.com/v4/letter/c/ed655f/32.png) [@Chrysoberyl](https://discourse.julialang.org/u/Chrysoberyl)\
**Post date:** [November 24, 2025, 1:55am UTC](https://discourse.julialang.org/t/julia-load-path-and-packages-with-no-project-toml/134059/8 "2025-11-24T01:55:15Z")

</div>

Once `InternedString` gets its `Project.toml`, `Pickle` would have to be updated to reflect this.

---

<div class="post-metadata">

**Author:** ![GunnarFarneback](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gunnarfarneback/32/1827_2.png) [@GunnarFarneback](https://discourse.julialang.org/u/GunnarFarneback)\
**Post date:** [November 24, 2025, 8:17am UTC](https://discourse.julialang.org/t/julia-load-path-and-packages-with-no-project-toml/134059/9 "2025-11-24T08:17:08Z")

</div>

Pickle is compatible with any 0.7.x version of InternedStrings, so assuming the version isn’t bumped past that, no changes are needed to Pickle.

---

<div class="post-metadata">

**Author:** ![oxinabox](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/oxinabox/32/206603_2.png) [@oxinabox](https://discourse.julialang.org/u/oxinabox)\
**Post date:** [November 30, 2025, 10:38pm UTC](https://discourse.julialang.org/t/julia-load-path-and-packages-with-no-project-toml/134059/10 "2025-11-30T22:38:14Z")

</div>

I guess this is only needed if locally `dev`ing the package, right?

---

<div class="post-metadata">

**Author:** ![Chrysoberyl](https://avatars.discourse-cdn.com/v4/letter/c/ed655f/32.png) [@Chrysoberyl](https://discourse.julialang.org/u/Chrysoberyl)\
**Post date:** [December 1, 2025, 4:33am UTC](https://discourse.julialang.org/t/julia-load-path-and-packages-with-no-project-toml/134059/11 "2025-12-01T04:33:48Z")

</div>

No. This is for deploying computation containers onto clusters.
