An immediate-mode TUI library for Odin. Pure Odin, no C, batteries included.
Documentation ·
Guide ·
Widgets ·
Examples
examples/demo: plasma, a shaded 3D torus on a braille canvas, live graphs and scripted input, at 60 fps in ~2 ms a frame.
examples/monitor: a live system monitor reading /proc, in the Odlar Yurdu theme.
hnoss is a plain Odin package; there is no package manager, so add the repository to your project:
git submodule add https://github.com/Huseynteymurzade28/hnoss libs/hnoss # inside a git repo (git init first)
# or, without git in your project:
git clone https://github.com/Huseynteymurzade28/hnoss libs/hnossThen import it by path, relative to the file that imports it (import hnoss "libs/hnoss"), or register a collection once and import it from anywhere in your project:
odin run . -collection:libs=libs # import hnoss "libs:hnoss"package main
import hnoss "libs/hnoss"
main :: proc() {
term, _ := hnoss.init(hnoss.DEFAULT_OPTIONS + {.Mouse_Capture})
defer hnoss.deinit(&term) // the terminal is always restored, even on panic or Ctrl+C
cities := []string{"Bakı", "Gəncə", "Şəki", "Lənkəran"}
list: hnoss.List_State
events: []hnoss.Event
for {
f := hnoss.begin_frame(&term)
ui := hnoss.ui(f, events)
inner := hnoss.box(ui, hnoss.inset(f.area, 1), "🇦🇿 [b]Cities[/]")
hnoss.focus(ui, &list)
hnoss.list(ui, inner, cities, &list) // ↑↓, click, wheel
for ev in hnoss.unhandled(ui) {
if hnoss.is_char(ev, 'q') { return }
}
hnoss.end_frame(&term) // diff, one write
free_all(context.temp_allocator)
events = hnoss.poll_events(&term, -1)
}
}- Pure Odin. Only
core:andbase:; raw syscalls on Linux,core:sys/posixon macOS. No ncurses, no C. - Immediate mode. Calling a widget draws it, handles its input and returns what happened.
- Fast. Only changed cells are written; a full 200×60 truecolor frame diffs in ~2 ms.
- Correct text. Unicode 16 widths and grapheme clusters:
世界,é,👩💻,🇦🇿. - Safe. Raw mode, alt screen and cursor are restored on exit, panic and signals.
./build.sh # check + tests + all examples into bin/
./build.sh run demo # or: showcase, monitor, plasma, text, layout, event_inspector, w_<widget>Runs on Linux and macOS (Intel and Apple Silicon); CI builds and tests both. Windows is #5. examples/monitor reads /proc, so it is Linux-only.
MIT
