0.3.0 (2026-09-07)
Three things every application built on Atui was writing for itself, which is
the sign that they belong here. All extracted from
dockat, the way Atui.TextInput was.
Atui.Text— what a terminal UI does to a string that does not fit, and the one thing it does to a string it did not write:wrap/2andhard_wrap/2,elide_left/2andelide_right/2for the two ends worth keeping,first_fitting/2for a footer that says as much as there is room for, andsanitize/1, which takes the escape sequences out of somebody else's output before it is drawn. A grid of cells is a surface where an unsanitised\e[2Jis not a character but an instruction, so a toolkit that hands out the grid should hand out this too.Atui.Fetch— runs a function in a process of its own and sends the answer to a view module as an event.Atui.Runtimeis a single process, so an ssh round trip or a slow query taken inside a callback is a UI that has stopped with the keyboard in it. The event is addressed to the module rather than to whichever view has focus, so an answer that lands while a popup is open still reaches the view that asked; and nothing it runs can crash the process, since a crash report printed over a drawn frame is a worse failure than the one that caused it.Atui.Screen.put_text_right/6— the right-aligned sibling ofput_text_centered/5, with a margin so that a label sits inside a border rather than on it. Four views in one application had the same private version of it.
0.2.0 (2026-09-03)
Atui.TextInput— a single-line text field a view holds in its own state, the way it holds anAtui.Panes:handle_key/2claims the printable characters and the readline editing keys,into/3folds the reply back into the host's state, anddraw/4puts it in one row of a screen with the cursor drawn as a reversed cell. Long values scroll to keep the cursor in view.
0.1.0
First release as a library.
Extracted from the application it grew inside: :atui is now a package with no
application callback module of its own, and the demo it was written against
lives in demo/ as a separate project depending on it by path.
Atui.Runtime— the IO loop: raw terminal, a stack of views, per-view timers, and a repaint that writes only when the frame changedAtui.View— the view behaviour, withmount/1,render/2,place/2and callbacks for keys, ticks and eventsAtui.Panes— a tiling window manager a view holds in its own state: open and close windows, move focus in two axes, swap positions, one ticker per pane. Extracted from the demo's root view, where it was not reusable.Atui.Screen/Atui.Rect/Atui.Layout— clipped cell drawing, box borders, geometry and grid splittingAtui.Style— styles as data, emitted as SGR runs at render timeAtui.Key/Atui.Input/Atui.Terminal— byte decoding including modified keys, and the raw-mode setup a BEAM TUI actually needsAtui.version/0— for an application to put in a title bar