You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
tui: settings dialog shows Animations as off while animations are enabled by default #52577
/settings → Appearance → Animations shows off when the key is absent from cli.json, but animations actually run. The dialog resolves value ?? registry.default,
while every runtime read falls back to true:
Other settings match their registry default (session.scrollbar -> ?? false, mouse -> ?? true, session.thinking -> ?? "hide", scroll.speed -> 3); animations is the only mismatch.
Consistently reproducible. Writing animations: true explicitly makes the dialog
truthful — that's the workaround I'm using.
Plugins
None
OpenCode version
v2.0.21
Steps to reproduce
Leave animations unset in ~/.config/opencode/cli.json
Open /settings → Appearance → Animations shows off
Tool spinners still animate (⠋⠙⠹…) and app.toggle.animations offers "Disable animations"
Thanks for the clear report. I reproduced this on 2.0.21, and it still happens on the latest dev (891a020bc).
With no animations key in cli.json, /settings → Appearance → Animations shows off. After closing the dialog and sending a prompt, the spinner still animates: the two spinner screenshots below are 300 ms apart and show different frames. The recording below shows the whole sequence, and the script below reproduces it.
The cause matches what you found: the settings registry entry has default: false, while every runtime read falls back to ?? true. Until it's fixed, setting "animations": true explicitly, as you're doing, makes the dialog show the right value.
recording.mp4
Reproduction script (drive.ts)
// Repro for #52577: with `animations` unset in cli.json, /settings shows Animations "off"// while spinners still animate (runtime reads use `config.animations ?? true`).import{Effect}from"effect"import{Llm,OpenCodeDriver}from"opencode-drive"exportdefaultOpenCodeDriver.use({
...(process.env.OC_DEV ? {opencode: {dev: process.env.OC_DEV}} : {}),tui: {recording: true,keypressOverlay: true},},({ ui, llm })=>Effect.gen(function*(){yield*Effect.sleep(1500)// Settings dialog: Animations row uses registry default (false)yield*ui.type("/settings")yield*Effect.sleep(500)yield*ui.press("return")yield*Effect.sleep(1000)yield*ui.type("animations")yield*Effect.sleep(1000)yield*ui.screenshot("settings-animations")yield*Effect.sleep(1000)yield*ui.press("escape")yield*Effect.sleep(500)// Animations are actually running: the working spinner animates while the model is busyyield*llm.queue(Llm.pause(5000),Llm.text("Done."))yield*ui.submit("hello")yield*Effect.sleep(1500)yield*ui.screenshot("spinner-1")yield*Effect.sleep(300)yield*ui.screenshot("spinner-2")yield*ui.waitFor("Done.")yield*Effect.sleep(1000)}),)
Run it with opencode-drive: opencode-drive run ./drive.ts. It drives opencode from your PATH; set OC_DEV to the path of an OpenCode checkout to run that from source instead.
Activity
github-actions commentedon Oct 1, 2026
This issue might be a duplicate of or related to existing issues. Please check:
aihaipeng commentedon Oct 5, 2026
@simonklee I've submitted #53293 to fix the animation setting default mismatch reported in this issue.
opencodejr commentedon Oct 28, 2026
Thanks for the clear report. I reproduced this on 2.0.21, and it still happens on the latest
dev(891a020bc).With no
animationskey incli.json,/settings→ Appearance → Animations showsoff. After closing the dialog and sending a prompt, the spinner still animates: the two spinner screenshots below are 300 ms apart and show different frames. The recording below shows the whole sequence, and the script below reproduces it.The cause matches what you found: the settings registry entry has
default: false, while every runtime read falls back to?? true. Until it's fixed, setting"animations": trueexplicitly, as you're doing, makes the dialog show the right value.recording.mp4
Reproduction script (drive.ts)
Run it with opencode-drive:
opencode-drive run ./drive.ts. It drivesopencodefrom yourPATH; setOC_DEVto the path of an OpenCode checkout to run that from source instead.