Skip to content

Desktop Notifications (OSC 9/777)

Category: extensions · Baseline: rich · Tags: Operating System Commands (OSC)

Desktop notifications allow terminal applications to trigger system notifications. Two competing escape sequences exist: OSC 9 (iTerm2/ConEmu) sends a simple notification string, while OSC 777 (rxvt-unicode) supports structured notifications with title and body. Neither is standardized — support varies widely across terminals.

Common use case: long-running commands that notify when complete. Shells like zsh have plugins that automatically send a notification when a command takes longer than N seconds. The BEL character (0x07) is a simpler alternative — most terminals can be configured to show a visual bell or system notification on BEL.

How this is testedautomated
Send OSC 9 ; message BEL and verify the terminal accepts the notification sequence.

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-04-06

Supported by 10 of 12 terminals (83%). Not supported by: vt100.js, xterm.js. Part of the Rich TUI baseline. Notes: vt100.js: Not implemented — pure TypeScript emulator; xterm.js: OSC 9 notifications not implemented in xterm.js.

Supported by 9 of 14 backends (64%)

Terminal Applications

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

Headless Backends

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

BackendVersionSupportNotes
vterm0.2.0✓ yes
Alacritty0.26.0~ partialOSC 9 notifications not exposed via alacritty_terminal API
Kitty0.40.0~ partialOSC 9 notifications not exposed via Python batch bridge
WezTerm0.1.0-fork.5~ partialOSC 9 notifications not exposed via wezterm-term API
vt100.js0.2.1✗ noNot implemented — pure TypeScript emulator
xterm.js5.5.0✗ noOSC 9 notifications not implemented in xterm.js