MCPcopy
hub / github.com/charmbracelet/glamour

github.com/charmbracelet/glamour @v2.0.1 sqlite

repository ↗ · DeepWiki ↗ · release v2.0.1 ↗
170 symbols 519 edges 36 files 106 documented · 62%
README

Glamour

<img src="https://github.com/user-attachments/assets/23aabf2a-8bd8-4e7b-bb50-993bce32541d" width="300" alt="Glamour Title Treatment">


<a href="https://github.com/charmbracelet/glamour/releases"><img src="https://img.shields.io/github/release/charmbracelet/glamour.svg" alt="Latest Release"></a>
<a href="https://pkg.go.dev/github.com/charmbracelet/glamour?tab=doc"><img src="https://godoc.org/github.com/golang/gddo?status.svg" alt="GoDoc"></a>
<a href="https://github.com/charmbracelet/glamour/actions"><img src="https://github.com/charmbracelet/glamour/workflows/build/badge.svg" alt="Build Status"></a>
<a href="https://coveralls.io/github/charmbracelet/glamour?branch=master"><img src="https://coveralls.io/repos/github/charmbracelet/glamour/badge.svg?branch=master" alt="Coverage Status"></a>
<a href="https://goreportcard.com/report/charmbracelet/glamour"><img src="https://goreportcard.com/badge/charmbracelet/glamour" alt="Go ReportCard"></a>

Stylesheet-based markdown rendering for your CLI apps.

Glamour example

glamour lets you render markdown documents & templates on ANSI compatible terminals. You can create your own stylesheet or simply use one of the stylish defaults.

Usage

import "charm.land/glamour/v2"

in := `# Hello World

This is a simple example of Markdown rendering with Glamour!
Check out the [other examples](https://github.com/charmbracelet/glamour/tree/main/examples) too.

Bye!
`

out, err := glamour.Render(in, "dark")
fmt.Print(out)

Hello World example

Custom Renderer

import "charm.land/glamour/v2"

r, _ := glamour.NewTermRenderer(
    // wrap output at specific width (default is 80)
    glamour.WithWordWrap(40),
)

out, err := r.Render(in)
fmt.Print(out)

Color Downsampling

Since the renderer is designed to be "pure" and always produce the same output for the same input, it doesn't have access to the terminal's capabilities. This means that color downsampling is not performed by default. In this case, use Lip Gloss to perform downsampling before rendering:

import (
    "charm.land/glamour/v2"
    "charm.land/lipgloss/v2"
)

r, _ := glamour.NewTermRenderer(
    // wrap output at specific width (default is 80)
    glamour.WithWordWrap(40),
)

out, err := r.Render(in)
if err != nil {
    // handle error
}

// downsample colors based on terminal capabilities.
lipgloss.Print(out)

Styles

You can find all available default styles in our gallery. Want to create your own style? Learn how!

There are a few options for using a custom style:

  1. Call glamour.Render(inputText, "desiredStyle")
  2. Set the GLAMOUR_STYLE environment variable to your desired default style or a file location for a style and call glamour.RenderWithEnvironmentConfig(inputText)
  3. Set the GLAMOUR_STYLE environment variable and pass glamour.WithEnvironmentConfig() to your custom renderer

Glamourous Projects

Check out these projects, which use glamour:

  • Glow, a markdown renderer for the command-line.
  • GitHub CLI, GitHub’s official command line tool.
  • GitLab CLI, GitLab's official command line tool.
  • Gitea CLI, Gitea's official command line tool.
  • Meteor, an easy-to-use, plugin-driven metadata collection framework.

Contributing

See contributing.

Feedback

We’d love to hear your thoughts on this project. Feel free to drop us a note!

License

MIT


Part of Charm.

The Charm logo

Charm热爱开源 • Charm loves open source

Extension points exported contracts — how you extend this code

ElementRenderer (Interface)
ElementRenderer is called when entering a markdown node. [14 implementers]
ansi/elements.go
TermRendererOption (FuncType)
A TermRendererOption sets an option on a TermRenderer.
glamour.go
ElementFinisher (Interface)
ElementFinisher is called when leaving a markdown node. [6 implementers]
ansi/elements.go
StyleOverriderElementRenderer (Interface)
StyleOverriderElementRenderer is called when entering a markdown node with a specific style. [2 implementers]
ansi/elements.go

Core symbols most depended-on inside this repo

stringPtr
called by 166
styles/styles.go
boolPtr
called by 52
styles/styles.go
Current
called by 41
ansi/blockstack.go
renderText
called by 32
ansi/baseelement.go
chromaStyle
called by 31
ansi/codeblock.go
Parent
called by 22
ansi/blockstack.go
uintPtr
called by 17
styles/styles.go
NewTermRenderer
called by 15
glamour.go

Shape

Function 69
Method 61
Struct 34
Interface 3
TypeAlias 2
FuncType 1

Languages

Go100%

Modules by API surface

glamour.go27 symbols
ansi/margin.go14 symbols
glamour_test.go13 symbols
ansi/style.go12 symbols
ansi/table.go11 symbols
ansi/blockstack.go10 symbols
ansi/table_links.go9 symbols
ansi/elements.go8 symbols
ansi/renderer.go7 symbols
ansi/baseelement.go6 symbols
ansi/margin_test.go5 symbols
ansi/link.go5 symbols

Dependencies from manifests, versioned

charm.land/glamour/v2v2.0.0-0001010100000 · 1×
charm.land/lipgloss/v2v2.0.4 · 1×
github.com/aymanbagabas/go-udiffv0.4.1 · 1×
github.com/aymerick/douceurv0.2.0 · 1×
github.com/charmbracelet/colorprofilev0.4.3 · 1×
github.com/charmbracelet/ultravioletv0.0.0-2025120516121 · 1×
github.com/charmbracelet/x/ansiv0.11.7 · 1×
github.com/charmbracelet/x/exp/goldenv0.0.0-2025080622240 · 1×
github.com/charmbracelet/x/exp/slicev0.0.0-2025032717291 · 1×
github.com/charmbracelet/x/termv0.2.2 · 1×
github.com/charmbracelet/x/termiosv0.1.1 · 1×

For agents

$ claude mcp add glamour \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact