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
| Field | What it is |
|---|---|
id | Lowercase letters, digits and hyphens. Also the directory name for this workspace's state. |
name | The label in the sidebar header. |
color | Accent color as a hex triplet, e.g. #10b981. |
icon | One or two characters, shown in the sidebar and the space dots. |
defaultEditor | code, cursor, subl or webstorm. |
defaultPortBase | A 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. |
worktreeRoot | Optional. 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
| Path | What |
|---|---|
config/workspaces.json | The 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.