Tracking issue for colocated workspaces
Author: ejpcmacCreated Nov 17, 2025Updated Sep 17, 2026
Labelsenhancement🏗️workspaces
This is a tracking issue for the Colocated Workspaces feature.
Background and summary
Please see https://github.com/jj-vcs/jj/issues/4436.
Steps
- ○ (1) Finalise and merge https://github.com/jj-vcs/jj/pull/8252 [ ONGOING ]
- ○ Rebase https://github.com/jj-vcs/jj/pull/4644 and create a new PR [ DONE ]
- ○ List the corner cases in workspace detection and specify the expected behaviour [ TODO ]
- ○ Fix the review comments and any other issue [ TODO ]
- ○ Merge to
main[ TODO ]
- ○ (2) List the corner cases in the commands interacting with workspaces and specify their behaviour [ TODO ]
- ○ (3) Refuse to create a new Jujutsu repo in a Git worktree when running
jj git init --colocate[ TODO ]- ○ TODO: Check that it is still the case
- ○ (4) Add workspace support to
jj git colocate enableandjj git colocate disable[ TODO ] - ○ (5) Add add colocation support to
jj workspacesubcommands [ TODO ] See: https://github.com/jj-vcs/jj/pull/4588 - ○ (6) Add support for multiple Git heads to avoid re-importing when switching workspaces [ TODO ] See: https://github.com/jj-vcs/jj/pull/4588
Side quests
- @ Write a stopgap CLI command (not to be merged) to enable creating colocated workspaces for real-world test purpose
Notes
Step (1) will bring internal support for colocated workspaces, but the MVP must include steps (3) and (4) to be usable.
Step (6) will solve an inconsistency and annoyance with the git_head(). To quote myself:
After my first experiments, I’m seeing three things I’d like to fix:
- when a workspace is not colocated, jj log still shows the git_head() from the @default workspace, which is IMO misleading.
git_head()is properly updated once the workspace is colocated;- when switching back and forth between workspaces, Jujutsu seems to reimport the state from Git, which creates a lot of duplicate changes;
- this one is certainly related to (1) and (2): if we create a new non-colocated workspace,
git_head()points to the Git HEAD from the latest visited colocated worktree, which does not give a consistent result.
Note to maintainers: if such a tracking issue does not seem appropriate to you, please close it.
Source: jj-vcs/jj