mirror of
https://github.com/taigrr/bubbletea.git
synced 2026-04-02 02:59:09 -07:00
91271cacab68724363d5e6791012708a7b72ce20
Tea
茶! The fun, functional way to build terminal apps. A Go framework based on The Elm Architecture.
Simple example
package main
// A simple program that counts down from 5 and then exits.
import (
"fmt"
"log"
"time"
"github.com/charmbracelet/tea"
)
type model int
type tickMsg struct{}
func main() {
p := tea.NewProgram(init, update, view, subscriptions)
if err := p.Start(); err != nil {
log.Fatal(err)
}
}
// Listen for messages and update the model accordingly
func update(msg tea.Msg, mdl tea.Model) (tea.Model, tea.Cmd) {
m, _ := mdl.(model)
switch msg.(type) {
case tickMsg:
m--
if m <= 0 {
return m, tea.Quit
}
}
return m, nil
}
// Render to the terminal
func view(mdl tea.Model) string {
m, _ := mdl.(model)
return fmt.Sprintf("Hi. This program will exit in %d seconds...\n", m)
}
// Subscribe to events
func subscriptions(_ tea.Model) tea.Subs {
return tea.Subs{
"tick": tick,
}
}
func tick(_ tea.Model) tea.Msg {
time.Sleep(time.Second)
return tickMsg{}
}
Hungry for more? See the other examples.
Authors
Heavily inspired by both The Elm Architecture by Evan Czaplicki et al. and go-tea by TJ Holowaychuk.
Other Resources
- Termenv: advanced ANSI style and color support for your terminal applications. Very useful when rendering in your views!
License
Part of Charm. For more info see ssh charm.sh.
Charm热爱开源!
Languages
Go
100%