GitHunt
KA

kahliburke/Tachikoma.jl

Build rich terminal apps in Julia — widgets, layouts, sixel graphics, Kitty graphics, animations, and more

Tachikoma.jl

Tachikoma.jl demo

Tachikoma.jl

A terminal UI framework for Julia

CI Dev Docs MIT License Julia 1.10+


Tachikoma is a pure-Julia framework for building rich, interactive terminal applications. It provides an Elm-inspired Model/update!/view architecture, a 60fps event loop with double-buffered rendering, 30+ composable widgets, constraint-based layouts, animation primitives, kitty/sixel pixel graphics, and built-in recording and export to SVG/GIF.

Features

Architecture — Declarative Elm pattern with clean separation of state, logic, and rendering. 60fps event loop with automatic frame pacing and double-buffered output.

30+ Widgets — Text inputs, text areas, code editor with syntax highlighting, data tables with column resize and sort, forms with validation and Tab navigation, tree views, charts, bar charts, sparklines, calendars, modals, dropdowns, radio groups, checkboxes, progress indicators, scrollable panes, markdown viewer, and more.

Constraint LayoutsFixed, Fill, Percent, Min, Max, and Ratio constraints. Draggable resizable pane borders with layout persistence via Preferences.jl.

Animation — Tweens with 10 easing functions, physics-based springs, timelines for sequencing, and organic effects: noise, fbm, pulse, breathe, shimmer, jitter, flicker, drift, glow.

Graphics — Three rendering backends: Braille dots (2x4), quadrant blocks (2x2), and pixel rendering (16x32 per cell, Kitty or sixel). Vector drawing API with lines, arcs, circles, and shapes.

11 Themes — Cyberpunk, retro, and classic palettes (KOKAKU, ESPER, MOTOKO, KANEDA, NEUROMANCER, CATPPUCCIN, SOLARIZED, DRACULA, OUTRUN, ZENBURN, ICEBERG) with hot-swappable switching.

Recording & Export — Live recording via Ctrl+R, headless record_app()/record_widget() for CI, native .tach format with Zstd compression, export to SVG and GIF.

Async Tasks — Channel-based background work that preserves the single-threaded Elm architecture. Cancel tokens, timers, and repeat scheduling.

TestingTestBackend for headless widget rendering with char_at(), style_at(), row_text(), find_text() inspection APIs. Property-based testing with Supposition.jl.

Quick Start

using Pkg
Pkg.add("Tachikoma")
using Tachikoma
@tachikoma_app

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

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

function 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())

See the Getting Started guide for a more complete walkthrough with layouts, widgets, and input handling.

Demos

The demos/TachikomaDemos package includes 25+ interactive demos with a launcher menu:

using Pkg
Pkg.activate("demos/TachikomaDemos")
Pkg.instantiate()

using TachikomaDemos
launcher()  # interactive menu

Or run individual demos directly: dashboard(), snake(), life(), sysmon(), anim_demo(), chart_demo(), form_demo(), effects_demo(), and more.

Dashboard
Form with Validation
Animation Showcase
Todo List
GitHub PR Viewer
Constraint Explorer
Dotwave Background
Phylogenetic Tree

Widget Catalog

Category Widgets
Text & Display Block, Paragraph, BigText, StatusBar, Span, Separator, MarkdownPane
Input TextInput, TextArea, CodeEditor, Checkbox, RadioGroup, DropDown, Button
Selection & Lists SelectableList, TabBar, TreeView, Calendar
Data DataTable, Chart, BarChart, Sparkline, Gauge, ProgressList
Layout Container, ScrollPane, Scrollbar, Modal, Form
Graphics Canvas, BlockCanvas, PixelImage

Backgrounds

Procedural animated backgrounds that composite behind your UI:

Preset Description
DotWave Undulating dot-matrix terrain with configurable wave layers
PhyloTree Animated phylogenetic branching structures
Cladogram Hierarchical cladogram tree visualizations

Optional Extensions

# Markdown rendering
using CommonMark
# GIF export
using FreeTypeAbstraction, ColorTypes
# Tables.jl integration for DataTable
using Tables

Documentation

Full documentation is available at kahliburke.github.io/Tachikoma.jl.

Section Description
Getting Started Build your first app in 30 lines
Architecture The Elm architecture pattern in depth
Layout Constraint-based layout system
Widgets Complete catalog of all widgets
Animation Tweens, springs, timelines, and organic effects
Graphics Canvas, BlockCanvas, and pixel rendering
Themes 11 built-in themes with hot-swap switching
Recording Recording and export to SVG/GIF
Testing TestBackend for headless widget testing
API Reference Auto-generated API documentation

Requirements

  • Julia 1.10+
  • A terminal with ANSI color support (most modern terminals)
  • Kitty or sixel-capable terminal for pixel graphics (kitty, iTerm2, WezTerm, foot, etc.)

Contributing

Contributions are welcome. Please open an issue to discuss proposed changes before submitting a pull request.

License

MIT — see LICENSE for details.

Languages

Julia100.0%

Contributors

MIT License
Created February 26, 2026
Updated March 11, 2026