Skip to content
TACHIKOMA.jl

Terminal UI Framework for Julia

Build rich, interactive terminal applications with an Elm-inspired architecture, 30+ widgets, constraint layouts, animation, and kitty/sixel graphics.

tachikoma — system monitor
Tachikoma.jl system monitor demo
Julia source code materializing from random characters

Why Tachikoma?

  • 100% Julia — No C wrappers, Python, or ncurses. Just Pkg.add and go.
  • 60–120+ fps — Double-buffered differential rendering. Only changed cells hit the terminal.
  • Compact Code — Full apps in 25 lines. Complex dashboards under 200.
  • Built-in Recording — Screencast any app to SVG, GIF, or .tach with one function call.
  • Virtual Terminal Testing — Headless rendering and scripted event injection for CI-friendly tests.

Quick Start

Game of Life in 25 lines of code. New to Tachikoma? Start with the Getting Started guide, or see the Game of Life walkthrough for a line-by-line breakdown.

julia
using Tachikoma

@kwdef mutable struct Life <: Model
    quit::Bool = false
    grid::Matrix{Bool} = rand(24, 80) .< 0.25
end

Tachikoma.should_quit(m::Life) = m.quit
function Tachikoma.update!(m::Life, e::KeyEvent)
    e.key == :escape && (m.quit = true)
end

function Tachikoma.view(m::Life, f::Frame)
    h, w = size(m.grid)
    g = m.grid
    nc = [sum(g[mod1(i+di,h), mod1(j+dj,w)]
          for di in -1:1, dj in -1:1) - g[i,j]
          for i in 1:h, j in 1:w]
    g .= (nc .== 3) .| (g .& (nc .== 2))
    a, buf = f.area, f.buffer
    cs = [:primary, :accent, :success,
          :warning, :error]
    for i in 1:min(h, a.height),
        j in 1:min(w, a.width)
        g[i,j] || continue
        set_char!(buf, a.x+j-1, a.y+i-1,
            '█', tstyle(cs[clamp(nc[i,j],1,5)]))
    end
end

app(Life())
Conway's Game of Life with color-coded cells evolving in real time

Documentation

SectionDescription
InstallationInstall Tachikoma and configure your terminal
Getting StartedBuild your first app in 25 lines
ArchitectureThe Elm architecture pattern in depth
LayoutConstraint-based layout system
Styling & ThemesColors, styles, and the 11 built-in themes
Input & EventsKeyboard and mouse event handling
AnimationTweens, springs, timelines, and organic effects
Graphics & Pixel RenderingCanvas, BlockCanvas, PixelImage, PixelCanvas
WidgetsComplete widget catalog
BackgroundsProcedural animated backgrounds
PerformanceRendering pipeline, benchmarks, and optimization tips
PreferencesConfiguration and persistence
API ReferenceAuto-generated API documentation

Tutorials