The interactive TUI has been modernized with the latest Bubbletea ecosystem components for a better user experience.
Overall Progress: 3 / 10 VMs (30%)
████████████░░░░░░░░░░░░░░░░░░░░░░░░░░
? keyShort help:
💡 ?:toggle help • q:quit
Full help (press ?):
↑/k move up space toggle [x]
↓/j move down enter confirm
/ filter f features
s sort u cloud
esc back ? toggle help
q quit
Before:
📦 Exporting VMs
3 / 10 VMs completed
✅ vm1 - Completed
✅ vm2 - Completed
⏳ vm3 - Exporting...
⏸ vm4 - Pending
After:
┌──────────────────────────────────────────────────────────────────────────┐
│ 🚀 Exporting Virtual Machines │
└──────────────────────────────────────────────────────────────────────────┘
Overall Progress: 3 / 10 VMs (30%)
████████████░░░░░░░░░░░░░░░░░░░░░░░░░░
╭──────────────────────────────────────╮
│ ⏳ Currently Exporting: vm3 │
│ /datacenter/vm/vm3 │
╰──────────────────────────────────────╯
╭────────────────────────────────────────────────────────────────────────╮
│ ✅ vm1 Completed │
│ ✅ vm2 Completed │
│ ⏳ vm3 Exporting... │
│ ⏸️ vm4 Pending │
│ ⏸️ vm5 Pending │
╰────────────────────────────────────────────────────────────────────────╯
💡 q:quit | Export in progress...
Modern short help (shown by default):
Modern full help (press ?):
Modern semantic colors:
? - Toggle help (short ↔ full)q or Ctrl+C - QuitEsc - Go back↑ or k - Move up↓ or j - Move downSpace - Toggle selection [ ] ↔ [x]Enter - Confirm/continuef - Configure advanced featuresu - Configure cloud uploads - Sort VMs/ - Filter/searchgithub.com/charmbracelet/bubbles/progress
github.com/charmbracelet/bubbles/help
github.com/charmbracelet/bubbles/key
// Progress bar with gradient
prog := progress.New(
progress.WithDefaultGradient(),
progress.WithWidth(40),
)
// Help with custom styles
h := help.New()
h.Styles.ShortKey = lipgloss.NewStyle().Foreground(primaryColor)
h.Styles.ShortDesc = lipgloss.NewStyle().Foreground(mutedColor)
// Key bindings
keys := tuiKeyMap{
Up: key.NewBinding(
key.WithKeys("up", "k"),
key.WithHelp("↑/k", "move up"),
),
// ...
}
// Render progress bar
progressBar := m.progressBar.ViewAs(percent)
// Render short help
shortHelp := m.helpModel.ShortHelpView(m.keys.ShortHelp())
// Render full help
fullHelp := m.helpModel.FullHelpView(m.keys.FullHelp())
All modern components are:
No changes required! The TUI works the same way, just looks better.
If extending the TUI:
newKey := key.NewBinding(
key.WithKeys("x"),
key.WithHelp("x", "do something"),
)
percent := float64(current) / float64(total)
progressBar := m.progressBar.ViewAs(percent)
title := lipgloss.NewStyle().
Foreground(primaryColor).
Bold(true).
Render("Title")
Planned improvements:
| Feature | Old TUI | Modern TUI |
|---|---|---|
| Progress | Text percentage | Gradient progress bar |
| Help | Static text | Interactive help component |
| Keys | Hardcoded | Bubbles key bindings |
| Colors | Basic ANSI | Lipgloss styled |
| Borders | ASCII | Rounded unicode |
| Layout | Manual spacing | Lipgloss layout |
| State | Custom logic | Bubbles managed |
# Launch interactive mode with modern UI
hyperexport -interactive
# Or use the alias
hyperexport -tui
↑/↓ and Space to toggle checkboxes? to see all keybindings/ for smart filteringThe modern TUI provides a terminal UI that feels like a modern web app:
Perfect for both casual users and power users who live in the terminal!