Skip to content

Kitty graphics: animation

Category: extensions · Baseline: rich · Tags: Kitty Extensions · Specification ↗

The animation frame action (a=f) adds animation frames to a previously transmitted image. Supports frame composition modes (overwrite, blend), per-frame timing, and looping. Not all terminals that support kitty graphics support animation. Animation is one of the least portable parts of the Kitty graphics protocol. It assumes the terminal stores image state, composes frames, and schedules timing rather than just painting cells. Applications should detect support and provide a static-image fallback, especially through multiplexers or remote sessions.
How this is testedautomated
Transmit a base image, then add an animation frame with a=f. Check response for success (not EINVAL).

The same probe runs against headless backends (via Termless) and real terminal apps (via a daemon launched in each terminal). This lets us distinguish parser correctness from rendering correctness.

Analysis2026-05-17

Supported by 8 of 12 terminals (67%). Not supported by: vt100.js, Alacritty, WezTerm, xterm.js. Part of the Rich TUI baseline.

Supported by 10 of 14 backends (71%)

Terminal Applications

TerminalVersionSupportNotes
iTerm23.6.9✓ yes
Ghostty1.3.1✓ yes
VS Code✓ yes
Warp✓ yes
Kitty0.46.2✓ yes
Cursor✓ yes
Terminal.app✓ yes

Headless Backends

Parser correctness only — a means the parser accepts the sequence.

BackendVersionSupportNotes
vterm.js0.2.0✓ yes
Alacritty0.26.0✗ noKitty graphics not implemented in alacritty
vt100.js0.2.1✗ noNot implemented — pure TypeScript emulator
WezTerm0.1.0-fork.5✗ noKitty graphics not implemented in wezterm-term crate
xterm.js5.5.0✗ noKitty graphics protocol not implemented in xterm.js