Skip to content

Latest commit

 

History

440 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

demo/demo2.gif

TUI Compose

License: MIT Latest release Test Documentation Lightweight Examples

Лёгкий путь для создания приложений в терминале на 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-надстройка — пишите реактивные приложения
  • 🏹 Поддержка мыши - клики

go get -u github.com/romanSPB15/tui-compose/v3

Быстрый старт

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.

Сравнение с gizak/termui

Критерий 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 + абсолютные

Лицензия

MIT

⭐ Нравится проект? Поддержи его звездой!

GitHub stars

About

🏗 Легковесный TUI-фреймворк для Go

Topics

Resources

Code of conduct

Security policy

Stars

1 star

Watchers

1 watching

Forks

Releases

Used by

Contributors

Languages