Skip to content

Releases

v2.0.1

Choose a tag to compare

@taciturnaxolotl taciturnaxolotl released this 12 Jun 13:55
95c93db

Changelog

Bug fixes

Other work


The Charm logo

Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or on Discord.

v2.0.0

Choose a tag to compare

@github-actions github-actions released this 09 Mar 10:27
v2.0.0
b26da2b

What's New in Glamour v2

We're excited to announce the second major release of Glamour!

If you (or your LLM) are just looking for technical details on migrating from v1, please check out the Upgrade Guide.

Note

We don't take API changes lightly and strive to make the upgrade process as simple as possible. We believe these changes bring necessary improvements and pave the way for the future. If something feels way off, let us know.

❀️ Charm Land Import Path

We've updated our import paths to use vanity domains and use our domain to import Go packages.

// Before
import "github.com/charmbracelet/glamour"

// After
import "charm.land/glamour/v2"

πŸ’„ Lip Gloss v2 Integration

Glamour v2 now uses Lip Gloss v2 under the hood, bringing improved performance and more consistent styling across the Charm ecosystem.

Since Glamour is designed to be pure (same input = same output), it doesn't peek at your terminal's capabilities. Instead, color downsampling is handled explicitly via Lip Gloss when you're ready to render:

r, _ := glamour.NewTermRenderer(glamour.WithWordWrap(80))
out, _ := r.Render(markdown)

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

No more I/O fights between Glamour and Lip Gloss. Glamour focuses on rendering, Lip Gloss handles the colors. Everyone's happy!

🌏 Better Text Wrapping

Text wrapping has been rewritten using lipgloss.Wrap, which means way better handling of:

  • Multi-byte UTF-8 characters (CJK, emojis, etc.)
  • Complex Unicode sequences
  • Terminal cell width edge cases

Your Japanese documentation, emoji-filled READMEs, and creative Unicode art will all render beautifully now.

πŸ”— Hyperlink Support

Glamour now supports ANSI hyperlinks! If your terminal supports OSC 8 (and many modern terminals do), your links can be clickable. No changes needed, it just works.

md := `Check out [Charm](https://charm.sh) for more awesome tools!`
out, _ := glamour.Render(md, "dark")
fmt.Print(out)
// In supporting terminals, "Charm" will be clickable!
Which terminals support OSC 8 hyperlinks?

πŸ“§ Cleaner Email Rendering

Email autolinks now hide the mailto: prefix for a cleaner look while remaining functional. Because nobody wants to read mailto: in their rendered markdown.

// Before (v1): Rendered as "mailto:hello@charm.sh"
md := `Contact us at <hello@charm.sh>`
out, _ := glamour.Render(md, "dark")
// Output: mailto:hello@charm.sh (ugly!)

// After (v2): Rendered as just "hello@charm.sh"
md := `Contact us at <hello@charm.sh>`
out, _ := glamour.Render(md, "dark")
// Output: hello@charm.sh (much better!)

πŸŒ™ Dark is the New Default

The WithAutoStyle() option and AutoStyle have been removed. The default style is now "dark", which works well across most terminals. You can still explicitly choose any style:

// Use a specific style
out, _ := glamour.Render(markdown, "light")
out, _ := glamour.Render(markdown, "pink")
out, _ := glamour.Render(markdown, "dracula")
out, _ := glamour.Render(markdown, "tokyo-night")

Simpler is better!

🎨 Color Profile Changes

The WithColorProfile() option has been removed. Color adaptation is now handled by Lip Gloss when rendering output:

// Old approach (v1)
r, _ := glamour.NewTermRenderer(
    glamour.WithColorProfile(termenv.TrueColor),
)

// New approach (v2)
r, _ := glamour.NewTermRenderer(glamour.WithWordWrap(80))
out, _ := r.Render(markdown)
lipgloss.Print(out) // Handles color downsampling automatically

This separation of concerns makes Glamour's rendering more predictable and testable.

πŸ‘‹ Farewell, Overline

The Overlined field has been removed from all style primitives. It was rarely used and not widely supported across terminals. If you need similar visual separation, consider using underline, bold, or background colors instead.

πŸ› Bug Fixes

  • Fixed CJK character rendering in margin writers
  • Fixed table background colors to match document styling
  • Improved handling of edge cases in text wrapping
  • Better handling of code spans with special characters

🌈 More on Glamour v2

Ready to migrate? Head over to the Upgrade Guide for the full migration checklist.


Changelog

New!

Fixed

Docs

Other stuff

Feedback

Have thoughts on Glamour v2? We'd love to hear about it. Let us know on…


Part of Charm.

The Charm logo

Charmηƒ­ηˆ±εΌ€ζΊ β€’ Charm loves open source

v0.10.0

Choose a tag to compare

@github-actions github-actions released this 16 Apr 19:49

Actually readable tables

Big tables that included links were always hard to read. Links can be very long, and tables often have limited space to render them. This means that links often took the space of many lines and weren't properly clickable because they were being truncated in practice.

Starting on this release, Glamour will render links and images at the footer of the table, with a reference number so you can easily find the link you're looking for. If you want the old behavior, it is still supported via the new WithInlineTableLinks option.

The New Way

table_with_footer_links_and_images

The Old Way

Wanna render tables with inline links? You still can:

r, err := glamour.NewTermRenderer(glamour.WithInlineTableLinks(true))
if err != nil { /*...*/ }

out, err := r.RenderBytes(in)
if err != nil { /*...*/ }

fmt.Fprintf(os.Stdout, "%s\n", out)

table_with_inline_links_and_images

Prettier GitHub links

We also introduced a change so that GitHub links inside tables that reference issues, discussions or PRs will be shown in its shortened form, similar to how GitHub itself present the links on issue descriptions: owner/repo#123.

table_with_footer_auto_links_short

Extra

Also, we introduced WithTableWrap, so you can disable table text wrapping if really want:

r, err := glamour.NewTermRenderer(glamour.WithTableWrap(false))
if err != nil { ... }

out, err := r.RenderBytes(in)
if err != nil { ... }

fmt.Fprintf(os.Stdout, "%s\n", out)

Changelog

New Features

Bug fixes

Other work


The Charm logo

Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or on Discord.

v0.9.1

Choose a tag to compare

@github-actions github-actions released this 18 Mar 17:24
dddb9a7

Some users were reporting occasional checksum miss matches when building using Glamour v0.9.0.
This release provides a new tag to hopefully fix this.

Changelog

Other work

  • dddb9a7: ci: sync golangci-lint config (#403) (@github-actions[bot])

The Charm logo

Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or on Discord.

v0.9.0

Choose a tag to compare

@github-actions github-actions released this 13 Mar 17:10
f43b1ad

Better Syntax Highlighting, Better Tables

It's totally time for a Glamour release right? This release features a nice lil' contribution from the @github CLI team and pulls in some big table improvements from Lip Gloss upstream. Let's go!

Specifying Chroma Styles

Thanks to valiant efforts of @andyfeller and @williammartin at @github, you can now use glamour.WithChromaFormatter to specify an exact Chroma style to use, independent of the higher level style.

myHotOps := glamour.WithOptions(
    glamour.WithChromaFormatter("terminal16"),
    glamour.WithStandardStyle("dark"),
)

As a bonus, you can also use glamour.WithOptions as a meta layer for grouping options.

Better Tables

This release also reaps the benefits from the table rendering overhaul in Lip Gloss v1.1.0! Glamour will now be much smarter when it comes to deciding column widths, and the content will now wrap appropriately instead of just being cut when it won't fit.

Changelog

New Features

Bug fixes

Documentation updates


The Charm logo

Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or on Discord.

v0.8.0

Choose a tag to compare

@bashbunni bashbunni released this 05 Aug 17:56
29b800e

Fixing (almost) everything

With a ton of rendering fixes, she's sparkling ✨

It has that new car smell...

So many fixes…one man

@caarlos0 fixed a whopping 15 issues with PR #317 πŸ₯‡

  • Fix URL links not rendering inside bold text #312
  • Fix autolink element rendering #290
  • Add support for backslash escapes #106
  • Fix cases when backslash should not be shown #274
  • Fix escape character rendering #311
  • Fix newlines in definition lists #239
  • Fix nested blockquotes rendering #313
  • Fix block quote accidentally combining lines #237
  • Fix document-level indent causing unintended wrapping after quoted lines #68

Better tables

Tables now provide stable rendering of elements within the table including alignment, text styles, all that jazz. It now uses the lipgloss table, making it much more consistent across the board.

  • Render tables with Lip Gloss #262
  • Refactor to replace TableWriter with Lip Gloss table #254
  • Fix inline code within table #315
  • Fix links in tables #316
  • Provide consistent alignment of table elements #60
  • Support alignment in tables #117

New! Tokyo Night

The markdown renderer’s equivalent of a mani-pedi πŸ’…

Tokyo Night is now a built-in style for Glamour. This means you'll be able to use it in the next release of Glow.

glow -s "tokyo-night"
# OR
export GLAMOUR_STYLE="tokyo-night"

Tokyo Night x Glamour

Check out the custom style example to learn how to support custom styles in your own Glamour apps.

No TTY?

Glamour will now check if stdout is a tty and will strip styles when it is not.

Other Stuff

New Contributors

Full Changelog: v0.7.0...v0.8.0


The Charm logo

Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or Discord.


This discussion was created from the release v0.8.0.

v0.7.0

Choose a tag to compare

@muesli muesli released this 26 Mar 13:24
c271197

Fixes ’n’ Things

Fixed

Changes

New Contributors

Full Changelog: v0.6.0...v0.7.0


The Charm logo

Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or Discord.

v0.6.0

Choose a tag to compare

@muesli muesli released this 09 Nov 16:56

Pink theme and general maintenance

Fixed

Added

Changes

  • Bump github.com/muesli/termenv to 0.13.0
  • Bump github.com/yuin/goldmark to 1.5.2
  • Bump github.com/microcosm-cc/bluemonday to 1.0.21

New Contributors

Full Changelog: v0.5.0...v0.6.0


The Charm logo

Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or Discord.

v0.5.0

Choose a tag to compare

@muesli muesli released this 24 Jan 16:29
94148ad

Hello, Dracula

Added

  • Ship with built-in Dracula color scheme (#137)
package main

import (
        "fmt"
        "github.com/charmbracelet/glamour"
)

func main() {
        in := "# Hello World\n\nThis is a simple example of Markdown rendering with Glamour!"

        out, _ := glamour.Render(in, "dracula")
        fmt.Println(out)
}

v0.4.0

Choose a tag to compare

@muesli muesli released this 13 Jan 14:42

Fixed

  • Correctly render lists that don't start at 1 (#116)

Added

  • Optionally Preserving New Lines (#115)
  • Implement Capitalization (#118)
  • Added Dracula color scheme

Changes

  • Use goldmark v1.4.4
  • Use termenv v0.9.0
  • Use reflow v0.3.0
  • Use chroma v0.10.0
  • Use bluemonday v1.0.17
⌂ 捒网址