Лёгкий путь для создания приложений в терминале на Go.
- 🍬 20 готовых виджетов — полноценный набор.
- Базовые:
- Label, Button, Hyperlink, Gauge, InputField, Check, Frame(рамка).
- Изображения:
- Image.
extra/:- LineChart, BarChart, PieChart, Sparkline, Tree, Table, Tabs, Accordion, Spinner, BlinkLabel, PageIndicator, TextView.
- Базовые:
- 🏆 Высокоэффективный low-alloc diff-рендер — 200 FPS с I/O без мерцания
- ✨ Автоматическое фокус по Tab/Shift+Tab
- 💎 Минимальный размер: ~10000 строк кода, только
x/sys+x/term - 🎁 Полная поддержка Windows — без WSL
- 🛠 Детекция data race при вызове методов окна —
-tags debug - 🎨 Удобная стилизация через битовые маски — быстро и удобно
- 🔧 Кастомные виджеты — 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.4.0) | termui(v3.1.0) |
|---|---|---|
| Размер | ✅ ~8500 строк | ⚠ 4325 строк + 5393(termbox-go) |
| Примеры | 21 | 16 |
| Возраст | 3 месяца | 12 лет |
| Набор виджетов | ✅ Огромный(20) — от кнопок до графиков | ⚠ Средний(12) |
| Рендеринг | ✅ low-allocation, diff-рендер | ❌ Полная перерисовка |
| Кастомизация | ✅ Полная(стили, выбор символов) | ⚠ Частичная |
| Зависимости | ✅ 2(только x/sys + x/term) |
❌ 5+ — termbox-go, x/sys и другие |
| Тесты | ✅ Покрытие низкоуровневых пакетов | ❌ Нет |
| Интерактивность «из коробки» | ✅ Есть | ❌ Нет(реализовывать вручную) |
| Композиция | ✅ VBox + HBox | ⚠ Grid + абсолютные |
