tui4s
Project

Roadmap

The planned and deferred features of tui4s, each with its GitHub issue.

No version of tui4s is published yet. The first release is 0.1.0-RC1 (ADR 0014). Each line below is an open issue on GitHub. The issue has the details and the decision that it waits for. The issue list is the current state.

Integrations

  • A ZIO DSL module (tui4s-zio) over kyo-ui: #18.
  • A Cats Effect DSL module (tui4s-cats) over kyo-ui: #19.
  • The assistant: Codex app-server as a provider: #48.

Input

  • Mouse input (click, wheel) as an opt-in: #20.
  • The kitty keyboard protocol, so that the terminal reports Shift-Enter: #23.
  • inputFilter and inputMask on text inputs: #31.
  • One-line inputs: onChange on each edit, not only on Enter: #32.

Rendering

  • The terminal cursor shows under an overlay that does not trap the focus: #30.
  • Viewports: a stick-to-bottom mode: #43.
  • The painter: a wide glyph that the right edge of a clip cuts: #44.
  • The rendering cost: the scroll of a list is O(rows); Toasts and Spinner render on each tick: #33.
  • The runtime cost of tui4s (from the bench numbers): #50.

API

  • A ui"""...""" template interpolator (intent only, ADR 0017): #21.
  • Tui.run: the promise copy of the run result: #46.

Widgets and composables

  • tui4s-widgets on the web: the unit scale, a click on RadioGroup, a list that follows: #25.
  • tui4s-use: useProcess holds a scheduler thread; a LocalStorage test; CRLF: #45.
  • More widgets: form validation, a file picker, a Markdown viewer, a calendar, a line chart: #47.

Web and kyo-ui

These issues are drafts for kyo-ui. The maintainer posts them upstream (ADR 0019).

  • A keydown on a field in a nested region is lost (kyo-ui JS): #26.
  • A handled keydown cannot prevent the default (kyo-ui JS): #27.
  • Each Enter submits the form that holds the field (kyo-ui JS): #28.
  • A Stylesheet cannot override inline styles (kyo-ui): #29.
  • Bound inputs lose keys that come fast (kyo-ui JS): #37.
  • A bound value goes into the DOM value attribute (kyo-ui JS): #38.
  • A cell or ch length unit (kyo-ui): #39.

Kyo and jatatui

  • Remove the own signal watcher of the runner when Kyo fixes the Signal.observe leak: #8.
  • Measure the split frames again when Kyo closes the lost wakeup of observe: #9.
  • kyo-kernel 1.0.0-RC7 has JMH in compile scope: #40.
  • A runner outside the package kyo cannot honour UI.scrollIntoView: #41.
  • jatatui: NativeLoader leaves one /tmp/jni-* directory per start: #42.

Benchmarks

  • Stage 2: Form, Todo, Log viewer, Chat, Cells: #22.
  • A person of each ecosystem reviews each implementation: #34.
  • One run on a dedicated machine, with the published numbers: #51.

Platforms

  • A supported Windows port: #24.
  • An inline viewport (a run in N rows below the prompt): #49.

The assistant

  • Document the provider defaults of the assistant: #35.
  • Split Surface into data and a KeyVault capability: #36.

Propose a feature

Open an issue on GitHub. Give the use case, a small kyo-ui example of the UI, and what tui4s does today.

Copyright © 2026