• v2.5.0 1020262d8f

    v2.5.0 Stable

    github-actions[bot] released this 2026-07-29 03:45:06 -07:00 | 0 commits to main since this release

    Tachikoma v2.5.0

    Diff since v2.4.0

    New features

    • Render into a caller-supplied IO sink (#39). with_terminal and app take an io keyword that accepts the sink itself — a socket, a pipe, an IOBuffer — instead of only building one from a tty path, so a Tachikoma app can be driven by something that isn't a terminal. An injected sink is treated as a remote terminal throughout: no raw mode on this process's stdin, no terminal probes, and no process-wide redirect_stdout. tty_size is required alongside io (an injected sink can't be probed), and the new exported set_size!(::Terminal, sz) lets a caller declare a new size where there is no SIGWINCH — a shrink arms a one-shot clear so no stale glyphs are left on the receiver. New on_terminal hands the live Terminal back before the loop starts, and input is the public way a headless caller supplies its keystroke source. The caller's io is the caller's to close.
    • Julia light and dark themes (#42). JULIA_DARK and JULIA_LIGHT join the exported theme constants (26 themes: 12 dark, 14 light), with contrast tuned for each background.
    • tachi render --start/--end. Render only a slice of a recording. Indices are 1-based and inclusive, matching tachi info's frame numbering, and the range applies at load so --compress/--skip compose on top of it.

    Fixes

    • leave_tui! no longer drops an embedding host out of raw mode on exit; setup and teardown now share one "not our terminal" predicate.
    • app(; io=…) no longer dups fd 0, which threw EINVAL in exactly the headless case the feature targets.
    • tachi render's summary line reported the pre-transform frame count rather than the frames actually written.
    • The demo smoke test no longer rewrites the tracked demos/TachikomaDemos/Project.toml on every run.

    Merged pull requests:

    • feat: render into a caller-supplied IO sink (with_terminal/app io kwarg) (#39) (@s-celles)
    • Add Julia light and dark themes (#42) (@s-celles)
    Downloads
  • v2.4.0 db8eef776f

    v2.4.0 Stable

    github-actions[bot] released this 2026-07-22 01:54:09 -07:00 | 5 commits to main since this release

    Tachikoma v2.4.0

    Diff since v2.3.8

    Tachikoma v2.4.0

    New features

    • dir= working directory for PTYs. pty_spawn and TerminalWidget accept a dir= keyword that sets the spawned child's working directory. Both spawn backends fail loudly rather than silently running in the inherited cwd — the macOS forkpty path chdirs the child (exiting 127 on failure) and the Linux posix_spawn path uses the addchdir_np file action.
    • Host stream guard (set_stream_guard!). New hook letting an embedding host (e.g. KaimonGate) run the entire with_terminal lifecycle with the real process stdout/stderr instead of a capture wrapper. This fixes a raw-mode TUI wedging the host REPL's stdin on exit when an output-capture mux is active (Kaimon #67).

    Robustness

    • Portable openpty resolution. The C openpty symbol is now resolved at runtime across libc/libutil variants (glibc libutil.so.1, merged-libc glibc ≥2.34, and musl) instead of a single hardcoded library name, erroring loudly with the list of candidates tried if none resolve.

    Tests

    • Coverage for dir= (child cwd is set; a bad directory never falls back to the parent's cwd) and for the stream-guard plumbing.

    Closed issues:

    • TextInput renders CJK wide characters as blank or garbled (#41)
    Downloads
  • v2.3.8 2ddef0f00a

    v2.3.8 Stable

    kahliburke released this 2026-07-20 04:28:45 -07:00 | 6 commits to main since this release

    Fixed

    • TextInput: CJK / wide characters now render correctly (#41). Rendering, horizontal scroll, and cursor placement work in display-column space, so two-column glyphs (Korean, Chinese, Japanese, …) get their proper lead + pad cells instead of being crammed into one cell and overwritten. Click-to-position is now width- and label-aware. Length validators continue to count each syllable as a single character.
    Downloads
  • v2.3.7 bbea0b8639

    v2.3.7 Stable

    kahliburke released this 2026-07-19 17:26:23 -07:00 | 7 commits to main since this release

    Tachikoma v2.3.7

    Diff since v2.3.6

    Improvements

    • Layout-independent theme selector binding. Ctrl+\ is unproducible on AZERTY and similar layouts where backslash requires AltGr — the character only exists as composed text, which terminals suppress while Ctrl is held. Ctrl+T is now the primary binding for the theme selector (letter chords report the same key code on every keyboard layout); Ctrl+\ is kept as a US-layout alias. Help, docs, and demo footers updated to match.
    Downloads
  • v2.3.6 86ed82e851

    v2.3.6 Stable

    github-actions[bot] released this 2026-07-17 06:21:29 -07:00 | 8 commits to main since this release

    Tachikoma v2.3.6

    Diff since v2.3.5

    Bug fixes

    • Input starvation when render-bound. When a frame's render exceeded the frame budget, the skipped inter-frame sleep was the only yield to Julia's event loop, so libuv never read stdin and every key was dropped while the app kept animating. The app loop now yields explicitly on render-bound frames, so keyboard/mouse input is serviced every frame regardless of render cost. Affects any app() running near or over its FPS budget, on any terminal.
    Downloads
  • v2.3.5 58135ce6cb

    v2.3.5 Stable

    kahliburke released this 2026-07-16 18:53:58 -07:00 | 10 commits to main since this release

    Windows — terminal sizing

    • terminal_size() now reads the live console size from CONOUT$, so Windows TUIs fill the real window at startup and track resizes — even when stdout is redirected (previously it fell back to the 24×80 default and never updated).

    Windows — input (new ReadConsoleInputW backend)

    • Mouse now works on Windows: press / release / drag / move, left / right / middle buttons, and vertical + horizontal wheel — events libuv's raw reader was silently dropping.
    • Keyboard runs through the same backend: characters, arrows, F1–F12, Home/End/PgUp/PgDn/Ins/Del, Enter/Tab/Esc/Backspace, Shift-Tab, and Ctrl combinations.
    • On by default on Windows; opt out with TACHIKOMA_WIN_CONSOLE_INPUT=0.

    International keyboard (all platforms)

    • Legacy (non-Kitty) input path decodes multi-byte UTF-8 — accented / non-ASCII characters no longer mojibake into a single Latin-1 char.
    • Kitty keyboard protocol requests flags 4 (alternate keys) + 16 (associated text) and decodes from the terminal-reported character instead of a US-only shift table, so shifted symbols, accents, and AltGr/Option combos decode correctly on any layout.
    • Adds a non-exported raw-input tap (enable_raw_capture! / last_event_raw) and a tools/keyboard_diag diagnostic app.

    Compatibility

    • Non-Windows: only the international-keyboard decoding applies; all Windows code is @static/runtime-gated and inert off Windows.
    • No exported API changes, no breaking changes → patch release.
    Downloads
  • v2.3.4 e0955fa2d0

    v2.3.4 Stable

    github-actions[bot] released this 2026-07-11 22:25:58 -07:00 | 13 commits to main since this release

    Tachikoma v2.3.4

    Diff since v2.3.3

    Patch fix: set_string! now strips C0/DEL control characters (\r, \n, \b, DEL) before drawing, so a bare control char in widget content can no longer be flushed to the terminal raw (a lone \r jumped the cursor to column 0 and smeared the row — seen in Kaimon's Activity tab / log pane on slate tool-call content). _strip_ansi only removed ESC sequences; this closes the bare-control-char hole. Full suite 5106/5106.

    Downloads
  • v2.3.3 ad55783a2d

    v2.3.3 Stable

    github-actions[bot] released this 2026-07-09 20:43:07 -07:00 | 14 commits to main since this release

    Tachikoma v2.3.3

    Diff since v2.3.2

    Tachikoma v2.3.3 — DataTable wide-character (CJK) layout fix

    Fixed

    • DataTable no longer shears its layout on wide/double-width characters. A cell containing CJK (or other double-width) text — e.g. a 開門 session label — was padded and truncated by character count instead of display width, so the cell overran its column: the trailing glyph clipped and every column to its right shifted. Cell padding/truncation, header truncation, and auto-width sizing now measure in display width. The same fix applies to PagedDataTable. (The buffer and terminal-flush layers were already width-aware; this closes the widget-layer gap left by the earlier truncation-crash fix in #36.)

    Added

    • truncate_to_width(s, w) — a grapheme-aware, textwidth-budgeted truncation helper (shared by the table widgets).
    Downloads
  • v2.3.2 601ba4965f

    v2.3.2 Stable

    kahliburke released this 2026-07-07 18:33:04 -07:00 | 15 commits to main since this release

    Fixes

    • Fix hard-coded absolute Tachikoma dev path in demo Project.toml (3ea9c6c)

    Full Changelog: https://github.com/kahliburke/Tachikoma.jl/compare/v2.3.1...v2.3.2

    Downloads
  • v2.3.1 ef917f2ca3

    v2.3.1 Stable

    kahliburke released this 2026-06-30 11:51:34 -07:00 | 18 commits to main since this release

    Bug fix

    Fixes a silent GIF export failure in the in-app recording export modal.

    When a downstream project doesn't have Tachikoma's optional GIF weakdeps (FreeTypeAbstraction + ColorTypes), stopping a recording would write the .tach but silently drop the .gif, while still reporting it as saved.

    • Honest export reporting — the post-export notification is now built from the formats that actually wrote; failures are reported explicitly (and the swallowed warning now carries a backtrace).
    • Availability-gated selection — a GIF preference carried over from a project that had the deps can no longer sit checked-but-grayed and silently fail. SVG remains always-available (pure-core, no FreeType).
    • tachi CLI--compress no longer errors (compress_dead_space now takes pixel_snapshots positionally).

    To enable GIF export, add the weakdeps to your project or call enable_gif():

    using Pkg; Pkg.add(["FreeTypeAbstraction", "ColorTypes"])
    
    Downloads