charm-lipgloss

Styles and lays out terminal UI views in Go using the Lip Gloss library.

1|1|Updated Jul 6, 2026
One-click install
npx skills add https://github.com/gabesan21/project-of-projects --skill charm-lipgloss-gabesan21
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: charm-lipgloss
Source: https://github.com/gabesan21/project-of-projects/tree/main/.agents/skills/charm-lipgloss
Command: npx skills add https://github.com/gabesan21/project-of-projects --skill charm-lipgloss-gabesan21

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill requires charm.land/lipgloss/v2.

What problem does it solve? Building terminal user interfaces in Go requires consistent styling, correct cell-width measurement, and block layout composition, which are error-prone when done with raw ANSI escape codes and string length checks. ## Core Features & Use Cases - Declarative styling: Define immutable Style values with colors, borders, padding, margins, and alignment, then reuse them as design tokens across a TUI. - Block layout composition: Combine multi-line blocks with JoinHorizontal/JoinVertical and position content with Place, plus table, list, and tree subpackages for structured output. - Correct measurement: Use lipgloss.Width/Height/Size to measure styled strings while ignoring ANSI sequences and correctly counting emoji and CJK characters. - Use Case: When writing the View() of a Bubble Tea program, render a kanban board as a styled table, join a task list and detail card side by side, and center the result on screen using the window dimensions. ## Quick Start Ask the agent to style a Go TUI view with Lip Gloss v2, for example to render a bordered card and a two-column layout joined horizontally and centered on the terminal screen.

Frequently Asked Questions about charm-lipgloss

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I style terminal output in Go with Lip Gloss?▼

Create a Style with lipgloss.NewStyle() and chain methods like Bold, Foreground, Padding, and Border, then call Render on your string. Styles are immutable values, so chain at declaration or assign the result back to reuse them as design tokens.

How do I build a two-column layout in a Go TUI?▼

Render each column as a styled block, then combine them with lipgloss.JoinHorizontal using an alignment position like lipgloss.Top. Center the result on screen with lipgloss.Place using the width and height from Bubble Tea's WindowSizeMsg.

Should I use lipgloss v1 or v2?▼

Use v2 via the charm.land/lipgloss/v2 import path, which is the current version. The v1 path github.com/charmbracelet/lipgloss only appears in legacy code, and the two imports are incompatible within one project.

Why does my Lip Gloss layout break when measuring string width?▼

Using len() on a styled string counts ANSI escape sequences and miscounts emoji and CJK characters, breaking alignment. Always use lipgloss.Width, Height, or Size, which ignore escape sequences and measure cells correctly.

Does Lip Gloss handle terminal color support automatically?▼

Yes, when printing through lipgloss.Println, Sprint, or Fprint, colors are downsampled to the terminal's color profile automatically, and this is built into Bubble Tea v2. Plain fmt.Println skips downsampling, so hex colors can leak as raw sequences on terminals without truecolor.

When should I use Lip Gloss versus Glamour?▼

Lip Gloss styles and lays out general terminal content such as frames, cards, tables, and lists. Glamour renders markdown documents to ANSI-styled output; you typically frame glamour's output with a lipgloss style or place it in a styled viewport.