Summary
On OpenCode Web, upgrading past v1.17.19 auto-enables the new ("tabs on top") layout. Once enabled, there is no UI to switch back to the legacy layout, and the new layout does not implement workspaces (git worktrees) at all. Combined, this means a Web user who had workspaces enabled silently loses the feature with no in-app way to recover it.
Environment
- OpenCode Web (not desktop; I haven't tested desktop)
- Client:
1.18.2, Server: 1.18.3
- Reproduced against latest
dev as of filing
Steps to reproduce
- On OpenCode Web, be on a version ≤
1.17.19 with the legacy layout and workspaces enabled for a git project.
- Upgrade to
1.18.x. The new layout auto-enables (shouldEnableNewLayout flips newLayoutDesigns once you cross the 1.17.19 cutoff — packages/app/src/context/settings.tsx).
- Open the sidebar / command palette and try to enable workspaces.
- Open Settings → General and try to revert to the legacy layout.
Expected
- The "Enable workspaces" / "Toggle workspaces" controls remain available, or
- At minimum, a visible setting to revert to the legacy layout where workspaces still works.
Actual
- No workspaces UI in the new layout. The new layout (
packages/app/src/pages/layout-new.tsx) is a shell (Titlebar + content) with no projects sidebar. The workspaces feature — the right-click "Enable workspaces" item (packages/app/src/pages/layout/sidebar-project.tsx) and the "Toggle workspaces" command palette entry — only exists in LegacyLayout (packages/app/src/pages/layout.tsx). layout-new.tsx has zero references to workspaces/worktree/sidebar. The server-side /experimental/worktree endpoint still works (returns []), so this is purely a client gap.
- No way to revert on Web. The "New layout" toggle in Settings → General only renders when
layoutTransitionAvailable is true (packages/app/src/components/settings-v2/general.tsx, the <Show when={settings.general.layoutTransitionAvailable()}> block). That requires layoutTransitionEligible, which is set by a single call, in the desktop onboarding only (packages/desktop/src/renderer/onboarding.tsx → settings.general.setOldLayoutEligible(...)). The Web app never sets it, so the row is permanently hidden and the user is locked in.
Root cause
Two independent gaps:
- The new layout shipped without porting the workspaces feature.
- Layout-revert eligibility is only populated by desktop onboarding (
window.api.isOldLayoutEligible()), leaving Web users with no escape hatch before the 2026-09-14 sunset.
Workaround
Flip the persisted setting directly in the browser console:
const d = JSON.parse(localStorage.getItem("settings.v3") || "{}")
d.general = d.general || {}
d.general.newLayoutDesigns = false
d.general.layoutTransitionEligible = true
localStorage.setItem("settings.v3", JSON.stringify(d))
location.reload()
Impact
Any Web user who relied on workspaces loses the feature on upgrade with no in-app recovery path. Feels like a regression rather than an intentional migration.
Suggested fix
- Port workspaces (sidebar project context menu + "Toggle workspaces" command) to the new layout, and/or
- Set
layoutTransitionEligible for Web users too (or unconditionally show the revert toggle until sunset) so there's always an in-app way back.
Summary
On OpenCode Web, upgrading past
v1.17.19auto-enables the new ("tabs on top") layout. Once enabled, there is no UI to switch back to the legacy layout, and the new layout does not implement workspaces (git worktrees) at all. Combined, this means a Web user who had workspaces enabled silently loses the feature with no in-app way to recover it.Environment
1.18.2, Server:1.18.3devas of filingSteps to reproduce
1.17.19with the legacy layout and workspaces enabled for a git project.1.18.x. The new layout auto-enables (shouldEnableNewLayoutflipsnewLayoutDesignsonce you cross the1.17.19cutoff —packages/app/src/context/settings.tsx).Expected
Actual
packages/app/src/pages/layout-new.tsx) is a shell (Titlebar + content) with no projects sidebar. The workspaces feature — the right-click "Enable workspaces" item (packages/app/src/pages/layout/sidebar-project.tsx) and the "Toggle workspaces" command palette entry — only exists inLegacyLayout(packages/app/src/pages/layout.tsx).layout-new.tsxhas zero references toworkspaces/worktree/sidebar. The server-side/experimental/worktreeendpoint still works (returns[]), so this is purely a client gap.layoutTransitionAvailableis true (packages/app/src/components/settings-v2/general.tsx, the<Show when={settings.general.layoutTransitionAvailable()}>block). That requireslayoutTransitionEligible, which is set by a single call, in the desktop onboarding only (packages/desktop/src/renderer/onboarding.tsx→settings.general.setOldLayoutEligible(...)). The Web app never sets it, so the row is permanently hidden and the user is locked in.Root cause
Two independent gaps:
window.api.isOldLayoutEligible()), leaving Web users with no escape hatch before the2026-09-14sunset.Workaround
Flip the persisted setting directly in the browser console:
Impact
Any Web user who relied on workspaces loses the feature on upgrade with no in-app recovery path. Feels like a regression rather than an intentional migration.
Suggested fix
layoutTransitionEligiblefor Web users too (or unconditionally show the revert toggle until sunset) so there's always an in-app way back.