Лёгкий путь для создания приложений в терминале на Go.
- 🍬 22 готовых виджетов — полноценный набор.
- Базовые:
- Label, Button, Hyperlink, ColorProgress, TextProgress, InputField, Check, Frame(рамка)
- Изображения:
- Canvas(16 цветов), CanvasRGB(True Color)
extra:- LineChart, BarChart, PieChart, Sparkline, Tree, Table, Tabs, Accordion, Spinner, BlinkLabel, PageIndicator, TextView.
- Базовые:
- 👓 Diff-рендер, low-allocation — без мерцаний и аллокаций
- ✨ Автоматическое фокус по Tab/Shift+Tab
- 💎 Минимальный размер: 8500 строк кода, только
x/sys+x/term - 🎁 Полная поддержка Windows — без WSL
- 🛠 Детекция data race при вызове методов окна —
-tags debug - 🎨 Удобная кастомизация через битовые маски Style — быстро и удобно
- 🔧 Кастомные виджеты — 3-6 методов(зависит от функцонала)
- 🛒 Контейнеры — не нужно считать координаты вручную
- 🚀 react-надстройка — пишите реактивные приложения
- 🏹 Поддержка мыши - клики
package main
import (
"strconv"
"github.com/romanSPB15/tui-compose/v3"
)
func main() {
wnd := tui.NewWindow()
wnd.SetTitle("Моё приложение")
label := tui.NewStaticLabel("Привет, TUI!").WithStyle(tui.FrCyan)
btnQuit := tui.NewButton("Выход", func() {
wnd.Quit()
})
v := 0
btnAdd := tui.NewButton("+", func() {
v++
label.SetText(strconv.Itoa(v))
wnd.Redraw()
}).WithStyle(tui.BgRed)
btnSub := tui.NewButton("-", func() {
if v > 0 {
v--
label.SetText(strconv.Itoa(v))
wnd.Redraw()
}
}).WithStyle(tui.BgBlue)
box := tui.NewVBox(label, tui.NewHBox(btnAdd, btnSub), btnQuit)
wnd.SetContent(box)
wnd.Run()
}Подробная документация доступна в Wiki.
Другие примеры доступны в examples.
| Критерий | tui-compose(v3.3.0) | termui(v3.1.0) |
|---|---|---|
| Размер | ✅ ~8500 строк | ⚠ 4325 строк + 5393(termbox-go) |
| Примеры | 21 | 16 |
| Возраст | ~3 месяца | 12 лет |
| Набор виджетов | ✅ Огромный(22) — от кнопок до графиков | ⚠ Средний(12) |
| Рендеринг | ✅ low-allocation, diff-рендер | ❌ Полная перерисовка |
| Кастомизация | ✅ Полная(стили, выбор символов) | ⚠ Частичная |
| Зависимости | ✅ 2(только x/sys + x/term) |
❌ 5+ — termbox-go, x/sys и другие |
| Тесты | ✅ Покрытие низкоуровневых пакетов | ❌ Нет |
| Интерактивность «из коробки» | ✅ Есть | ❌ Нет(реализовывать вручную) |
| Композиция | ✅ VBox + HBox | ⚠ Grid + абсолютные |
