Repository navigation
Description
Description
title: [desktop] Renderer freezes when adding a project (v2.0.26)
Summary
The OpenCode desktop app (Windows) renderer becomes unresponsive for several
seconds when a project is added from the Home page. It's a heavy main-thread
stall, not a crash — devtools logs "renderer unresponsive". Worse with many
projects/worktrees/sessions loaded, but reproducible with a small set too.
Steps to reproduce
- Open the OpenCode desktop app (v2.0.26).
- Go to the Home page (project list).
- Add a project.
- Observe the renderer hang / become unresponsive during and briefly after.
Expected: the project list updates smoothly.
Actual: the renderer stalls ("renderer unresponsive" in the devtools console).
Environment
- Platform: Windows
- App: OpenCode desktop 2.0.26 (latest stable channel)
- Local LLM sidecar running; ~12 projects, 8 worktrees, ~230 sessions.
- Confirmed the shipped 2.0.26 bundle matches the repo source byte-for-byte,
so this is the released build, not a custom install.
Root cause (confirmed against source)
In packages/app/src/runtime/server/runtime.tsx, createServerController():
const projectsList = createMemo(() => projects.list().map(enrich))
const recentlyClosedList = createMemo(() => { ... projects.recentlyClosed()...map(enrich) })
where enrich(project) (runtime.tsx) does, on every call:
const [childStore] = sync.child(project.worktree, { bootstrap: false })
... merge { ...metadata, ...projectMeta, ...project } ... + icon override
and projects.list() resolves to input.store.projects[scope()] (a SolidJS
store read, registry.tsx createServerProjects).
Every project-list change recomputes these deriveds and enrich() returns a
fresh object per project while also reading the per-directory child store
and full server metadata. That churns identities through the home-model memos
(home/model.ts: projects/recentlyClosed) and the project-list UI, forcing
a large rebuild on the main thread.
Honest caveat: SolidJS createMemo only recomputes on dependency change, so
this looks like heavy re-derivation + identity churn rather than an infinite
loop — but it's enough to stall the renderer on "add project".
Suggested fix
Give each enriched project a stable identity (cache enrichment per worktree, or
stabilize the projects.list() array/object identity) so the memos don't
rebuild new objects on every project change.
Plugins
hindsight-coding-agents (@vectorize-io/hindsight-coding-agents) v0.8.0
OpenCode version
2.0.26
Steps to reproduce
- Open the OpenCode desktop app (v2.0.26).
- Go to the Home page (project list).
- Add a project.
- Observe the renderer hang / become unresponsive during and briefly after.
Expected: the project list updates smoothly.
Actual: the renderer stalls ("renderer unresponsive" in the devtools console).
Environment
- Platform: Windows
- App: OpenCode desktop 2.0.26 (latest stable channel)
- Local LLM sidecar running; ~12 projects, 8 worktrees, ~230 sessions.
- Confirmed the shipped 2.0.26 bundle matches the repo source byte-for-byte,
so this is the released build, not a custom install.
Screenshot and/or share link
No response
Operating System
Windows
Terminal
No response
Activity
opencode-agent commentedon Oct 11, 2026
Thanks for the detailed report and the source analysis! I think this is a duplicate of #52236, which reports the same freeze on Windows desktop when adding a project with many projects loaded.
Possible duplicates and related issues, ordered by likelihood:
Your
enrich()/identity-churn analysis inruntime.tsxwould be useful on #52236, so please consider adding it there. The bot will close this issue as a duplicate in 1 day unless you reply explaining how your problem is different.opencode-agent commentedon Oct 12, 2026
We haven't heard back since this was flagged as a possible duplicate, so I'm closing it as a duplicate of #52236. That issue reports the same freeze on Windows desktop when you add a project with many projects loaded. Please follow #52236 for updates, and consider adding your
enrich()/identity-churn analysis fromruntime.tsxthere, since it could help whoever picks it up. If your problem turns out to be different, reply here with how it differs and we can reopen.