Repository navigation
Description
Describe the enhancement you want to request
Let a user-installed plugin play a startup (boot) animation in the desktop app: on launch, play a short animation over the shell, then hand over to the UI — the same experience as the DeepSeek Harness (dsh) boot-animation plugins.
Two things are missing today:
- A user-installable entrypoint for the web/desktop client.
packages/appalready has a real GUI extension system (packages/gui-extensions), but extensions are composed at compile time insrc/renderer.tsandsrc/main.ts. There is no directory an external extension is discovered from, and noexports["./…"]convention mirroring the TUI'sexports["./tui"]. Anexports["./gui"](or./web) entrypoint under the same discovery rules would let a plugin loaded from config contribute to the desktop/web app. - A startup/boot contribution point in the GUI extension SDK. The SDK's registries are
Command,MenuItem,Panel,SettingsPage,Server,LinkHandler,TitlebarItem,Slot,Style,MenubarItem, and the slots arewindow.bottom,session.header,session.panel.end,session.panel.sidebar. None of them is a startup surface. ASplash/Bootregistry (or awindow.overlay/app.startupslot) with a clear "the app is ready" signal would let a plugin animate at launch and then dismiss itself.
Nice to have: a command/keybind to replay the animation.
Current behaviour
- The desktop app's UI is
packages/app, shipped bypackages/desktop; its features (terminal, review, files, browser, SSH, WSL, updater, …) are GUI extensions onpackages/gui-extensions. - The launch surface is a fixed pulsing-logo splash (
packages/app/src/app.tsx), which is not user-customisable. - The TUI plugin API (
@opencode/plugin/tui,exports["./tui"]) is loaded only by the terminal CLI/TUI. On desktop the app runsopencode-cli serve --service; a TUI plugin configured intui.jsonhas no effect there, and the desktop process never emits the CLI'sV2 TUI/ plugin reconciliation log lines. - I built a working pixel-whale splash as a TUI plugin (
.opencode/plugins/whale-splash/,@opencode/plugin/tui). It plays in the terminal TUI but cannot appear in the desktop app, for the reasons above.
Additional context
I searched for duplicates before filing. The closest open requests are about a plugin/UI surface in the desktop app in general — #41441 (TUI plugin/slot parity in Desktop), #43132 (plugin UI surface for the web/desktop app), #6330 (cross-client UI intent channel), #5971 (sidebar panel API), #11494 (plugin preference tabs), #54440 (make the UI adjustable by the AI / desktop themes). None of them covers a launch-time surface: they ask for commands, dialogs, sidebars and settings, and even if they landed tomorrow there would still be nowhere for a plugin to render a startup animation. This request is specifically about that gap, and I'm happy to fold it into whichever of those takes the shape.
Environment
- opencode version:
2.0.27(CLI on PATH); desktop-bundled CLI2.0.29; desktop app2.0.29 - OS: Windows 11 (
Windows NT 10.0.26200.9711, x64) - Terminal: n/a (desktop app)
- Shell:
cmd.exe - Install/channel:
latest - Active plugins:
@firecrawl/opencode,opencode-tavily
Activity
opencode-agent commentedon Oct 16, 2026
Thanks for the detailed request! In short, you'd like a user-installed plugin to be able to play a startup animation in the desktop app and then hand over to the UI. That needs two things: a way to install GUI plugins at runtime, and a startup contribution point in the GUI extension SDK.
On the first part, the open PR #55246 adds a
./guiexport next to.and./tui, so a plugin listed inopencode.jsoncan contribute to the desktop app. The second part, a launch-time surface (something like aSplash/Bootregistry or anapp.startupslot with a "the app is ready" signal and a way to dismiss it), isn't covered by any existing issue or PR I could find. A plugin can't do this today, because the current slots (window.bottom,session.header,session.panel.*) all render after the app has loaded.Related issues and PRs:
./guiexports (your point 1)Maintainers will consider it.