`fancy_animations: false` and `low_motion: true` already exist on the settings struct, but the flag was undocumented and the only ways to opt in were the `/settings` slash command or hand-editing `~/.config/deepseek/settings.toml` — there was no environment- level signal that platform a11y tooling could carry forward. * `NO_ANIMATIONS=1` env var now forces `low_motion = true` and `fancy_animations = false` at startup, regardless of what's on disk. Recognises `1`, `true`, `yes`, `on` (case-insensitive); any other value is treated as unset. * `Settings::apply_env_overrides()` is now called at the end of `Settings::load()`, so every consumer (App::new, /config, the doctor surface) sees the override applied uniformly. The override is a startup-time overlay — changing the env var mid-session has no effect. * New `docs/ACCESSIBILITY.md` documents the existing `low_motion`, `fancy_animations`, `calm_mode`, `show_thinking`, and `show_tool_details` toggles plus the `NO_ANIMATIONS` startup override. Includes guidance for screen-reader users and a link back to this issue for follow-up motion regressions. Tests: 3 new tests in `settings.rs` (force-low-motion-on, override- user-opt-in, truthy-spelling-recognition). All three serialise through a static Mutex so the cargo parallel runner doesn't observe interleaved env mutations.
3.4 KiB
Accessibility
DeepSeek-TUI runs in a terminal, so the platform's own accessibility stack (screen readers, magnifiers, terminal-level themes) does most of the work. The TUI provides a small set of toggles that reduce visual motion and density for screen-reader and low-motion users.
Quick reference
| Toggle | Default | Effect |
|---|---|---|
NO_ANIMATIONS=1 env var |
unset | At startup, forces low_motion = true and fancy_animations = false. Overrides whatever's saved in settings.toml. |
low_motion setting |
false |
Suppresses spinners' motion, transcript fade-ins, footer drift, and the active-cell pulse. The frame-rate limiter also slows down idle redraws so the cursor doesn't blink as aggressively. |
fancy_animations setting |
false |
Footer water-spout strip and pulsing sub-agent counter. Off by default. |
calm_mode setting |
false |
Collapses tool-output details by default and trims status messages. Useful for screen readers that announce every redraw. |
show_thinking setting |
true |
Set to false to hide model reasoning_content blocks entirely. |
show_tool_details setting |
true |
Set to false to render tool calls as one-liners without expanded payloads. |
Standard env-var surface
Set these in your shell profile so they apply to every session:
# Force low-motion + no fancy animations.
export NO_ANIMATIONS=1
# Optional: respect the wider terminal-color convention.
export NO_COLOR=1 # honored by the underlying ratatui backend
NO_ANIMATIONS accepts any of 1, true, yes, or on
(case-insensitive). Any other value (including 0, false, empty,
or unset) leaves your saved settings alone.
The override is applied once at startup. Changing the env var mid-session has no effect — settings are only re-read on the next launch.
Configuring via /settings
The same toggles are reachable from the command palette:
/settings set low_motion on/settings set fancy_animations off/settings set calm_mode on
Settings written this way persist to ~/.config/deepseek/settings.toml.
The NO_ANIMATIONS env var still wins at startup if it's set, so
unsetting the env var is the way to honor your saved choice.
Notes for screen-reader users
low_motionslows the idle redraw loop to ~120ms per frame so the cursor isn't constantly repositioned. Combined withcalm_mode, the redraw rate stays low enough that VoiceOver / Orca announcements track linearly with model output instead of re-reading the whole screen on each tick.- The transcript is pure text — no images or canvas rendering — so any terminal that integrates with the platform's accessibility service (e.g. macOS Terminal.app, iTerm2, Ghostty, Windows Terminal) will pass the rendered content straight through.
- If you find a UI surface that still produces motion when
low_motion = true, please file an issue againstPRIOR: Screen-reader / accessibility flagwith a screenshot or terminal recording.