$ npm install supports-terminal-graphicsDetect which terminal graphics protocols are supported (Kitty, iTerm2, Sixel)
Detects support for terminal graphics protocols using environment variables. This allows apps to choose the best available protocol for displaying images in the terminal.
| Protocol | Quality | Description |
|---|---|---|
| Kitty | Best | Truecolor RGBA, transparency, animation support |
| iTerm2 | Good | Full color, native macOS rendering |
| Sixel | Basic | Palette-based, widely supported legacy protocol |
npm install supports-terminal-graphics
import supportsTerminalGraphics from 'supports-terminal-graphics';
if (supportsTerminalGraphics.stdout.kitty) {
// Use Kitty graphics protocol (best quality)
} else if (supportsTerminalGraphics.stdout.iterm2) {
// Use iTerm2 inline images protocol
} else if (supportsTerminalGraphics.stdout.sixel) {
// Use Sixel protocol
} else {
// Fall back to ANSI block characters
}
You can also check stderr:
if (supportsTerminalGraphics.stderr.kitty) {
// Use Kitty graphics protocol on stderr
}
Returns an object with stdout and stderr properties, each containing:
kitty - boolean - Whether Kitty graphics protocol is supportediterm2 - boolean - Whether iTerm2 inline images protocol is supportedsixel - boolean - Whether Sixel protocol is supportedCreate a custom check for a specific stream.
import {createSupportsTerminalGraphics} from 'supports-terminal-graphics';
const support = createSupportsTerminalGraphics(process.stdout);
console.log(support.kitty); // true or false
console.log(support.iterm2); // true or false
console.log(support.sixel); // true or false
| Terminal | Kitty | iTerm2 | Sixel |
|---|---|---|---|
| Kitty | ✓ | ||
| Ghostty | ✓ | ||
| WezTerm | ✓ | ✓ | ✓ |
| iTerm2 (v3.6+) | ✓ | ✓ | |
| iTerm2 (v2.9.20150512+) | ✓ | ||
| Konsole (22.04+) | ✓ | ✓ | ✓ |
| VS Code (v1.80+) | ✓ | ✓ | |
| Rio | ✓ | ✓ | ✓ |
| Warp | ✓ | ||
| mintty | ✓ | ✓ | |
| mlterm | ✓ |