charm/bubbletea para Go: guía completa con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

charm/bubbletea para Go: guía completa con ejemplos

1. ¿Qué es y para qué sirve?

Bubble Tea es un framework potente, elegante y productivo para crear interfaces de usuario en terminal (TUI) con Go. Inspirado en la arquitectura funcional de Elm, ofrece un modelo simple pero increíblemente flexible basado en tres conceptos clave: Model (estado), Update (función de actualización) y View (función de visualización).

¿Por qué usar Bubble Tea? Si estás cansado de las aburridas utilidades CLI de una sola línea y quieres crear aplicaciones interactivas, atractivas y responsivas directamente en la terminal, esta es tu herramienta. Bubble Tea te permite construir desde simples formularios de entrada y listas de selección hasta complejos gestores de archivos, reproductores de música, juegos y paneles de monitoreo. Se encarga de todo el trabajo de bajo nivel con la terminal (manejo de señales, control del cursor, renderizado), permitiendo al desarrollador centrarse en la lógica de la aplicación.

La biblioteca forma parte del ecosistema Charm, que también incluye otras herramientas útiles como Bubbles (un conjunto de componentes listos para usar, como campos de texto, spinners y barras de progreso) y Lip Gloss (una biblioteca para estilizar la salida). Juntos forman un conjunto completo para crear aplicaciones TUI profesionales.

2. Instalación

La instalación de la biblioteca se realiza de la forma estándar para Go:

go get github.com/charmbracelet/bubbletea@latest

Para usar componentes listos (widgets), también se recomienda instalar el paquete bubbles:

go get github.com/charmbracelet/bubbles@latest

Y para la estilización:

go get github.com/charmbracelet/lipgloss@latest

3. Inicio rápido — ejemplo mínimo funcional

Crea un archivo main.go y pega el siguiente código. Esta aplicación mostrará el número de teclas presionadas. Presiona Ctrl+C para salir.

package main

import (
    "fmt"
    "os"
    tea "github.com/charmbracelet/bubbletea"
)

// 1. Model (Modelo) — almacena el estado de la aplicación.
type model struct {
    count int
}

// 2. Init (Inicialización) — devuelve el comando inicial (generalmente nil).
func (m model) Init() tea.Cmd {
    return nil
}

// 3. Update (Actualización) — procesa los mensajes entrantes y devuelve un nuevo modelo y comando.
func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
    switch msg := msg.(type) {
    case tea.KeyMsg:
        switch msg.String() {
        case "ctrl+c":
            return m, tea.Quit // Comando para salir
        default:
            m.count++
            return m, nil
        }
    }
    return m, nil
}

// 4. View (Vista) — devuelve una cadena que se mostrará en la terminal.
func (m model) View() string {
    return fmt.Sprintf("Teclas presionadas: %d\n\nPresiona cualquier tecla. Para salir, presiona Ctrl+C.", m.count)
}

func main() {
    p := tea.NewProgram(model{})
    if _, err := p.Run(); err != nil {
        fmt.Printf("Error: %v", err)
        os.Exit(1)
    }
}

Ejecuta la aplicación:

go run main.go

4. Métodos y tipos principales

En Bubble Tea, los elementos clave son interfaces y funciones, no clases. Veamos los 8 elementos fundamentales.

4.1. tea.NewProgram

Firma: func NewProgram(

Recommendations