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

<div class="post-metadata">

### Author: ![nandoconde](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nandoconde/32/19497_2.png) [@nandoconde](https://discourse.julialang.org/u/nandoconde)
#### Post date: [March 5, 2026, 7:03am UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/41 "2026-03-05T07:03:34Z")

</div>

I’ll give it a try and report.

By the way, as of today, [VS Code’s integrated terminal now supports Kitty Graphics Protocol](https://github.com/xtermjs/xterm.js/discussions/5683).

---

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

</div>

Oh cool, then VSCode could be another good option for those who want to do things with the gfx capabilities.Yes please let me know about your experiences, I’ve seen this work on Windows, all the demos were basically functioning on Windows terminal. Detecting resizing might be something that needs fixing.

---

<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 6, 2026, 12:54am UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/43 "2026-03-06T00:54:46Z")

</div>

It is working perfectly! Beautiful package, congratulations!

---

<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 6, 2026, 1:10am UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/44 "2026-03-06T01:10:07Z")

</div>

Thank you! I want to exercise this a bit more and will be putting out a new release soon which contains these enhancements.

---

<div class="post-metadata">

### Author: ![langestefan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/langestefan/32/207923_2.png) [@langestefan](https://discourse.julialang.org/u/langestefan)
#### Post date: [March 6, 2026, 12:48pm UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/45 "2026-03-06T12:48:02Z")

</div>

Great package, very functional!

I just added a skill for it to julia-agent-skills: [Add Tachikoma skill by langestefan · Pull Request #7 · JuliaGenAI/julia-agent-skills · GitHub](https://github.com/JuliaGenAI/julia-agent-skills/pull/7)

I tested it out with a demo terminal app, and it seems to work pretty great. Let me know if you have any comments.

---

<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 6, 2026, 12:53pm UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/46 "2026-03-06T12:53:17Z")

</div>

@langestefan , thank you! I like the idea of that, I’d love to get Kaimon.jl more into the skills world too, if you have any ideas on it let me know.

I’d also really love it if there was a good way to keep the skill documentation up to date. If I make any adjustments to the API, it seems like the skill would get out of sync with those. Are there are good methods you’re aware of to do this?

All the docs and rendered images are being built from the source code, so it seems like there could be some sort of automated method to update the skills as well… Can skills pull from a url for their documentation dynamically, or does it need to be directly in a committed file in git?

What did your test app end up doing, by the way?

---

<div class="post-metadata">

### Author: ![langestefan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/langestefan/32/207923_2.png) [@langestefan](https://discourse.julialang.org/u/langestefan)
#### Post date: [March 6, 2026, 2:37pm UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/47 "2026-03-06T14:37:38Z")

</div>

> [@kahliburke](#):
>
> I’d also really love it if there was a good way to keep the skill documentation up to date. If I make any adjustments to the API, it seems like the skill would get out of sync with those. Are there are good methods you’re aware of to do this?

I don’t have a good solution for this yet. But I suspect that for incremental package updates it may be enough to add breaking changes to the context. Or some mechanic that can retrieve them when needed. That way the skill does not have to change, but the agent is aware of changes to the API. Of course this doesn’t work if you release a v2 with a completely new API.

> [@kahliburke](#):
>
> Can skills pull from a url for their documentation dynamically, or does it need to be directly in a committed file in git?

Skills are just text files. They provide context to the agent, they are not functional on their own in any way. See also: [Agent Skills - Claude API Docs](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview)

> [@kahliburke](#):
>
> What did your test app end up doing, by the way?

I’m building a little terminal UI app for managing Julia projects with Pkg

 ![image](https://global.discourse-cdn.com/julialang/original/3X/4/5/452230136ebd7ba6330035f9e0652f4e949d185a.jpeg)

Profiling:

 ![image](https://global.discourse-cdn.com/julialang/original/3X/c/e/ce4a879fe2dea56e0daf24c46144c01844474ede.jpeg)

---

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

</div>

> [@langestefan](#):
>
> I’m building a little terminal UI app for managing Julia projects with Pkg

Awesome, this looks really great!

Thanks for sharing, it’s actually the first TUI built with Tachi that I’ve seen “in the wild”. It makes me happy to see you using Tachi productively so early after release, creating new tools which already look so good.

I’d love to have an interface like this for understanding my Julia package structure and how things look across projects. Let us know if/when it gets to the point where you’d like to share it with the rest of us.

---

<div class="post-metadata">

### Author: ![Dale\_James\_Black](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dale_james_black/32/11595_2.png) [@Dale\_James\_Black](https://discourse.julialang.org/u/Dale_James_Black)
#### Post date: [March 6, 2026, 7:37pm UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/49 "2026-03-06T19:37:12Z")

</div>

Amazing package, I will hopefully have an official announcement sometime later this week or early next week but this is enabling a super fun rebuild of Pluto.jl specifically for the terminal!

 ![image](https://global.discourse-cdn.com/julialang/original/3X/4/c/4c721703efdd5fc33a9790ab90a0e1c428986240.jpeg)  
 ![image](https://global.discourse-cdn.com/julialang/original/3X/6/e/6e3da8e3d95c01e25f8fbc04904de699431ba329.jpeg)

---

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

</div>

> [@Dale\_James\_Black](#):
>
> this is enabling a super fun rebuild of [Pluto.jl](https://juliaregistries.github.io/General/packages/redirect_to_repo/Pluto) specifically for the terminal!

Wow … just wow! That sounds so cool and I want to try it!

---

<div class="post-metadata">

### Author: ![langestefan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/langestefan/32/207923_2.png) [@langestefan](https://discourse.julialang.org/u/langestefan)
#### Post date: [March 7, 2026, 12:30am UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/51 "2026-03-07T00:30:12Z")

</div>

Still has lots of bugs. But here is a small video:

---

<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 7, 2026, 3:44am UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/52 "2026-03-07T03:44:21Z")

</div>

@langestefan, don’t worry about the bugs. It’s still very fresh, but the concept is really cool. I could see a lot of people gravitating towards something like this to understand their package environments through a quick and comprehensive interface like this. I’m one of them!

The disk usage and loading time stats are a great idea as well. You don’t get that out of the box and there have certainly been a few times when I’ve needed to clear up some space and wondered where I might find some in my Julia package depot.

---

<div class="post-metadata">

### Author: ![langestefan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/langestefan/32/207923_2.png) [@langestefan](https://discourse.julialang.org/u/langestefan)
#### Post date: [March 7, 2026, 9:38pm UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/53 "2026-03-07T21:38:08Z")

</div>

I have an early version that you can try out here: [GitHub - langestefan/PkgTUI.jl: Terminal UI application for managing Julia projects with Pkg. · GitHub](https://github.com/langestefan/PkgTUI.jl)

As kind of a side-quest I came up with a way to visualize compat range conflicts:

 ![image](https://global.discourse-cdn.com/julialang/original/3X/2/a/2a7568c64e17a8bb588bfa3f9421c5dfbd4a751e.png)

---

<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 7, 2026, 10:33pm UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/54 "2026-03-07T22:33:02Z")

</div>

> [@langestefan](#):
>
> have an early version that you can try out here: [GitHub - langestefan/PkgTUI.jl: Terminal UI application for managing Julia projects with Pkg. · GitHub](https://github.com/langestefan/PkgTUI.jl)

Just pulled it and tested it out, worked great for me. Curious if you tried the automatic gif recording build into Tachi? I used it to capture this:

![PgkTui](https://global.discourse-cdn.com/julialang/original/3X/7/8/780a9f34085cbc469df28e149c278c2ff84aec3c.gif)

---

<div class="post-metadata">

### Author: ![langestefan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/langestefan/32/207923_2.png) [@langestefan](https://discourse.julialang.org/u/langestefan)
#### Post date: [March 7, 2026, 11:10pm UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/55 "2026-03-07T23:10:44Z")

</div>

Didn’t try gif export yet. I exported to svg, but that had display/tearing issues on firefox.

---

<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 7, 2026, 11:27pm UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/56 "2026-03-07T23:27:07Z")

</div>

The SVG output will use whatever font the browser chooses unless you specify it and the main way I’ve made this look right is to bundle a monospaced font into the SVG. The GIF output needs a couple optional package which I’ve made work as an extension so they aren’t required as hard dependencies. But if you have `FreeTypeAbstraction` and `ColorTypes` it should work.

Then something like this should work

```julia-auto
  using FreeTypeAbstraction, ColorTypes
  cols, rows, cells, timestamps, pixels = Tachikoma.load_tach("/path/to/file.tach")
  Tachikoma.export_gif_from_snapshots("/path/to/output.gif", cols, rows, cells, timestamps;
      font_path="/path/to/ttf_or_ttc_font")

```

or for SVG:

```julia-auto
  Tachikoma.export_svg("/path/to/output.svg", cols, rows, cells, timestamps;
      font_path="/path/to/ttf_or_ttc_font", cell_w=8, cell_h=16)

```

---

<div class="post-metadata">

### Author: ![DoktorMike](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/doktormike/32/2736_2.png) [@DoktorMike](https://discourse.julialang.org/u/DoktorMike)
#### Post date: [March 8, 2026, 7:36pm UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/57 "2026-03-08T19:36:19Z")

</div>

That’s a super useful app you built there. Great how easy it is to switch environments. 💪🏻🙏🏻

---

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

</div>

> [@DoktorMike](#):
>
> That’s a super useful app you built there.

Yeah, props to @langestefan for building this. This is exactly what I want Tachi to enable: the ability to create convenient and powerful TUIs, so you don’t have to weigh choices about whether or not to build a more full featured interface for your (or someone else’s) Julia package. The lift is small enough that the answer is just, “Yes.”

On that note, connect your project to Kaimon, Kaimon to your agent, and tell it to build a TUI for you. Seems to work pretty well.

---

<div class="post-metadata">

### Author: ![langestefan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/langestefan/32/207923_2.png) [@langestefan](https://discourse.julialang.org/u/langestefan)
#### Post date: [March 9, 2026, 12:51am UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/59 "2026-03-09T00:51:58Z")

</div>

Added another function for something I often struggle with, setting compat ranges by hand:

 ![image](https://global.discourse-cdn.com/julialang/original/3X/2/3/2336e85efca642acdf275809e9654ce71d02581b.jpeg)

I will stop hijacking this thread now, just wanted to showcase how cool Tachikoma.jl is 🙂

---

<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 9, 2026, 1:21am UTC](https://discourse.julialang.org/t/ann-tachikoma-jl-a-terminal-ui-framework-for-julia/135878/60 "2026-03-09T01:21:56Z")

</div>

> [@langestefan](#):
>
> I will stop hijacking this thread now, just wanted to showcase how cool [Tachikoma.jl](https://juliaregistries.github.io/General/packages/redirect_to_repo/Tachikoma) is 🙂

😆 No problems at all, I appreciate you showing your work on this, thank you!

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

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