charm/bubbletea pour Go : guide complet avec exemples
1. Qu'est-ce que Bubble Tea et pourquoi l'utiliser ?
Bubble Tea est un framework puissant, élégant et productif pour créer des interfaces utilisateur terminal (TUI) en langage Go. Inspiré par l'architecture de programmation fonctionnelle Elm, il propose un modèle simple mais incroyablement flexible basé sur trois concepts clés : Model (état), Update (fonction de mise à jour) et View (fonction d'affichage).
Pourquoi utiliser Bubble Tea ? Si vous en avez assez des utilitaires CLI monotones et que vous souhaitez créer des applications interactives, esthétiques et réactives directement dans le terminal, cet outil est fait pour vous. Bubble Tea permet de construire tout, des simples formulaires de saisie et listes de sélection aux gestionnaires de fichiers complexes, lecteurs musicaux, jeux et tableaux de bord. Il gère tout le travail bas niveau avec le terminal (traitement des signaux, gestion du curseur, rendu), permettant au développeur de se concentrer sur la logique applicative.
La bibliothèque fait partie de l'écosystème Charm, qui inclut également d'autres outils utiles comme Bubbles (un ensemble de composants prêts à l'emploi tels que des champs de texte, des spinners, des barres de progression) et Lip Gloss (une bibliothèque de stylisation de sortie). Ensemble, ils forment un ensemble complet pour créer des applications TUI professionnelles.
2. Installation
L'installation de la bibliothèque se fait de manière standard pour Go :
go get github.com/charmbracelet/bubbletea@latest
Pour utiliser les composants prêts à l'emploi (widgets), il est également recommandé d'installer le paquet bubbles :
go get github.com/charmbracelet/bubbles@latest
Et pour la stylisation :
go get github.com/charmbracelet/lipgloss@latest
3. Démarrage rapide — exemple minimal fonctionnel
Créez un fichier main.go et collez le code suivant. Cette application affiche le nombre de touches pressées. Appuyez sur Ctrl+C pour quitter.
package main
import (
"fmt"
"os"
tea "github.com/charmbracelet/bubbletea"
)
// 1. Model — stocke l'état de l'application.
type model struct {
count int
}
// 2. Init — retourne la commande initiale (généralement nil).
func (m model) Init() tea.Cmd {
return nil
}
// 3. Update — traite les messages entrants et retourne un nouveau modèle et une commande.
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 // Commande pour quitter
default:
m.count++
return m, nil
}
}
return m, nil
}
// 4. View — retourne la chaîne qui sera affichée dans le terminal.
func (m model) View() string {
return fmt.Sprintf("Touches pressées : %d\n\nAppuyez sur n'importe quelle touche. Pour quitter, appuyez sur Ctrl+C.", m.count)
}
func main() {
p := tea.NewProgram(model{})
if _, err := p.Run(); err != nil {
fmt.Printf("Erreur : %v", err)
os.Exit(1)
}
}
Lancez l'application :
go run main.go
4. Méthodes et types principaux
Dans Bubble Tea, les éléments clés sont des interfaces et des fonctions, et non des classes. Voici les 8 éléments essentiels.
4.1. tea.NewProgram
Signature : func NewProgram(
Aussi dans la bibliothèque
Validation des données en Kotlin : bibliothèques et approches (Kotlin, Java)
Travailler avec Markdown en Swift (iOS/macOS) : bibliothèques Down, SwiftMarkdown
Génération Swagger/OpenAPI en Kotlin : guide complet des outils
Travailler avec YAML en Go (Golang) : bibliothèques go-yaml et yaml.v3
Journalisation pour C++ : meilleures solutions (spdlog, glog, P7)