Releases: charmbracelet/fang
v2.0.1
Changelog
Fixed
- d89b30a: fix: don't strip newlines in error messages (#86) (@meowgorithm)
- f227d7e: fix: lint: preallocate the groups slice in evalGroups (@aymanbagabas)
- 450f7db: fix: properly preallocate the groups slice in evalGroups (@aymanbagabas)
Thoughts? Questions? We love hearing from you. Feel free to reach out on X, Discord, Slack, The Fediverse, Bluesky.
v2.0.0
Are you ready for Fang v2?
The second major release of Fang is here!
❤️ 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/fang"
// After
import "charm.land/fang/v2"💄 Lip Gloss v2
Fang v2 now uses Lip Gloss v2, which brings a host of improvements and performance enhancements. The new version of Lip Gloss is pure and declarative, which means better rendering, more consistent styling, and fewer surprises.
🎨 Built-in Color Downsampling
Fang now automatically detects your terminal's color profile and downsamples colors to match. This means your CLI will look great everywhere — from full TrueColor terminals to basic 16-color TTYs. No configuration needed; it just works.
🌈 Light/Dark Theme Support
The default theme now adapts to your terminal's background color. Light terminal? You get the light theme. Dark terminal? Dark theme. You can also create your own adaptive themes using WithColorSchemeFunc:
fang.Execute(ctx, cmd, fang.WithColorSchemeFunc(func(ld lipgloss.LightDarkFunc) fang.ColorScheme {
return fang.ColorScheme{
Primary: ld(lipgloss.Color("#FF6B6B"), lipgloss.Color("#4ECDC4")),
Secondary: ld(lipgloss.Color("#95E1D3"), lipgloss.Color("#F38181")),
// ...
}
}))For backwards compatibility, the old WithTheme option still works but is now deprecated.
🪟 Better Windows Support
Windows users rejoice! Fang v2 ensures VT processing is always enabled on Windows, so ANSI colors and styling work correctly without any extra configuration.
🛠️ Bug Fixes and Polish
Fang v2 includes several quality-of-life improvements:
- Multiline flag descriptions are now preserved and formatted correctly
- Command aliases are styled consistently
- Default values in help output have better spacing
- Terminal checks are now done in the right place, preventing panics in non-TTY environments
Changelog
Other stuff
- c78f5f2: docs(readme,license): update footer banner, copyright date (@meowgorithm)
- f233128: refactor: migrate to charm.land module path (#81) (@aymanbagabas)
Feedback
Have thoughts on Fang v2? We'd love to hear about it. Let us know on…
Part of Charm.
Charm热爱开源 • Charm loves open source
v1.0.0
v0.4.3
v0.4.2
v0.4.1
Changelog
Bug fixes
- 7d856d9: fix: windows: always enable VT processing on Windows (#72) (@aymanbagabas)
Thoughts? Questions? We love hearing from you. Feel free to reach out on X, Discord, Slack, The Fediverse, Bluesky.
v0.4.0
Changelog
New Features
Bug fixes
- d27cfc4: fix: command alias styling (#69) (@caarlos0)
- 7131537: fix: spacing in help for default value (#63) (@Ahhhh-man)
- 0275935: fix: use u0020 (#58) (@caarlos0)
Other work
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, Discord, Slack, The Fediverse.
v0.3.0
Changelog
New Features
- 965d86e: feat: WithNotifySignal (#48) (@caarlos0)
- d2fb831: feat: WithoutVersion (#56) (@michaelquigley)
- 3fe7faa: feat: better handle pipes, single quotes, stdin (-) (#49) (@caarlos0)
Bug fixes
- 4d07c80: fix: check if stderr is a tty (#51) (@caarlos0)
- 4f20a4a: fix: improve useline of subcommands (@caarlos0)
- c01daea: fix: sub-commands styling (#47) (@caarlos0)
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or on Discord.
v0.2.0
Changelog
New Features
- bac0327: feat: add ansi colorscheme, refactor (#43) (@caarlos0)
- e582283: feat: support grouped commands and fix flag style (#42) (@caarlos0)
- c14108d: feat: support having a custom error handler (#28) (@caarlos0)
Bug fixes
- b3ee675: fix: check bg color on stdout instead of stderr (#37) (@caarlos0)
- 004b40b: fix: don't detect background color if output's not a tty (#35) (@meowgorithm)
- 292835b: fix: handle multi line examples (@caarlos0)
- 52e7a86: fix: improvements (@caarlos0)
- c4cc657: fix: only detect bg if needed (#36) (@caarlos0)
- 4a49dbf: fix: only show 'try --help for usage' when it's a usage error (#40) (@caarlos0)
- a333a1f: fix: parser improvements (@caarlos0)
- e0d85b6: fix: small godoc adjusts (@caarlos0)
Documentation updates
- 80ecd96: docs(readme): fix example image in dark mode (@meowgorithm)
- eb46667: docs: fix example (#30) (@christeredvartsen)
- 912ac94: docs: update readme (@caarlos0)
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or on Discord.
v0.1.0
Changelog
New Features
- 855f5a3: feat: flags/cmds title first words of usage (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
- 75fac65: feat: handle errors (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
- b8d999a: feat: new color scheme (#19) (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
- baf862f: feat: theming (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
- 906158c: feat: update colors and styles a bit (#25) (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
Bug fixes
- b2d8702: fix: Lip Gloss tag (Christian Rocha christian@rocha.is)
- c426f77: fix: add flag default style, fix args padding (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
- 91523a5: fix: bugs, adding tests (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
- e8b48d1: fix: description (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
- cfed964: fix: do not show default values for false and 0 (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
- b71b6ea: fix: don't show examples if there are no examples (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
- 22c96c6: fix: example (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
- ad109df: fix: flag description color (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
- a39d780: fix: hidden flags and subcmds (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
- b5a91ac: fix: improve use, support custom [stuff] (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
- 59a0711: fix: improve width calculations (#27) (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
- 6aaabf1: fix: improving styles (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
- 90a9a77: fix: lint (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
- f7ae58d: fix: lint issues (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
- f1051fa: fix: lint issues (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
- 318d357: fix: minor example edits (#3) (Christian Rocha christian@rocha.is)
- 233a307: fix: narrow screens (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
- ae63da3: fix: order (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
- 35d8098: fix: simplify (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
- 5d23d8e: fix: spaces (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
- ccd7d76: fix: style (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
- ece15e4: fix: transform (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
- 89edfe1: fix: usage (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
- 8890404: fix: wrap errors et al (#23) (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
Dependency updates
- b5b6628: fix(deps): sum (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
Documentation updates
- 9b22ad8: docs(readme): art, badges, copyedits (#21) (Christian Rocha christian@rocha.is)
- 4b82536: docs(readme): corrections and copyedits (Christian Rocha christian@rocha.is)
- a2a11e9: docs(readme): fix product image alpha channel (Christian Rocha christian@rocha.is)
- 270bf03: docs(readme): minor copyedit (Christian Rocha christian@rocha.is)
- 5712c1d: docs(readme): one more edit to header art (Christian Rocha christian@rocha.is)
- 5c10810: docs(readme): update example output (Christian Rocha christian@rocha.is)
- 223157f: docs(readme): update header art (Christian Rocha christian@rocha.is)
- bd3b8c2: docs(readme): update screenshot (Christian Rocha christian@rocha.is)
- 36888b9: docs: add contributing guidelines (#24) (bashbunni 15822994+bashbunni@users.noreply.github.com)
- 3d1a9d9: docs: improve readme (#11) (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
- bfeec39: docs: license year (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
- c3bba2f: docs: readme (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
- 6410676: docs: readme example (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
- a7fe311: docs: update (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
- b92da45: docs: update (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
- 017ae3a: docs: update (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
- 3e19893: docs: update (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
Other work
- a8e8347: ci: goreleaser config (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
- 12de4c9: ci: lint-sync (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
- f3de02a: ci: remove nightly job (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
- 93246bd: ci: sync golangci-lint config (#12) (github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>)
- 6961878: ci: sync golangci-lint config (#15) (github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>)
- 2b6357d: ci: sync golangci-lint config (#17) (github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>)
- 9eb64a3: ci: sync golangci-lint config (#18) (github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>)
- 7bc84f6: ci: updates (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
- ba46c59: tests: fix (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
- dec9b06: wip (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
- 9522be4: wip: first (Carlos Alexandro Becker caarlos0@users.noreply.github.com)
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or on Discord.

