Workspaces

A workspace is a named group of repos with its own defaults and its own state on disk. One per client, per employer, per side project — whatever separation you actually want between piles of work.

Creating one

A fresh install asks for the first one before anything else: a name and an accent color. The id is slugified from the name and the icon is the name's first letter. Everything is editable afterwards.

Later workspaces are created from the workspaces view, which asks for the same fields plus the defaults below.

What a workspace owns

FieldWhat it is
idLowercase letters, digits and hyphens. Also the directory name for this workspace's state.
nameThe label in the sidebar header.
colorAccent color as a hex triplet, e.g. #10b981.
iconOne or two characters, shown in the sidebar and the space dots.
defaultEditorcode, cursor, subl or webstorm.
defaultPortBaseA number between 1024 and 65535. Stored and editable, but nothing reads it today — a worktree's dev-server port comes from its repo's own default port.
worktreeRootOptional. Where new repos put their worktrees.

Repos and worktree state are per workspace. Credentials and tracked time are not: Jira, GitLab and GitHub tokens and activity.json live under ~/.strado and are shared by every workspace on the machine.

Worktree root

Left unset, each repo's worktrees go beside it in a <repo>.worktrees sibling directory. Set, every new worktree in the workspace goes under one root as <root>/<repoId> instead, which keeps a repos folder from filling up with a sibling directory per repo and gives you one path to exclude from Spotlight and from backups.

The setting only affects worktrees created after it changes. git records a worktree by absolute path, so existing ones keep working where they are.

Switching

Three ways, all equivalent:

  • ++ and ++ move to the neighbouring workspace. Ctrl works in place of Command.
  • The dots at the bottom of the sidebar. A neighbour slides the sidebar carousel across; anything further away switches directly.
  • The command palette, +K, which also lists worktrees from workspaces you are not currently in and switches for you when you open one.

Workspaces can be dragged into whatever order you want in the workspaces view; Escape during a drag abandons it.

Where the registry lives

PathWhat
config/workspaces.jsonThe registry: every workspace, plus which one is active
config/workspaces/<id>/That workspace's repos.json and state.json
config/**/.backups/Rotating backups of every store, written automatically

config/ sits in the server's working directory on the stable profile, and at <state home>/config on the dev profile. STRADO_CONFIG_DIR overrides both.

Every store is written backup, then temp file, then rename, and a file that exists but is corrupt always raises an error rather than being read as empty — losing a workspace quietly is worse than refusing to start. Worktree state goes one step further and copies the corrupt bytes aside before it throws; the workspace registry only reports the validation failure.

Where to go next