anomalyco / anomalyco/opencode
Layout sunset hard-codes the new layout with no override for desktop users
@Hona is already working on this.
Since Sep 14, 2026.
- Dominant language
- TypeScript
- Stars
- 209k
- Forks
- 27.5k
- PR merge metrics
- PR metrics pending
Description
Layout sunset hard-codes the new layout with no escape hatch for existing desktop users
When the oldInterfaceSunset date passes, desktop users who want to keep the original ("legacy") layout are stuck with the new layout and receive a dismissible notice instead of a toggle. This is a product decision, but there is currently no opt-out or override, and the related threads below have been open for months without a response.
Related (all appear to be the same root cause):
- #37012
- #48882
- #48888
- #48951
- #39835
- #38230
- #37546
Root cause
All interactivity is gated on oldInterfaceSunset in packages/app/src/context/settings.tsx:
oldInterfaceSunset = new Date(2026, 8, 14)(line 63) — onceDate.now() >= this, the hub retires the old interface.resolveNewLayoutDesigns(retired, preference, fallback)(line 129) —if (retired) return trueignores any saved user preference.layoutTransitionState(line 116) —available: scheduled && eligible && !retiredhides the Settings toggle entirely after the sunset.setNewLayoutDesigns(line 432) —const next = oldInterfaceRetired() ? true : valueblocks switching back after the sunset.- The effect at line 340 force-sets
newLayoutDesigns = trueonce retired.
There is no environment variable, config key, or CLI flag that overrides any of this.
Verified local workaround
For desktop builds (Electron asar), replacing the following byte-for-byte keeps the toggle available and lets users stay on the old layout:
if (layoutUpgrade()) return true→ an emptyif (layoutUpgrade()) {}block (removes the force-intro of the new layout for upgraders).new Date(2026, 8, 14)→ a far-future date (e.g.new Date(2099, 0, 14)) sooldInterfaceRetired()stays false and the Settings toggle remains available.
Caveat: in the minified renderer bundle (strict-mode ES module), the replacement must avoid a leading-zero numeric literal (new Date(2099, 0, 01) is an octal literal and throws SyntaxError: Octal literals are not allowed in strict mode, which crashes the whole renderer on startup).
Feature request
Please provide a supported, durable path for existing users to stay on the original layout, for example:
- An environment variable or setting (e.g.
OPENCODE_USE_LEGACY_LAYOUT=1) that keeps the toggle available regardless of the sunset date, or - Treating the sunset as "default to new, but respect an explicit saved preference" instead of hard-forcing the new layout (i.e. drop the
oldInterfaceRetired() ? true : valuegate and the force-set effect), which is what the workaround above effectively does.
If the sunset must stay, a reprieve (like earlier postponements) plus a documented override would still let long-time users keep their preferred interface.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.