Skip to content

Roadmap #821

@kommander

Description

@kommander

Build the features OpenCode needs, stabilize the core, then refactor and optimize.

Now

v0.1, v0.2, v0.3 — Exploring the problem space.

  • [DONE] CLI render mode (split mode), with interactive TUI at the bottom and immutable scrollback log stream at the top.bf8f195
  • [DONE] Rework color transport for RGBA+A and indexed metadata. Cache nearest-index translations so both TS and native paths skip repeated conversion. 95d36f3
  • [DONE] Split the 3d/threejs core part into a separate package a10e71c
  • Find what features OpenCode and terminal.shop need
  • Replace setStyledText with a native interface for incremental text updates (depends on MarkTree)
  • Cross-platform clipboard with OSC52 and platform-specific fallbacks
  • Make OpenTUI run on other runtimes like Node and Deno (debunification)
  • Native streaming path for SSH connections
  • Add virtual text for textarea autocompletion. TypeScript-only first, native via MarkTree later
  • Hunk navigation for code review in OpenCode. Inline editing likely depends on MarkTree
  • Timing-based scroll handling with inertia and speed, telling trackpad from mouse. Partial version exists
  • Load external modules at runtime (in progress)
  • OpenCode tests use OpenTUI test helpers. Fill gaps in OpenTUI's testing tools
  • Kitty Graphics & Sixel support

Next

v0.x — Refactor the hell out of it.

  • Neovim-style sticky marks (MarkTree/extmarks) for highlights, virtual text, and conceal. Marks move with edits so treesitter skips full re-highlighting
  • Move markdown parsing and rendering to native code, compatible with MarkTree
  • TextBufferView caches all virtual lines, even invisible ones. Constrain to the viewport
  • Close the gap between OpenTUI's grapheme/width model, Unicode, and how terminals render complex text
  • Kitty keyboard protocol follow-ups for repeat event shape, modified Tab encoding, KP_BEGIN naming, and other spec gaps

Later

v1.0 — Everything moves native.

  • The renderable tree, layout engine (Yoga), and rendering move to native code. Native callbacks for calculateLayout let you update renderables directly without a separate update pass

Ongoing

Work that spans every phase.

  • Replace inconsistent TS benchmarks with a canonical setup. Go-style calibration, warmup, robust stats, and JSONL output for opentui-bench
  • Yoga-via-wasm has large overhead. Build Yoga into the OpenTUI binary with manual bindings. Becomes obsolete when the renderable tree goes native
  • Rope is overkill for read-only text. A simpler TextBuffer would reduce overhead. Deprioritized after mixed benchmarks (Feb 2026)
  • Remove non-determinism from the frame pipeline with an injectable Clock abstraction (in progress)

Metadata

Metadata

Labels

coreThis relates to the core packagedocumentationImprovements or additions to documentation

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions