All notable changes to this project are documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[0.1.0] - 2026-05-31
Added
Vtex.Input.Tokenizer— pure, stateless tokenizer turning a byte stream into typed tokens (:text,:csi,:ss3,:osc,:esc,:invalid) plus a leftover binary for incomplete sequences. DCS/APC/PM/SOS strings are rejected. The CSI body faithfully reproduces Williams'csi_entry/csi_param/csi_intermediate/csi_ignorestates and "anywhere" transitions: parameter and intermediate bytes are collected into separate buffers ({:csi, params, intermediates, final}), and malformed sequences are silently discarded.Vtex.Input.Stream— stateful streaming wrapper that buffers partial sequences across chunks and enforces a 256-byte buffer cap against memory-exhaustion input.pending?/1andflush/1let the caller resolve a standaloneEscapekeypress against anESC-prefixed sequence using a read timeout.Vtex.Input— maps tokens to semantic events (keys, function keys, SGR, characters), recognising both CSI and SS3 forms of cursor/editing keys.Alt/Meta-modified keys (ESC-prefixed) surface as{:alt, byte};Shift/Ctrl/Alt-modified arrows, navigation and function keys surface as{:key, base, mods}; characters are emitted as UTF-8 codepoints.Vtex.SGR— parses SGR parameter strings into structured colour/style attributes, including 256-colour and truecolor selectors.Vtex.Mouse— SGR mouse reporting:enable/0/disable/0control sequences and a decoder; events surface fromVtex.Inputas{:mouse, map}with action, button, position and modifiers.Vtex.Paste— bracketed paste:enable/0/disable/0control sequences; the paste markers surface fromVtex.Inputas:paste_start/:paste_end.Vtex.Focus— focus reporting:enable/0/disable/0control sequences; the terminal's focus changes surface fromVtex.Inputas:focus_in/:focus_out.Vtex.Inputalso decodes Cursor Position Reports (CSI r ; c R) into{:cursor_position, row, col}.- Output support (the library now handles both directions):
Vtex.SGR.encode/1(attributes to an SGR sequence, including 256-colour and truecolor),Vtex.Output.Cursor(movement, position, save/restore, visibility) andVtex.Output.Screen(clearing, the alternate buffer, scroll regions). All return iodata to write; the library still performs no IO of its own. Vtex.Output.ANSI— a drop-in superset ofIO.ANSI, mirroring every function byte-for-byte (asserted againstIO.ANSIin the tests) and adding 24-bit truecolor (true_color/3,true_color_background/3).Vtex.Output.OSC— window title (title/1) and clickable hyperlinks (hyperlink/2).