# \[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:** 4

<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: [March 11, 2026, 12:45pm UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/61 "2026-03-11T12:45:54Z")

</div>

# Tachikoma v1.1 — Terminals, REPLs, and Data Tables

What’s a TUI framework without the ability embed a terminal inside your terminal? Now you can go full Inception on your command line.

![showcase](https://global.discourse-cdn.com/julialang/original/3X/d/5/d5b8f2592ed9ab3f3278187e81eccf77e6de2358.gif)

## What’s New?

#### Terminal & REPL Widgets

Embed a fully functional PTY-backed terminal or an in-process Julia REPL directly into your app as a widget. Shell commands, Julia expressions, tab completion, syntax highlighting, etc.

### PagedDataTable

[PagedDataTable | Tachikoma.jl](https://kahliburke.github.io/Tachikoma.jl/dev/paged-datatable)

A new data table widget for large datasets with server-side pagination, sorting, per-column filtering (contains, regex, numeric comparisons), global search, and keyboard-driven navigation. Comes with an `InMemoryPagedProvider` out of the box, plus a `SQLitePagedProvider` via the SQLite extension.

### Other Improvements

- Event-driven app loop, replaces polling in several spots with a wake channel; lower CPU usage, more responsive input handling
- Adaptive sixel color quantization, dynamically adjusts palette size for better image quality
- Dead space compression and per-frame GIF delays, resulting in smaller recorded GIFs with accurate timing
- Many other bug fixes

# Installation

`pkg> add Tachikoma`

Or to update:

`pkg> update Tachikoma`

---

<div class="post-metadata">

### Author: ![spragud2](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/spragud2/32/29409_2.png) [@spragud2](https://discourse.julialang.org/u/spragud2)
#### Post date: [March 11, 2026, 3:03pm UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/62 "2026-03-11T15:03:09Z")

</div>

This is such a cool project. This feels like a real natural fit for Julia, and a highlight for the language 🙂

---

<div class="post-metadata">

### Author: ![mbauman](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mbauman/32/31082_2.png) [@mbauman](https://discourse.julialang.org/u/mbauman)
#### Post date: [March 16, 2026, 8:37pm UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/63 "2026-03-16T20:37:06Z")

</div>

14 posts were split to a new topic: [Policies around registering AI-created packages in General?](https://discourse.julialang.org/t/policies-around-registering-ai-created-packages-in-general/136228)

---

<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 16, 2026, 4:36pm UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/65 "2026-03-16T16:36:12Z")

</div>

I mentioned this in [[ANN] Sessions.jl, A terminal-native Julia notebook built on Pluto.jl's reactive engine and Tachikoma.jl - #18 by goerz](https://discourse.julialang.org/t/ann-sessions-jl-a-terminal-native-julia-notebook-built-on-pluto-jls-reactive-engine-and-tachikoma-jl/136115/18), but it likely is a problem with the underlying `Tachikoma` (which I haven’t tried in isolation): The (presumably forced) dark background in all of the screenshots here is an absolute no-go for me. Please respect a user’s settings regarding their fundamental color scheme, and whether they are using light-on-dark or dark-on-light

---

<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: [March 16, 2026, 4:38pm UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/66 "2026-03-16T16:38:30Z")

</div>

> [@goerz](#):
>
> The (presumably forced) dark background in all of the screenshots here is an absolute no-go for me.

Hey there, that reflects my own biases. But I’d like it to fit your preferences as well. There is a GitHub issue which I’d appreciate someone on the light side 😉 to contribute to. Should be a fairly easy task so if you’re interested please look at [Provide theme for light mode · Issue #15 · kahliburke/Tachikoma.jl · GitHub](https://github.com/kahliburke/Tachikoma.jl/issues/15)

---

<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: [March 16, 2026, 5:18pm UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/77 "2026-03-16T17:18:05Z")

</div>

> [@goerz](#):
>
> Please respect a user’s settings regarding their fundamental color scheme, and whether they are using light-on-dark or dark-on-light

Just for the record, I’m totally fine if you were to submit a PR that was 100% generated using LLM based coding assistants. I will have my agent review what your agent generated, and it’ll get done very quickly!

It would be super cool if you had your agent write a bunch of unit tests too, I think there are over 4k such tests in the framework now.

---

<div class="post-metadata">

### Author: ![Mikhail\_Kagalenko](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mikhail_kagalenko/32/13257_2.png) [@Mikhail\_Kagalenko](https://discourse.julialang.org/u/Mikhail_Kagalenko)
#### Post date: [March 16, 2026, 5:26pm UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/78 "2026-03-16T17:26:55Z")

</div>

> [@kahliburke](#):
>
> I’m totally fine if you were to submit a PR that was 100% generated using LLM based coding assistants.  
> …  
> It would be super cool if you had your agent write a bunch of unit tests too, I think there are over 4k such tests in the framework now.

That’s the sort of attitude that, among other things, strongly motivates me to avoid  
having anything to do with LLM-coded software.

---

<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: [March 16, 2026, 5:52pm UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/79 "2026-03-16T17:52:21Z")

</div>

> [@Mikhail\_Kagalenko](#):
>
> That’s the sort of attitude that, among other things, strongly motivates me to avoid  
> having anything to do with LLM-coded software.

Hey, no offense taken. I encourage everyone to have the freedom to choose the code that they incorporate into their projects, the way they live their lives. It’s about agency, really …

(wait, did I just hear someone say agent-sy??? guess it’s time to go work some more on my multi-agent coding and research tool that’s in the works — Seaworthy.jl … ? 👀 )

(PS the em-dash was intentionally written by a human)

---

<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 16, 2026, 6:49pm UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/80 "2026-03-16T18:49:16Z")

</div>

> [@Mikhail\_Kagalenko](#):
>
> That’s the sort of attitude that, among other things, strongly motivates me to avoid  
> having anything to do with LLM-coded software.

It’s also _very_ borderline with respect to [the requirements for registered packages](https://github.com/JuliaRegistries/General?tab=readme-ov-file#is-there-any-policy-regarding-the-use-of-llms-in-registered-packages)! There’s a very fine line here between AI-_assisted_ coding and code deployed by LLMs without human intervention, aka vibe-coding, which is NOT acceptable for registered packages.

While it’s great that you’re creating this framework, I would urge you to curb your AI enthusiasm just a little bit, and remember that the fundamental design, the quality, and reliability of your package are still your responsibility, and not something you can delegate to an LLM. Moving fast and _breaking things_ is not something that leads to a healthy ecosystem

---

<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: [March 16, 2026, 6:59pm UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/81 "2026-03-16T18:59:08Z")

</div>

> [@goerz](#):
>
> It’s also _very_ borderline with respect to [the requirements for registered packages](https://github.com/JuliaRegistries/General?tab=readme-ov-file#is-there-any-policy-regarding-the-use-of-llms-in-registered-packages)! There’s a very fine line here between AI-_assisted_ coding and code deployed by LLMs without human intervention, aka vibe-coding, which is NOT acceptable for registered packages.

I’m sorry, maybe I’m misunderstanding your point here, but are you saying that what _I’m_ doing is _very_ borderline? Have you tried Tachikoma.jl? 😆 Do you think that it’s “acceptable”?

As for me, I think it’s pretty cool, pretty good, and just pretty.

If you’re able to achieve Tachikoma.jl level quality without putting in some serious work (aka human intervention) please tell me what model you’re using because I want it. 🤔

---

<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 16, 2026, 7:20pm UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/82 "2026-03-16T19:20:37Z")

</div>

> [@kahliburke](#):
>
> Have you tried [Tachikoma.jl](https://juliaregistries.github.io/General/packages/redirect_to_repo/Tachikoma)? 😆 Do you think that it’s “acceptable”?

Only via checking out `Sessions`, and having a glance at the README. At this point, I do think it looks very interesting, and it also does seem “acceptable” by the standards of the General registry. This is largely a function of the automated tests being in place and a proper and complete documentation, without any _obvious_ sign of slop.

> [@kahliburke](#):
>
> but are you saying that what _I’m_ doing is _very_ borderline?

I don’t know… maybe _little_ bit… As I said, it’s a thin line, and for right now I think you’re staying on the right side of that line. You do seem a little bit more enthusiastic about the promise of agentic coding than I would necessarily consider “wise”. The one thing that I think crosses the line is the idea that it’s okay for someone to submit a vibe-coded PR that then is reviewed and merged by and LLM without a human being in the loop at all. I’m going to assume that comment was a bit tongue-in-cheek, and not something you do on a regular basis.

> [@kahliburke](#):
>
> If you’re able to achieve [Tachikoma.jl](https://juliaregistries.github.io/General/packages/redirect_to_repo/Tachikoma) level quality without putting in some serious work (aka human intervention)

Right, exactly, the “serious work” is a key part here. I do think you’re putting in that serious work, so you’re fine. But it’s easy to let things get away from you with agentic coding… These agents can very quickly produce more amounts of code than an human can reasonably still process. Once you end up with a system that is too byzantine (unnecessarily) for any human to still have a good understanding of the design and structure of the package, you’re in real trouble. I don’t think that’s necessarily where you’re heading with this package. But still, my instinct is to tell you to slow down a little 😉 Or, if not “you” then others who might be getting a little carried away with agents generating code for them, when they don’t have the experience to gauge the result in a meaningful way.

---

<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: [March 17, 2026, 4:24am UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/83 "2026-03-17T04:24:41Z")

</div>

> [@goerz](#):
>
> I’m going to assume that comment was a bit tongue-in-cheek, and not something you do on a regular basis.

No, I meant that sincerely. I would definitely do that.

---

<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 17, 2026, 11:39am UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/84 "2026-03-17T11:39:54Z")

</div>

@kahliburke you are doing an excellent work!

---

<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 17, 2026, 2:08pm UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/85 "2026-03-17T14:08:42Z")

</div>

> [@goerz](#):
>
> Right, exactly, the “serious work” is a key part here. I do think you’re putting in that serious work, so you’re fine. But it’s easy to let things get away from you with agentic coding… These agents can very quickly produce more amounts of code than an human can reasonably still process. Once you end up with a system that is too byzantine (unnecessarily) for any human to still have a good understanding of the design and structure of the package, you’re in real trouble. I don’t think that’s necessarily where you’re heading with this package. But still, my instinct is to tell you to slow down a little 😉 Or, if not “you” then others who might be getting a little carried away with agents generating code for them, when they don’t have the experience to gauge the result in a meaningful way.

I’m not trying to take over the conversation, but “vibe code” is something that’s going to be a part of our new reality, and we should all get on board. Open source exists because people give their time and energy to create software out of their free time. So, I truly believe that people in the open source community should have the freedom to do whatever they want. OpenSUSE has a great way of putting it: “The makers’ choice.”

If I had access to agentic workflows back then, PrettyTables.jl and SatelliteToolbox.jl might have been way better than they are now. I spent ages trying to create a TUI framework for Julia in TextUserInterfaces.jl using NCurses, and I’m still just getting started. @kahliburke has created something much more powerful and advanced without using any external libraries. The result is clear: Tachikoma.jl works perfectly. I’m migrating a TUI for our satellite simulator, and it’s much faster than the ncurses version.

So, my humble suggestion to @kahliburke is: continue doing whatever you are doing and wanting because the outcome is impressive!

---

<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: [March 18, 2026, 5:17am UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/86 "2026-03-18T05:17:40Z")

</div>

Hello to all you robot lovers out there! Good news for you tonight, the Julia registry minions are hard at work packaging up the brand new

## 🌗 Tachikoma.jl v1.1.3
-- your terminal no longer has to live in the dark. 🌑 → ☀️

This release adds **light mode** with 13 new light themes (24 total), **ANSI escape sequence rendering** in Paragraph and ScrollPane, and **per-row/per-cell styling** for DataTable.

Hit **Ctrl+\** then **Tab** to browse the light theme pack — Paper, Latte, Sakura, Gruvbox, Frost, and more. Pixel canvases (sixel/Kitty) automatically match the active mode.

Also fixes a Windows crash from a POSIX `dup()` call and a regression where sixel/Kitty canvases ignored light-mode backgrounds.

Full release notes: [Release v1.1.3 · kahliburke/Tachikoma.jl · GitHub](https://github.com/kahliburke/Tachikoma.jl/releases/tag/v1.1.3)

---

<div class="post-metadata">

### Author: ![mbauman](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mbauman/32/31082_2.png) [@mbauman](https://discourse.julialang.org/u/mbauman)
#### Post date: [March 18, 2026, 3:44pm UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/87 "2026-03-18T15:44:48Z")

</div>

A post was merged into an existing topic: [Policies around registering AI-created packages in General?](https://discourse.julialang.org/t/policies-around-registering-ai-created-packages-in-general/136228/147)

---

<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: [March 19, 2026, 1:57am UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/88 "2026-03-19T01:57:54Z")

</div>

Quick update, pushing out a minor patch release right now:

v1.1.4 - errors in @spawn’d apps no longer disappear into the void. Thanks to @Ronis_BR for identifying and reporting this. 📡

> **[Release v1.1.4 · kahliburke/Tachikoma.jl](https://github.com/kahliburke/Tachikoma.jl/releases/tag/v1.1.4)**
>
> Patch release.
> 
> Fix error swallowing when app() runs in a spawned thread (#20) — errors in view/update! are now printed to stderr and re-thrown
> Fix light-mode-dependent test failures in sixel/kitty...

---

<div class="post-metadata">

### Author: ![tecosaur](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tecosaur/32/23206_2.png) [@tecosaur](https://discourse.julialang.org/u/tecosaur)
#### Post date: [March 19, 2026, 2:47am UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/89 "2026-03-19T02:47:58Z")

</div>

I haven’t tried this package, but this bit caught my eye:

> [@kahliburke](#):
>
> This release adds **light mode** with 13 new light themes (24 total)

Have you considered picking light/dark based on OSC foreground/background queries, and using the user’s 3-bit colours (and derived colours if more are needed) as a default theme?

---

<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: [March 19, 2026, 2:57am UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/90 "2026-03-19T02:57:03Z")

</div>

> [@tecosaur](#):
>
> Have you considered picking light/dark based on OSC foreground/background queries

Yes, I’ve considered it, but have decided not to invest time In it right now. PRs are welcome if you’d like to provide an implementation. There are many terminals and one of the more time consuming aspects is testing on the assortment of them. Contributions are appreciated.

---

<div class="post-metadata">

### Author: ![tecosaur](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tecosaur/32/23206_2.png) [@tecosaur](https://discourse.julialang.org/u/tecosaur)
#### Post date: [March 19, 2026, 2:58am UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/91 "2026-03-19T02:58:08Z")

</div>

You might find [WIP: Read the terminal colour scheme on REPL startup by tecosaur · Pull Request #59958 · JuliaLang/julia · GitHub](https://github.com/JuliaLang/julia/pull/59958) of some interest.

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

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