# \[ANN\] Tachikoma.jl — A terminal UI framework for Julia

**URL:** https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878
**Category:** Package Announcements
**Tags:** announcement, terminal, tooling
**Created:** [February 27, 2026, 3:37am UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878 "2026-02-27T03:37:39Z")
**Posts on this page:** 20
**Page:** 6

<div class="post-metadata">

### Author: ![goerz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/goerz/32/3269_2.png) [@goerz](https://discourse.julialang.org/u/goerz)
#### Post date: [March 26, 2026, 2:30pm UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/112 "2026-03-26T14:30:56Z")

</div>

@kahliburke Let me know if you’d rather have this feedback as an issue, but going through the demos, it seems like pixel graphics are not working in [WezTerm](https://wezterm.org), despite WezTerm’s supposed support for both Kitty and Sixel graphics (in addition to the iTerm protocol, which I use most of the time)

BTW, thanks for adding the light themes. They look good! I might want a bit more contrast (actually black foreground text instead of gray), but that’s something to play around with at some point…

---

<div class="post-metadata">

### Author: ![devel-chm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/devel-chm/32/3572_2.png) [@devel-chm](https://discourse.julialang.org/u/devel-chm)
#### Post date: [March 26, 2026, 4:52pm UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/113 "2026-03-26T16:52:34Z")

</div>

> [@magister-ludi](#):
>
> I agree that the instructions break on Win11. TBH, that’s fairly easy to work around. Happy to provide further input if requested.

```julia-auto
julia> using Pkg

julia> Pkg.activate("demos/TachikomaDemos")
  Activating new project at `C:\Users\me\demos\TachikomaDemos`

julia> Pkg.instantiate()
  No Changes to `C:\Users\me\demos\TachikomaDemos\Project.toml`
  No Changes to `C:\Users\me\demos\TachikomaDemos\Manifest.toml`

julia> using TachikomaDemos
ERROR: ArgumentError: Package TachikomaDemos not found in current path.
- Run `import Pkg; Pkg.add("TachikomaDemos")` to install the TachikomaDemos package.

```

I don’t understand how the existing instructions can work without setting a  
working directory containing `demos/TachikomaDemos`. Looking at the source  
tree for `Tachikoma` it appears that there is a `demos` directory containing a  
`TachikomaDemos` directory with the sources for that package. Maybe the  
instructions would work if you start from the install location for `Tachikoma`?

If I `cd` to `.julia/packages/Tachikoma/...../demos/TachikomaDemos/` then  
the commands work and I am able to run `launcher()` and all the demos including  
the Life one which now has more pixels and equal aspect ratios in the display x,y.

Nice!

I don’t have any ideas on how to have the demos more integrated with the  
module. You could register a module for the demos as one approach.

-chm

---

<div class="post-metadata">

### Author: ![goerz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/goerz/32/3269_2.png) [@goerz](https://discourse.julialang.org/u/goerz)
#### Post date: [March 26, 2026, 5:02pm UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/114 "2026-03-26T17:02:31Z")

</div>

> [@goerz](#):
>
> it seems like pixel graphics are not working in [WezTerm](https://wezterm.org)

Actually, I think it was just that I was making my terminal too large. This is what “full screen” looks like for the “PixelImage Demo”

 ![CleanShot 2026-03-26 at 11.53.31@2x](https://global.discourse-cdn.com/julialang/original/3X/9/a/9a2ffa38f1429918b937f5f0f5b6c7d045ff2cdb.png)

And, for the “Sixel Gallery”

 ![CleanShot 2026-03-26 at 11.57.23@2x](https://global.discourse-cdn.com/julialang/original/3X/f/6/f6e01daef6bff97d64e43f7aeebfa34b1ee15160.png)

Those looked like they were potentially just [unicode block drawing characters](https://en.wikipedia.org/wiki/Box-drawing_characters#Block_Elements) (you’re going to have to look at these at full size, not the scaled-down display in Discourse), but I think that it’s just the actual image data that’s limited here. When I make my terminal smaller, it looks like

 ![CleanShot 2026-03-26 at 11.58.38@2x](https://global.discourse-cdn.com/julialang/original/3X/1/e/1e0bfcfd9edd750e86d930d65f84c88371f8e5c5.png)

and

 ![CleanShot 2026-03-26 at 11.58.10@2x](https://global.discourse-cdn.com/julialang/original/3X/4/1/415e3f6aa541e7ef50efc3dc5e589c0b18e8197e.png)

respectively, which looks very pixel-level.

These seem to be auto-detected Sixel graphics.

If I force the kitty protocol with `export TACHIKOMA_GFX=kitty`, neither demo shows any image data. Maybe because, as it turns out [WezTerm only supports that protocol partially](https://github.com/wezterm/wezterm/issues/986). It also doesn’t work inside `tmux`, but then, I don’t think I ever really tried to get Sixel working inside `tmux`, and probably could spend more time on that. It _does_ work over SSH!

I tried out the kitty-protocol too, inside the actual Kitty terminal emulator. The animation performance in full-screen is much better. Not surprising, since Sixel has a reputation for being low-performance. I don’t know if adding support for the [iTerm Inline Images Protocol](https://iterm2.com/documentation-images.html), which WezTerm also supports (and which I use routinely and have working _inside_ `tmux`), would be an option that would provide better performance

---

<div class="post-metadata">

### Author: ![Ronis\_BR](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ronis_br/32/50999_2.png) [@Ronis\_BR](https://discourse.julialang.org/u/Ronis_BR)
#### Post date: [March 26, 2026, 5:50pm UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/115 "2026-03-26T17:50:59Z")

</div>

Hi @goerz !

Are you using macOS (maybe yes due to the screenshots)? If so, I think there is a bug with WezTerm and kitty graphics

> <https://github.com/kahliburke/Tachikoma.jl/issues/8>
>
> Unfortunately, using Kitty graphics via shared memory does not work with WezTerm… on macOS (https://github.com/wezterm/wezterm/issues/7631). It does work when using files to transfer the data (I tested this). I believe that using a file is still much faster than inline encoding, and it would be nice to support this as fallback when kitty-shmem is disabled.

---

<div class="post-metadata">

### Author: ![kahliburke](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kahliburke/32/208472_2.png) [@kahliburke](https://discourse.julialang.org/u/kahliburke)
#### Post date: [April 3, 2026, 10:53am UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/116 "2026-04-03T10:53:54Z")

</div>

# Tachikoma.jl v2.0.1 — Every frame, right on time

Hi everyone! Tachikoma.jl v2.0.1 is out with a bunch of fixes and improvements since the v2.0 launch.

**Highlights:**

- **Frame timing is back to rock-solid** — restored deadline-based frame pacer that locks precisely to target FPS (60, 120, 240, whatever you throw at it). The v2.0 Timer+Channel mechanism introduced ~2ms jitter per frame; this release fixes it with cooperative `sleep()` that also keeps sixel rendering flicker-free.

- **Full Unicode grapheme support** — zero-width combining marks (`ṅ`, `n̈`), CJK wide characters (`你好`), and precomposed glyphs now render correctly across all widgets: Paragraph, Table, TabBar, StatusBar, and the terminal emulator. Thanks to @ronisbr for the core Cell/Buffer work.

- **New `WidgetScroll` widget** — wrap any widget in a scrollable 2D viewport with click-drag panning, scroll wheel, keyboard navigation, and scrollbars. Great for dashboards larger than your terminal. Also by @ronisbr.

- **Launcher overhaul** — demos are now organized in a collapsible TreeView by category (Visual, Widgets, Data, Input, System, Test) with full mouse support.

- **Performance** — lazy pixel framebuffer clear saves ~5MB/frame memset when you’re not using sixel graphics; ASCII fast path skips grapheme segmentation for normal text.

- **Windows resize fix** — terminal size detection now works correctly after stdout redirect. Thanks @davidanthoff.

Full changelog: [Release v2.0.1 · kahliburke/Tachikoma.jl · GitHub](https://github.com/kahliburke/Tachikoma.jl/releases/tag/v2.0.1)

---

<div class="post-metadata">

### Author: ![lmiq](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lmiq/32/18314_2.png) [@lmiq](https://discourse.julialang.org/u/lmiq)
#### Post date: [April 3, 2026, 12:27pm UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/117 "2026-04-03T12:27:54Z")

</div>

That should probably be a 2.1 release, there are new features there.

---

<div class="post-metadata">

### Author: ![kahliburke](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kahliburke/32/208472_2.png) [@kahliburke](https://discourse.julialang.org/u/kahliburke)
#### Post date: [April 3, 2026, 12:29pm UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/118 "2026-04-03T12:29:47Z")

</div>

Is that what you would prefer? I can do one easily.

---

<div class="post-metadata">

### Author: ![lmiq](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lmiq/32/18314_2.png) [@lmiq](https://discourse.julialang.org/u/lmiq)
#### Post date: [April 3, 2026, 12:37pm UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/119 "2026-04-03T12:37:30Z")

</div>

That’s how server works:

Semantic Versioning 2.0.0 | Semantic Versioning [Semantic Versioning 2.0.0 | Semantic Versioning](https://share.google/J5KsO5U848zlF7klD)

---

<div class="post-metadata">

### Author: ![kahliburke](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kahliburke/32/208472_2.png) [@kahliburke](https://discourse.julialang.org/u/kahliburke)
#### Post date: [April 3, 2026, 12:38pm UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/120 "2026-04-03T12:38:35Z")

</div>

Thank you for the helpful lesson.

---

<div class="post-metadata">

### Author: ![kahliburke](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kahliburke/32/208472_2.png) [@kahliburke](https://discourse.julialang.org/u/kahliburke)
#### Post date: [April 3, 2026, 12:42pm UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/121 "2026-04-03T12:42:35Z")

</div>

# Tachikoma.jl v2.1.0 — Every frame, right on time

Hi everyone! Tachikoma.jl v2.1.0 is out with a bunch of fixes and improvements since the v2.0 launch.

**Highlights:**

- **Frame timing is back to rock-solid** — restored deadline-based frame pacer that locks precisely to target FPS (60, 120, 240, whatever you throw at it). The v2.0 Timer+Channel mechanism introduced ~2ms jitter per frame; this release fixes it with cooperative `sleep()` that also keeps sixel rendering flicker-free.

- **Full Unicode grapheme support** — zero-width combining marks (`ṅ`, `n̈`), CJK wide characters (`你好`), and precomposed glyphs now render correctly across all widgets: Paragraph, Table, TabBar, StatusBar, and the terminal emulator. Thanks to @ronisbr for the core Cell/Buffer work.

- **New `WidgetScroll` widget** — wrap any widget in a scrollable 2D viewport with click-drag panning, scroll wheel, keyboard navigation, and scrollbars. Great for dashboards larger than your terminal. Also by @ronisbr.

- **Launcher overhaul** — demos are now organized in a collapsible TreeView by category (Visual, Widgets, Data, Input, System, Test) with full mouse support.

- **Performance** — lazy pixel framebuffer clear saves ~5MB/frame memset when you’re not using sixel graphics; ASCII fast path skips grapheme segmentation for normal text.

- **Windows resize fix** — terminal size detection now works correctly after stdout redirect. Thanks @davidanthoff.

Full changelog: [https://github.com/kahliburke/Tachikoma.jl/releases/tag/v2.1.0](https://github.com/kahliburke/Tachikoma.jl/releases/tag/v2.1.0)

---

<div class="post-metadata">

### Author: ![csvance](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/csvance/32/218927_2.png) [@csvance](https://discourse.julialang.org/u/csvance)
#### Post date: [April 3, 2026, 4:35pm UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/122 "2026-04-03T16:35:13Z")

</div>

It feels like one day I’m going to come back here and Tachikoma.jl will be competing with emacs for number of features and extensibility. Great work!

Looking forward to setting up some skills for building interactive ML training dashboards with Tachikoma. That’s my new favorite thing to do, just build a dedicated interface for visualization per project / experimental workflow.

---

<div class="post-metadata">

### Author: ![kahliburke](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kahliburke/32/208472_2.png) [@kahliburke](https://discourse.julialang.org/u/kahliburke)
#### Post date: [April 3, 2026, 4:37pm UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/124 "2026-04-03T16:37:18Z")

</div>

> [@csvance](#):
>
> Looking forward to setting up some skills for building interactive ML training dashboards with Tachikoma. That’s my new favorite thing to do, just build a dedicated interface for visualization per project / experimental workflow.

We should talk about Kaimon.jl!

---

<div class="post-metadata">

### Author: ![csvance](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/csvance/32/218927_2.png) [@csvance](https://discourse.julialang.org/u/csvance)
#### Post date: [May 13, 2026, 9:22pm UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/125 "2026-05-13T21:22:25Z")

</div>

Made a dashboard for our training data sidecar with Kaimon.jl in around an hour, including the planning session. Now I get to see it go brrrr in style 😎 Apparently agents can actually look at the rendered output and use that as feedback for improvement 😮 You don’t need any fancy computer/browser use or VLM capabilities.

 ![image](https://global.discourse-cdn.com/julialang/original/3X/9/8/984da7f04b5ca7508370c999541244ad3a1a47d0.png)

```julia-auto
● Bash(julia --project=. -e '
      using Tachikoma…)
  ⎿ ====== ENCODED ======
     ╭─ campfire-dashboard ─────────────────────────────────────────────────────────────────────────────╮
     │localhost:12345 │
     … +60 lines (ctrl+o to expand)
  ⎿ (timeout 1m)
  ⎿ Allowed by auto mode classifier

● All four views render correctly with proper sparklines and tables. Now testing the CLI help path quickly.

```

---

<div class="post-metadata">

### Author: ![digital\_carver](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/digital_carver/32/33818_2.png) [@digital\_carver](https://discourse.julialang.org/u/digital_carver)
#### Post date: [May 14, 2026, 11:48am UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/126 "2026-05-14T11:48:58Z")

</div>

> [@magister-ludi](#):
>
> Function keys 1 to 5 are not captured correctly

This one might be from [Function keys i.e. F5 and F6 input random characters on windows console · Issue #28799 · JuliaLang/julia · GitHub](https://github.com/JuliaLang/julia/issues/28799) which is hopefully fixed in Julia 1.13 (it also affects [TerminalPager](https://discourse.julialang.org/t/ann-terminalpager-jl-repl-inline-help-added/133131/52), for example).

---

<div class="post-metadata">

### Author: ![kahliburke](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kahliburke/32/208472_2.png) [@kahliburke](https://discourse.julialang.org/u/kahliburke)
#### Post date: [July 17, 2026, 2:20am UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/127 "2026-07-17T02:20:37Z")

</div>

A quick update on Tachikoma.jl: We’re up to release 2.3.5 and this patch release brings some love for Windows users. Support for Windows has lagged behind due to lack of support for certain modern terminal features which come naturally in POSIX operating systems.

However, we’re making efforts to prevent you wanting to **defenestrate** Tachikoma! Notably, 2.3.5 fixes and improves issues with app resizing and terminal window size detection, gets mouse support working at least in some terminal apps I’ve tried, and fixes some keyboard issues too.

Some downstream projects like Kaimon.jl will get new releases to incorporate this patch, so Windows functionality should improve for those as well.

> **[Release v2.3.5 · kahliburke/Tachikoma.jl](https://github.com/kahliburke/Tachikoma.jl/releases/tag/v2.3.5)**
>
> 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 (previous...

---

<div class="post-metadata">

### Author: ![devel-chm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/devel-chm/32/3572_2.png) [@devel-chm](https://discourse.julialang.org/u/devel-chm)
#### Post date: [July 17, 2026, 9:59pm UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/128 "2026-07-17T21:59:29Z")

</div>

FYI: Sixel.jl now detects and passes tests for sixel functionality  
in recent windows terminal with sixel support (1.24.xxx works for me)  
on win11 with `julia 1.10.11`.

`Tachikoma (2.3.5)` does not detect that sixel works here. I was  
able to force the use by setting `ENV["TACHIKOMA_GFX"] = "sixel"`  
and the `TachikomaDemos` in the `launcher()` now show sixels!

---

<div class="post-metadata">

### Author: ![kahliburke](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kahliburke/32/208472_2.png) [@kahliburke](https://discourse.julialang.org/u/kahliburke)
#### Post date: [July 17, 2026, 10:01pm UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/129 "2026-07-17T22:01:05Z")

</div>

> [@devel-chm](#):
>
> `TachikomaDemos` in the `launcher()` now show sixels!

🥳

Thanks for the test and reporting on this. Not sure if the detection will work properly, but we could try to get that working. Curious if you could test on any other terminals like WezTerm or the winghostty port?

---

<div class="post-metadata">

### Author: ![devel-chm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/devel-chm/32/3572_2.png) [@devel-chm](https://discourse.julialang.org/u/devel-chm)
#### Post date: [July 17, 2026, 10:27pm UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/130 "2026-07-17T22:27:03Z")

</div>

Sixel.ij still fails to detect the capability and run when I run  
`julia 1.10.11` from a recent `mintty` terminal **on win11** so  
I’m not sure why it is working with the Windows Terminal.  
Maybe there is some special code…

---

<div class="post-metadata">

### Author: ![kahliburke](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kahliburke/32/208472_2.png) [@kahliburke](https://discourse.julialang.org/u/kahliburke)
#### Post date: [July 17, 2026, 10:32pm UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/131 "2026-07-17T22:32:05Z")

</div>

Would you file an issue, please?

---

<div class="post-metadata">

### Author: ![devel-chm](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/devel-chm/32/3572_2.png) [@devel-chm](https://discourse.julialang.org/u/devel-chm)
#### Post date: [July 19, 2026, 4:07pm UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/132 "2026-07-19T16:07:15Z")

</div>

Done [here](https://github.com/kahliburke/Tachikoma.jl/issues/40).

[Previous page](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878.md?page=5)
