ctx terminal

A UTF-8 vector graphics and audio capable terminal, with support for the ctx vector protocol, itself implemented with ctx, thus able to run with SDL2, on KMS/DRM (linux and openbsd verified), inside a utf8 capable terminal, as streamed kitty/iterm2 images (slow) and on linux framebuffer devices.

The clock in the above screenshot is a shellscript.

The easiest way to test ctx as a terminal is installing it through flatpak

$ flatpak --user remote-add --no-gpg-verify ctx https://ctx.graphics/flatpak/
$ flatpak --user install ctx graphics.ctx.terminal

For source building instructions see the SDK documentation.

WARNING: The ctx terminal undergoes fuzz testing and its quite vtfuzz.c fuzzer has uncovered problems in screen, mlterm, zutty and more terminals, there are capabilities which should be optional which are not yet - like stb_image for image format decoding and the ability to listen to the microphone that are a potential security risk if you are using a system with programs that target the ctx terminal - for now unlikely since the terminal is rather unknown; but you've been warned.

Exhaustive list of supported escape sequences acts as a refererence for further development and a shorthand cheat-sheet for writing code for the terminal.

VT4xx, ECMA-48
Almost full vt100 and vt220 escape sequence handling, scrollback, like xterm, dterm window manipulation (among tabs/clients), bracketed paste, 256 and 24bit colors are supported - and a growing subset of vt420 and other relevant terminal escape sequences.
The terminals 16 color palette called ametameric is optimized for accesibility for dichromats.
ctx vector graphics
Using the ctx protocol, by first entering ctx mode with \e[?7020h which creates a new or accesses an existing vector drawing context for the current line.
audio recording and playback (only raw pcm for now, opus codec NYI)
DEC compatible raster encoding, with 6row high 1bit raster lines * colors used.
kitty graphics
max 4 images per line, no z-ordering - using stb_image for PNG decoding.
iterm2 inline images
iterm2 inline image image protocol in one bulk base64 transfer, using stb_image for image decoding.
mouse xterm
xterm mouse reporting modes - somewhat incomplete
Most of dterms window management integration.
The terminal uses 7bit control codes, and reserves bytes>127 for use in character data.
vt102 escapes
>100 points on the vttest score card
ECMA-48 colors
The standard defining the 16 colors
ECMA-48 justification
Only implementing wordwrap for now, can be extended with more.
pixel mouse
escape sequence to get pixel coordinates for mouse events
ECMA-48 proportional
Limited predictable proportional rather than monospaced text, for best results render proportional text in a finall pass, starting with left most column.

Missing bits:

hyperlink escape sequence
configure/customize fonts
shift or other modifier for select for copy+paste in altscreen
Drag to select in vim
The final result of the interaction is correct, but intermediate frames are perhaps not queued for draw?
Cursor setting
alt-screen issue
only code 1049 works fully specs compliant, the others leave the cursor in the wrong spot.
vt52 cursor keys
not passing vttest in vt52 mode

Historic inspiration and references for earlier vector graphics capable systems include ReGIS, The MGR Window System and ripscript have provided more graphics rich terminal experiences in the past.