Description
Bug
OpenCode Desktop v1.17.14 can get stuck in an infinite startup crash loop with: Error: Notification server not found: http://[server-ip]:4096
The error appears shortly after app startup, and there is no way to clear it from the UI. Restart and Reload Webview do not fix it; the same error comes back on the next launch.
What Happened
I encountered this after a hard crash on macOS 27.0 beta. The entire macOS UI froze, so I had to hard reset the computer.
After rebooting, OpenCode Desktop was stuck in this state whenever I opened it. The IP address in the error is an OpenCode server on my local network, and I can connect to that server normally outside of this crash loop.
Expected Behavior
OpenCode Desktop should not crash during startup because notification state is missing for a server key.
If notification state cannot be found for the active server, the app should continue loading and treat notifications for that server as empty/unavailable.
Actual Behavior
https://i.imgur.com/PrzmNdu.png
The renderer crashes during app startup with:
Error: Notification server not found: http://[server-ip]:4096
at ensure (oc://renderer/assets/main-B1osgIPb.js:85602:24)
at selected (oc://renderer/assets/main-B1osgIPb.js:85634:28)
at Object.unseenCount (oc://renderer/assets/main-B1osgIPb.js:85648:37)
at oc://renderer/assets/main-B1osgIPb.js:109261:107
at Array.reduce (<anonymous>)
at Object.fn (oc://renderer/assets/main-B1osgIPb.js:109261:47)
at runComputation (oc://renderer/assets/main-B1osgIPb.js:487:22)
at updateComputation (oc://renderer/assets/main-B1osgIPb.js:470:3)
at Object.readSignal (oc://renderer/assets/main-B1osgIPb.js:403:67)
at Object.fn (oc://renderer/assets/main-B1osgIPb.js:109269:72)
at runComputation (oc://renderer/assets/main-B1osgIPb.js:487:22)
at updateComputation (oc://renderer/assets/main-B1osgIPb.js:470:3)
at createMemo (oc://renderer/assets/main-B1osgIPb.js:119:3)
at ProjectIcon (oc://renderer/assets/main-B1osgIPb.js:109269:18)
This leaves the app unusable.
Debugging Notes
The crash appears to come from a stale/missing server key reaching the notification context.
At render time, a project icon asks for unseen notification count:
ProjectIcon
-> notification.project.unseenCount(directory)
-> selected()
-> ensure(activeServer())
The relevant source path appears to be:
packages/app/src/pages/layout/sidebar-items.tsx
ProjectIcon renders unseen notification count
packages/app/src/context/notification.tsx
selected() calls ensure(activeServer())
ensure() looks up the active server key in global.servers.list()
The failing condition is:
active server key: http://[server-ip]:4096
current server list: sidecar only
So notification lookup tries to resolve:
but the active runtime server list does not contain a connection with that key. It only contains the desktop sidecar connection.
The current behavior is fatal:
const conn = global.servers.list().find((item) => ServerConnection.key(item) === key)
if (!conn) throw new Error(`Notification server not found: ${key}`)
Because this throw happens during a Solid reactive render path, the renderer crashes. On reload, the app restores the same persisted/default state, reaches the same render path, and crashes again. That creates the infinite loop.
Suspected State Mismatch
From debugging the local state, this looked like a mismatch between persisted/default server identity and the runtime server list.
The stale key came from the configured/default remote server:
defaultServerUrl = http://[server-ip]:4096
But on desktop startup, the available runtime server list contained the local sidecar connection rather than a direct connection keyed by that remote URL.
After the hard macOS reset, persisted state still referenced the remote server key in project/session state, but the server list no longer had a corresponding server entry. That made notification state lookup fail during initial rendering.
The likely shape was:
server.key / active notification key:
http://[server-ip]:4096
global.servers.list():
sidecar
persisted project/session state:
references http://[server-ip]:4096
Why This Is Fatal
The missing server only affects notification badge state, but the exception is thrown synchronously while rendering the app shell/sidebar. That means a cosmetic notification lookup can crash the whole desktop renderer.
Expected fallback behavior for this path would be something like:
ready: false
session notifications: []
project notifications: []
unseen counts: 0
markViewed: no-op
That would preserve debuggability while preventing the renderer from crashing.
Temporary fix
I was able to clear the error temporarily by deleting opencode.global.dat. However, the error returned after I opened the app and connected to the server again.
I was able to stop the crash loop by removing the saved defaultServerUrl value from the OpenCode Desktop settings/config, so the app no longer started with the stale remote server key.
Environment
- OpenCode Desktop: v1.17.14
- macOS: 27.0 beta
- Server: OpenCode server on local network at
http://[server-ip]:4096
Screenshot
https://i.imgur.com/PrzmNdu.png
Plugins
None
OpenCode version
v1.17.14
Steps to reproduce
-
Configure OpenCode Desktop v1.17.14 with defaultServerUrl pointing to a remote/local-network OpenCode server, for example http://[server-ip]:4096.
-
Have persisted desktop state that references that server key in project/session state, but where the server list no longer contains a matching server entry.
-
Launch OpenCode Desktop.
-
The app attempts to render project/session notification badges during startup.
-
The renderer crashes with:
Error: Notification server not found: http://[server-ip]:4096
Screenshot and/or share link
https://i.imgur.com/PrzmNdu.png
Operating System
MacOS 27 Beta. Version 27.0.0: Mon Jun 15 22:59:49 PDT 2026; root:xnu-13432.0.5.501.1~2/RELEASE_ARM64_T6020 arm64
Terminal
N/A, this is the opencode desktop app
Description
Bug
OpenCode Desktop v1.17.14 can get stuck in an infinite startup crash loop with:
Error: Notification server not found: http://[server-ip]:4096The error appears shortly after app startup, and there is no way to clear it from the UI. Restart and Reload Webview do not fix it; the same error comes back on the next launch.
What Happened
I encountered this after a hard crash on macOS 27.0 beta. The entire macOS UI froze, so I had to hard reset the computer.
After rebooting, OpenCode Desktop was stuck in this state whenever I opened it. The IP address in the error is an OpenCode server on my local network, and I can connect to that server normally outside of this crash loop.
Expected Behavior
OpenCode Desktop should not crash during startup because notification state is missing for a server key.
If notification state cannot be found for the active server, the app should continue loading and treat notifications for that server as empty/unavailable.
Actual Behavior
https://i.imgur.com/PrzmNdu.png
The renderer crashes during app startup with:
This leaves the app unusable.
Debugging Notes
The crash appears to come from a stale/missing server key reaching the notification context.
At render time, a project icon asks for unseen notification count:
The relevant source path appears to be:
The failing condition is:
So notification lookup tries to resolve:
but the active runtime server list does not contain a connection with that key. It only contains the desktop sidecar connection.
The current behavior is fatal:
Because this throw happens during a Solid reactive render path, the renderer crashes. On reload, the app restores the same persisted/default state, reaches the same render path, and crashes again. That creates the infinite loop.
Suspected State Mismatch
From debugging the local state, this looked like a mismatch between persisted/default server identity and the runtime server list.
The stale key came from the configured/default remote server:
But on desktop startup, the available runtime server list contained the local sidecar connection rather than a direct connection keyed by that remote URL.
After the hard macOS reset, persisted state still referenced the remote server key in project/session state, but the server list no longer had a corresponding server entry. That made notification state lookup fail during initial rendering.
The likely shape was:
Why This Is Fatal
The missing server only affects notification badge state, but the exception is thrown synchronously while rendering the app shell/sidebar. That means a cosmetic notification lookup can crash the whole desktop renderer.
Expected fallback behavior for this path would be something like:
That would preserve debuggability while preventing the renderer from crashing.
Temporary fix
I was able to clear the error temporarily by deleting
opencode.global.dat. However, the error returned after I opened the app and connected to the server again.I was able to stop the crash loop by removing the saved
defaultServerUrlvalue from the OpenCode Desktop settings/config, so the app no longer started with the stale remote server key.Environment
http://[server-ip]:4096Screenshot
https://i.imgur.com/PrzmNdu.png
Plugins
None
OpenCode version
v1.17.14
Steps to reproduce
Configure OpenCode Desktop v1.17.14 with
defaultServerUrlpointing to a remote/local-network OpenCode server, for examplehttp://[server-ip]:4096.Have persisted desktop state that references that server key in project/session state, but where the server list no longer contains a matching server entry.
Launch OpenCode Desktop.
The app attempts to render project/session notification badges during startup.
The renderer crashes with:
Screenshot and/or share link
https://i.imgur.com/PrzmNdu.png
Operating System
MacOS 27 Beta. Version 27.0.0: Mon Jun 15 22:59:49 PDT 2026; root:xnu-13432.0.5.501.1~2/RELEASE_ARM64_T6020 arm64
Terminal
N/A, this is the opencode desktop app