Now that there are multiple tools that have implemented the concept of workspace dependencies heavily inspired by the same concept in Cargo. I think it is time for some discussion around what standardization would look like. I think having a standard spec for a workspace table in pyproject.toml would avoid drift between tools and avoid user confusion to have to remember which style to use based on which tool is being used.
My thoughts for what would be under the workspace table are
[workspace]
members = ["member1", "path/to/member2"]
exclude = ["path/to/other"]
[workspace.project]
version = "1.2.3"
authors = ["Nice Person"]
license-files = ["SomeLicenseFile", "SomeOtherLicenseFile"]
I think having shared project versioning for workspaces can simplify releasing all projects in a monorepo using the same versioning together. The same holds true for licenses when workspace members are all a part of the same monorepo. Any fields allowed in workspace.project should be considered as inherited from the root pyproject.toml of a monorepo.
I would like to get input from others on what they would like to see as a part of a spec. As a note, both tools that have implemented workspaces both use the members and exclude as a part of their implementations already. The concept of inheriting certain metadata from a root to all children is new and build backends would need to support this when packaging.
edit: What are workspaces? Workspaces in tools like hatch and uv allow you to manage multiple related Python packages within a single repository (a “monorepo”). Instead of treating each package as a completely separate project, workspaces let you define a root project that contains several sub-packages, all sharing a common configuration, virtual environment, or dependency resolution. This is particularly useful when you’re developing libraries that depend on each other—for example, a core library and several plugins—because you can make changes across packages simultaneously, run tests together, and ensure dependencies stay in sync without publishing intermediate versions.