# Workspaces - how?

**URL:** <https://discourse.julialang.org/t/workspaces-how/133181>\
**Category:** General Usage\
**Tags:** pkg\
**Created:** [October 15, 2025, 6:39pm UTC](https://discourse.julialang.org/t/workspaces-how/133181 "2025-10-15T18:39:07Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![LeePhillips](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/leephillips/32/205514_2.png) [@LeePhillips](https://discourse.julialang.org/u/LeePhillips)\
**Post date:** [October 15, 2025, 6:39pm UTC](https://discourse.julialang.org/t/workspaces-how/133181/1 "2025-10-15T18:39:07Z")

</div>

Workspaces, described in the 1.12 announcement, sound useful, but after reading this and any documentation I could find they are still mysterious to me. How do I make a workspace and use it? Do I edit the Project file directly? Are there Pkg commands? What is the file layout? Is there any actual documentation anywhere that I missed?

---

<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:** [October 15, 2025, 8:43pm UTC](https://discourse.julialang.org/t/workspaces-how/133181/2 "2025-10-15T20:43:43Z")

</div>

Does this help: [11. Project.toml and Manifest.toml · Pkg.jl](https://pkgdocs.julialang.org/v1/toml-files/#The-%5Bworkspace%5D-section) ?

---

<div class="post-metadata">

**Author:** ![LeePhillips](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/leephillips/32/205514_2.png) [@LeePhillips](https://discourse.julialang.org/u/LeePhillips)\
**Post date:** [October 15, 2025, 8:58pm UTC](https://discourse.julialang.org/t/workspaces-how/133181/3 "2025-10-15T20:58:43Z")

</div>

Not at all (I already read that). It answers none of my questions, but serves as a great example of documentation that doesn’t work. It’s entirely in the passive voice (“A workspace is defined in the base project by giving a list of the projects in it”: two passive constructions in a single sentence, leaving the reader in the dark: is defined how, and by whom?).

---

<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:** [October 15, 2025, 9:05pm UTC](https://discourse.julialang.org/t/workspaces-how/133181/4 "2025-10-15T21:05:33Z")

</div>

> [@LeePhillips](#):
>
> is defined how, and by whom

By you. By adding the section `[workspace]` to the `Project.toml` file that is at the top level.

Like this:

```julia-auto
[workspace]
projects = ["test", "docs", "benchmarks", "PrivatePackage"]

```

Which would require that the subfolders “test”, “docs”, “benchmarks”, “PrivatePackage” exist, and that in each of these folders is a Project.toml file for the sub-project.

What is still unclear? Do you have sufficient information to try it out?

---

<div class="post-metadata">

**Author:** ![LeePhillips](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/leephillips/32/205514_2.png) [@LeePhillips](https://discourse.julialang.org/u/LeePhillips)\
**Post date:** [October 15, 2025, 9:10pm UTC](https://discourse.julialang.org/t/workspaces-how/133181/5 "2025-10-15T21:10:02Z")

</div>

Thank you, that helps. I’ll try it out.

---

<div class="post-metadata">

**Author:** ![Benny](https://avatars.discourse-cdn.com/v4/letter/b/49beb7/32.png) [@Benny](https://discourse.julialang.org/u/Benny)\
**Post date:** [October 15, 2025, 9:24pm UTC](https://discourse.julialang.org/t/workspaces-how/133181/6 "2025-10-15T21:24:34Z")

</div>

What’d I’d really like to know is how monorepos with many packages are registered, and how `Pkg` resolved and installed them before workspaces.

---

<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:** [October 16, 2025, 3:14am UTC](https://discourse.julialang.org/t/workspaces-how/133181/7 "2025-10-16T03:14:57Z")

</div>

You can read more about mono repos here:

> [@How to set up a monorepo with multiple Julia packages and GitHub Actions?](https://discourse.julialang.org/t/how-to-set-up-a-monorepo-with-multiple-julia-packages-and-github-actions/133044/4):
>
> @Vasily_Pisarev and @RomeoV Thanks for the insights. Super helpful. And, the new workspace features seems built-in for this as of just last week. Perfect timing! From the docs "A workspace is defined in the base project by giving a list of the projects in it …This structure is particularly beneficial for developers using a monorepo approach, where a large number of unregistered packages may be involved. It is also useful for adding documentation or benchmarks to a package by including addi…

Since 1.11, a Project.toml has the “Sources” section ([11. Project.toml and Manifest.toml · Pkg.jl](https://pkgdocs.julialang.org/v1.12/toml-files/#The-%5Bsources%5D-section)), so that you can add unregistered dependencies in a portable way.

---

<div class="post-metadata">

**Author:** ![simsurace](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/simsurace/32/30216_2.png) [@simsurace](https://discourse.julialang.org/u/simsurace)\
**Post date:** [October 16, 2025, 6:08am UTC](https://discourse.julialang.org/t/workspaces-how/133181/8 "2025-10-16T06:08:47Z")

</div>

Note that the sub-projects cannot be more than one sub-folder deep, otherwise you have to get there by intermediate projects. There is a PR to lift that restriction: [allow specifying projects in a workspace more than one level under it by KristofferC · Pull Request #59849 · JuliaLang/julia · GitHub](https://github.com/JuliaLang/julia/pull/59849)

---

<div class="post-metadata">

**Author:** ![caleb-allen](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/caleb-allen/32/14054_2.png) [@caleb-allen](https://discourse.julialang.org/u/caleb-allen)\
**Post date:** [January 26, 2026, 5:10pm UTC](https://discourse.julialang.org/t/workspaces-how/133181/9 "2026-01-26T17:10:30Z")

</div>

> [@simsurace](#):
>
> Note that the sub-projects cannot be more than one sub-folder deep,

For posterity, the PR mention has been merged, so sub-projects can be nested within multiple subdirectories

---

<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:** [January 26, 2026, 6:37pm UTC](https://discourse.julialang.org/t/workspaces-how/133181/10 "2026-01-26T18:37:31Z")

</div>

> [@caleb-allen](#):
>
> the PR mention has been merged

In which release?

---

<div class="post-metadata">

**Author:** ![caleb-allen](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/caleb-allen/32/14054_2.png) [@caleb-allen](https://discourse.julialang.org/u/caleb-allen)\
**Post date:** [January 26, 2026, 9:34pm UTC](https://discourse.julialang.org/t/workspaces-how/133181/11 "2026-01-26T21:34:22Z")

</div>

At least version 1.12.2, which it looks to have been [backported to](https://github.com/JuliaLang/julia/pull/59920)
