Source-verified skills for the Charm terminal stack: Bubble Tea v2, Bubbles v2, Lip Gloss v2, Huh v2, Log v2, Glamour v2, plus the gum and vhs CLIs.
100
100%
Does it follow best practices?
Impact
100%
1.02xAverage score across 9 eval scenarios
Passed
No findings from the security scan
The tree and list subpackages of charm.land/lipgloss/v2 are renderers
with swappable enumerators and styles.
See the tree and list example:
// examples/charmed-lipgloss/treelist/main.go
dim := lipgloss.NewStyle().Foreground(lipgloss.Color("240"))
item := lipgloss.NewStyle().Foreground(lipgloss.Color("212"))
t := tree.Root("project").
Child(
tree.Root("src").Child("main.go", "config.go"),
tree.Root("docs").Child("guide.md"),
"assets",
).
Enumerator(tree.RoundedEnumerator).
EnumeratorStyle(dim).
ItemStyle(item)
l := list.New(
"review the changes",
"run local checks",
list.New("format", "test", "build").Enumerator(list.Dash), // nested list
"review the output",
).Enumerator(list.Arabic)
checks := list.New("done", "done", "pending").
Enumerator(func(items list.Items, i int) string {
if items.At(i).Value() == "pending" {
return "[ ] "
}
return "[x] "
})List enumerators: Alphabet, Arabic, Roman, Bullet, Dash,
Asterisk. Tree enumerators: DefaultEnumerator, RoundedEnumerator.
Both take Indenter functions and *StyleFunc variants that receive the
sibling collection and index, so you can style by position or content.
Hide(true) on a node removes it and its children; Offset(start, end) trims
siblings.