Skip to content

Web: no way to revert the new layout, and the new layout is missing workspaces/worktrees #37546

Description

@blancqua

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

  1. On OpenCode Web, be on a version ≤ 1.17.19 with the legacy layout and workspaces enabled for a git project.
  2. 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).
  3. Open the sidebar / command palette and try to enable workspaces.
  4. 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.tsxsettings.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:

  1. The new layout shipped without porting the workspaces feature.
  2. 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.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions