Skip to content

[maintenance] Update dependencies — @opentui 0.1.61 → 0.1.79 + 10 other packages #50

@platypusrex

Description

@platypusrex

Summary

12 dependencies are outdated. The most significant update is @opentui/core and @opentui/react jumping 18 patch releases (0.1.61 → 0.1.79), which includes critical bug fixes (memory leaks, streaming jitter, scroll behavior), performance improvements, and new features.

Dependency Update Table

Runtime Dependencies

Package Current Target Bump
@opentui/core 0.1.61 0.1.79 patch (×18)
@opentui/react 0.1.61 0.1.79 patch (×18)
react 19.1.1 19.2.4 minor
zod 4.2.1 4.3.6 minor
clipboardy 5.0.2 5.3.0 minor
commander 14.0.2 14.0.3 patch
diff 8.0.2 8.0.3 patch

Dev Dependencies

Package Current Target Bump
@babel/core 7.28.5 7.29.0 minor
@biomejs/biome 2.3.11 2.3.15 patch (pinned)
@types/bun 1.2.20 1.3.9 minor
promptfoo 0.120.8 0.120.24 patch

Peer Dependencies

Package Current Target Bump
typescript 5.9.2 5.9.3 patch

@OpenTui Changelog (0.1.62 → 0.1.79)

This is the critical update. The packages are pre-1.0 (alpha-stage) and have been shipping rapidly — 18 releases between Dec 16, 2025 and Feb 11, 2026.

Bug Fixes Relevant to Us

These fix issues in APIs and behaviors we actively use:

  • Memory leaks in Zig unicode encoding and grapheme pool (v0.1.63, #431) — fixes resource leaks in the core rendering engine
  • CodeRenderable streaming jitter with drawUnstyledText=false (v0.1.67, #459) — directly affects our streaming markdown/code rendering
  • Stale diff lineInfo (v0.1.66, #457) — we display diffs in tool output
  • Stale hit grid after scroll/translate (v0.1.70, #480) — affects click targets after scrolling
  • Double escape handling (v0.1.78, #648) — we use Escape in multiple keyboard shortcut handlers
  • INPUT event for all mutating edit actions (v0.1.79, #664) — we rely on TextareaRenderable input events
  • Fallback scroll events to focused renderable (v0.1.79, #663)
  • Cursor stuck at virtual extmark (v0.1.76, #557)
  • Keyboard selection anchor stability across scroll (v0.1.75, #542)
  • Scrollbox sticky scroll reset (v0.1.75, #531) — we use scrollbox components with sticky scroll
  • Multiline paste viewport/scroll margin (v0.1.75, #582)
  • Unicode char widths (v0.1.62, #425)
  • Kitty keyboard protocol flags (v0.1.63, #426)
  • Kitty numpad key code mappings (v0.1.78, #632)
  • Editor-view stale glyphs when text shrinks (v0.1.78, #634)
  • Guard MarkdownRenderable.getStyle against undefined syntaxStyle (v0.1.76, #606)
  • Transparent background alpha channel (v0.1.70, #478)
  • Mouse event parsing (v0.1.79, #669)
  • DEC private modes restored on focus-in for Windows Terminal mouse tracking (v0.1.78, #655)
  • flushSync rename in react-reconciler 0.32.0 (v0.1.68, #454) — React compatibility fix
  • UTF8 WrapBreak offsets widened to u32 for lines > 64KB (v0.1.68, #464)

Performance Improvements

  • Word wrap perf via byte_offset tracking (v0.1.69, #473)
  • Cache measureForDimensions results (v0.1.69, #475)
  • Optimized UTF8 wrap breaks (v0.1.73, #507)
  • ASCII wrapping fast path via strict printable-only invariant (v0.1.73, #506)
  • Opaque fast-path in setCellWithAlphaBlending (v0.1.73, #500)
  • Debounced hover recheck after hit-grid changes (v0.1.73, #502)
  • Avoid stdout write overlaps when threaded (v0.1.73, #516)

New Features (Available After Update)

  • MarkdownRenderable with automatic table alignment (v0.1.75, #433)
  • focusable option on Box (v0.1.76, #585)
  • Auto-focus on click — browser-like behavior (v0.1.76, #584)
  • OSC 52 clipboard support for SSH/remote sessions (v0.1.76, #546)
  • marginX/marginY and paddingX/paddingY style shorthand attributes (v0.1.78, #619)
  • Dark/light theme detection via Mode 2031 (v0.1.78, #657)
  • OSC 8 hyperlink metadata in markdown links (v0.1.76, #607)
  • autoFocus renderer option (v0.1.77, #616)
  • Key event stopPropagation (v0.1.70, #501)
  • Text truncation + CJK word wrap fix (v0.1.73, #529)
  • Custom inline highlighting callback (v0.1.75, #568)
  • Select all in textarea (v0.1.76, #558)
  • captureSpans and getSpanLines for styled terminal output capture (v0.1.75, #574)
  • SIGPIPE, SIGBUS, SIGFPE added to default exit signals (v0.1.75, #547)
  • OSC 66 compatibility for older terminals (v0.1.76, #605)
  • Input migrated to extend Textarea (v0.1.75, #539) — see compatibility note below

Compatibility Concerns

InputRenderable type — Input→Textarea migration (v0.1.75)

In v0.1.75, the Input component was migrated to extend Textarea (#539). We import InputRenderable from @opentui/core in src/tui/components/session-picker.tsx and use it to type a ref for the rename input field. We call .focus() on this ref.

Action required: Verify InputRenderable type still exists and that .focus() still works. This is likely fine since Input now extends Textarea (additive change), but needs confirmation.

Our @OpenTui API surface

For reference, here are all the APIs we consume from these packages:

From @opentui/core:

  • createCliRenderer — app startup (1 file)
  • RGBA — color values via .fromHex() and .fromInts() (4 files)
  • SyntaxStyle — syntax highlighting via .fromStyles() (2 files)
  • TextareaRenderable — textarea ref type (3 files)
  • InputRenderable — input ref type (1 file)
  • ScrollAcceleration — scroll config type (1 file)
  • addDefaultParsers / getTreeSitterClient — tree-sitter setup (1 file)

From @opentui/react:

  • createRoot — React entry point (1 file)
  • useKeyboard — keyboard event handling (8 files)
  • useRenderer — renderer access (1 file)
  • useTerminalDimensions — terminal size (2 files)

Validation Checklist

  • Update all versions in package.json
  • bun install — clean install with updated lockfile
  • bun check:types — no type errors
  • bun lint — no new lint issues
  • bun build — binary compiles successfully
  • Smoke test: textarea input and editing
  • Smoke test: scrolling behavior (message list, code blocks)
  • Smoke test: keyboard shortcuts (Escape, Ctrl+P, Tab, etc.)
  • Smoke test: markdown/code rendering in streaming responses
  • Smoke test: session picker rename input (InputRenderable compat)
  • Smoke test: diff display in tool output

Release Notes

Full release history: https://github.com/anomalyco/opentui/releases

Metadata

Metadata

Assignees

No one assigned

    Labels

    P1High prioritydxDeveloper experiencetuiTerminal UI

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions