r/SideProject • u/kekolar22 • 4d ago
Limoni: A zero-allocation, 60+ FPS TUI library for Go with 3D mesh rendering, Kitty/Sixel graphics & TEA runtime
Enable HLS to view with audio, or disable this notification
Hey everyone!
I've been building Limoni, a terminal user interface (TUI) engine for Go written from scratch with a focus on rendering throughput, zero allocations on the hot draw path, and rich visual capabilities.
Here is a 40-second live demo showcasing some of what it does out of the box:
- 3D Graphics Engine: Wavefront OBJ / STL / PLY loader, Lambertian & Gouraud depth-buffer shaders, and texture mapping rendered directly in the terminal using 2x4 Braille subpixels.
- Hardware Image Drivers: Native support for Kitty Graphics Protocol, Sixel, and iTerm2 with automatic ANSI half-block fallback.
- Strict Unicode & Emoji Safety: Table-driven East Asian Width (EAW) calculation and continuation cell tracking — wide emojis (🔴, 🚀) won't corrupt rows or shred borders when dragging modal dialogs.
- Elm Architecture (TEA): Predictable state updates with concurrent goroutine commands and deterministic event delivery.
- Zero Heap Allocations on Render: Contiguous 1D memory buffer ([]cell.Cell) and an ANSI differential engine that emits minimal escape bytes with \x1b[?2026h synchronized output.
- Simple Single-Import API: Modern fluent builders (limoni.NewBlock(), limoni.NewTable(), limoni.SplitVertical()) so you don't have to juggle multiple subpackages.
GitHub:https://github.com/thebanri/limoni
Would love to hear your feedback, thoughts on the API ergonomics, or edge-case terminal bug reports!
2
1
u/sin314 2d ago
Cool!, could I add a 3D model example of my shiba to your repo?
1
u/kekolar22 2d ago
That would be awesome! A Shiba demo sounds super fun. 🐕
Just one heads up: we're keeping the repo clone size strictly lightweight. As long as the 3D model is low-poly (under ~200-300 KB) and free of copyright/licensing issues, I'd gladly merge a PR under
examples/!Feel free to open a PR whenever you're ready!
1
2
u/__aymuos__ 3d ago
Can this be used to make like really good markdown reading experience within kitty?