Skip to content

System clipboard paste

Category: extensions · Baseline: modern · Tags: Xterm Extensions · Specification ↗

System clipboard paste describes how pasted text enters the terminal. Modern terminals support bracketed paste mode (DEC private mode 2004) — when enabled, pasted text is wrapped in ESC [ 200 ~ ... ESC [ 201 ~ markers so applications can distinguish it from typed input, disable autoindent, suppress history expansion, and treat the block atomically. Without bracketed paste, pasted text arrives as raw keystrokes indistinguishable from typing, which causes problems with shells, editors, and REPLs that interpret the first few characters before the rest of the paste arrives. This feature is distinct from OSC 52, which is a programmatic clipboard protocol for applications to push data to or read from the system clipboard via escape sequences. OSC 52 is about app-to-clipboard; system clipboard paste is about clipboard-to-app. Both typically coexist: bracketed paste for user-initiated pastes, OSC 52 for programmatic copy. Bracketed paste mode enablement can be probed (DECRPM mode 2004), but whether pasted text actually arrives bracketed in practice depends on the host terminal emulator, operating system paste mechanism, and user settings — and cannot be verified from inside a terminal session without an external paste action.
How this is testedunprobed
Manual verification required — no automated probe available.

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.

Supported by 0 of 14 backends (0%)

Terminal Applications

TerminalVersionSupportNotes
iTerm23.6.9? unknown
Ghostty1.3.1? unknown
Terminal.app2.15? unknown
Kitty0.46.2? unknown
VS Code1.113.0? unknown
Warp0.2026.03.18.08.24.03? unknown
Cursor2.6.21? unknown

Headless Backends

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

BackendVersionSupportNotes
Alacritty0.26.0? unknown
vt100.js0.2.1? unknown
vterm0.2.0? unknown
WezTerm0.1.0-fork.5? unknown
xterm.js5.5.0? unknown