Releases: charmbracelet/gum
v0.15.0
No longer a sticky situation
This release contains a small boatload of fixes and quality-of-life features across the board by the great @caarlos0 and some awesome contributors.
Most importantly we detangled Gum and Huh. The two libraries were too tightly coupled creating a difficult environment to maintain. With this separation, Gum much easier to maintain, especially for contributors. Chew on that!
General Stuff
No more weird ANSI: gum
now strips ANSI sequences by default. Want βem back? just add --no-strip-ansi
.
We fixed some bugs with existing timeouts + they can now be used in confirm
, choose
, file
, filter
, input
, pager
, and spin
. You can specify the units, i.e. --timeout=750ms
, --timeout=1m30s
Choose
Sometimes you want the user-facing choice to be different than the outputted value. Now you can do that with --label-delimiter
:
$ printf 'Pocky:0\nRamen:1\nShrimp Chips:2\n' | gum choose --label-delimiter=':'
Want to select all options by default? Use --select='*'
.
$ printf 'Pocky\nRamen\nShrimp Chips\n' | gum choose --select='*'
Confirm
No you can print the chosen value with --show-output
:
$ gum confirm --show-output 'Do you agree?'
Do you agree? No
exit status 1
File
You can now add a header to your filepickers with the --header
set of flags.
gum file --header="Whatcha gonna pick?"
For details see gum file --help
.
Filter
Better delimiters, select all, and so on
Press ctrl+a to select all choices, esc to unfocus the filter field.
Want some defaults? Use --selected
to preselect choices. You can also use --input-delimiter
and --output-delimiter
for more flexibility around input and output.
$ echo "JS|Android|iOS" | gum filter --selected='*' --input-delimiter="|" --no-limit --output-delimiter=","
Freeform input
Filter's --no-strict
allows you to create a new option if no matches are found; it's essentially a free input field. Go crazy!
Sort: we fixed it
Filter's --sort
would sort by score which was causing some confusion for users. To clarify this behaviour, --sort
is deprecated in favour of --[no]-fuzzy-sort
.
Want to sort alphabetically? Leverage the sort
command in a pipeline:
$ cat input.txt | sort | gum filter --no-sort
Log
Now you can set a minimum log level with GUM_LOG_LEVEL
. Valid values are debug
, info
, warn
, error
, and fatal
.
Spin
You can now use --show-stdout
and --show-stderr
to print output:
$ gum spin --show-stdout --title "Running command..." -- sleep 10 && echo hello
Table
We expanded the table
API to allow users to control more fields in csv.Reader
through gum. This includes --lazy-quotes
and --fields-per-record
. This should fix issues with gum struggling to read CSV files properly. For details see gum table --help
.
We also made a bunch of rendering improvements such as growing the table rows based on --columns
, settings sane defaults widths, ignoring BOMs (byte order marks), and so on.
Changelog
New!
- feat(choose): --selected="*" to select all by @caarlos0 in #769
- feat(choose,filter): --input-delimiter --output-delimiter by @caarlos0 in #779
- feat(confirm): add --show-output by @vahnrr in #427
- feat(file): add --header by @caarlos0 in #768
- feat(file): show permissions and size by @caarlos0 in #717
- feat(filter): --select-if-one returns if single match by @caarlos0 in #778
- feat(filter): allow to focus out of filter by @caarlos0 in #776
- feat(filter): allow to pre-select items with --selected by @caarlos0 in #777
- feat(filter): ctrl+a to toggle select all by @caarlos0 in #770
- feat(log): support setting minimum log level with GUM_LOG_LEVEL by @caarlos0 in #723
- feat(spin): --show-stdout --show-stderr by @caarlos0 in #774
- feat(style): trim line spaces by @caarlos0 in #767
- feat(table): --lazy-quotes and --fields-per-record by @caarlos0 in #759
- feat(table): add help by @caarlos0 in #756
- feat(table): set --print if stdout is not a terminal by @caarlos0 in #762
- feat(version): adds command to check current gum version by @caarlos0 in #775
- feat: adding return column to table command by @deicon in #415
- feat: allow cursor option in file by @radar07 in #667
- feat: esc exit 1, ctrl+c exit 130, help arrow order by @caarlos0 in #771
- feat: handle focus/blur events by @caarlos0 in #749
- feat: improve handling ctrl+c and timeouts by @caarlos0 in #747
Fixed
- fix(choose): --ordered by @caarlos0 in #722
- fix(choose,confirm,file,filter,input,pager,spin): timeout default unit by @caarlos0 in #724
- fix(confirm) --timeout was ignored, now works as documented by @dpritchett in #697
- fix(confirm,choose,file,input): timeout handling by @caarlos0 in #718
- fix(filter): --no-strict not working, also weird behavior by @caarlos0 in #737
- fix(filter): abort on ctrl+q by @caarlos0 in #721
- fix(pager): do not strip ansi sequences by @caarlos0 in #754
- fix(pager): use help bubble by @caarlos0 in #748
- fix(spin): if not a tty, only print title, do not open tty for stdin by @caarlos0 in #763
- fix(spin): indenting lines when command is piped by @aymanbagabas in #636
- fix(spin): interrupt child process on ctrl+c by @caarlos0 in #732
- fix(stdin): trim space instead of \n by @caarlos0 in #761
- fix(table): grow table rows based on --columns by @caarlos0 in #760
- fix(table): ignore BOM by @caarlos0 in #757
- fix(table): only set height if > 0 by @caarlos0 in #716
- fix(table): set widths by @caarlos0 in #758
- fix(write): max height, max chars by @caarlos0 in #753
- fix: clarify filter --sort flag by @caarlos0 in #738
- fix: strip ansi sequences from stdin by @caarlos0 in #739
- fix: quote tmux session name in code sample by @oalders in #745
Other Stuff
- refactor: removing huh as a dep by @caarlos0 in #742
- chore(nix): update src hash by @ctn-malone in #733
New Contributors
- @dpritchett made their first contribution in #697
- @radar07 made their first contribution in #667
- @ctn-malone made their first contribution in #733
- @oalders made their first contribution in #745
Full Changelog: v0.14.5...v0.15.0
Verifying the artifacts
First, download the checksums.txt
file, for example, with wget
:
wget 'https://github.com/charmbracelet/gum/releases/download/v0.15.0/checksums.txt'
Then, verify it using cosign
:
cosign verify-blob \
--certificate-identity 'https://github.com/charmbracelet/meta/.github/workflows/goreleaser.yml@refs/heads/main' \
--certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \
--cert 'https://github.com/charmbracelet/gum/releases/download/v0.15.0/checksums.txt.pem' \
--signature 'https://github.com/charmbracelet/gum/releases/download/v0.15.0/checksums.txt.sig' \
./checksums.txt
If the output is Verified OK
, you can safely use it to verify the checksums of other artifacts you downloaded from the release using sha256sum
:
sha256sum --ignore-missing -c checksums.txt
Done! You artifacts are now verified!
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or on Discord.
v0.14.5
This is a small maintenance release to bump dependencies, update linter config, and adjust GoReleaser configuration.
Changelog
Bug fixes
Dependency updates
- 6837ed2: feat(deps): bump github.com/charmbracelet/bubbletea from 0.27.0 to 1.0.0 (#661) (@dependabot[bot])
- 8ab6253: feat(deps): bump github.com/charmbracelet/bubbletea from 1.0.0 to 1.1.0 (#665) (@dependabot[bot])
- 65e46d6: feat(deps): bump github.com/charmbracelet/x/ansi from 0.2.2 to 0.2.3 (#656) (@dependabot[bot])
Other work
Verifying the artifacts
First, download the checksums.txt
file, for example, with wget
:
wget 'https://github.com/charmbracelet/gum/releases/download/v0.14.5/checksums.txt'
Then, verify it using cosign
:
cosign verify-blob \
--certificate-identity 'https://github.com/charmbracelet/meta/.github/workflows/goreleaser.yml@refs/heads/main' \
--certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \
--cert 'https://github.com/charmbracelet/gum/releases/download/v0.14.5/checksums.txt.pem' \
--signature 'https://github.com/charmbracelet/gum/releases/download/v0.14.5/checksums.txt.sig' \
./checksums.txt
If the output is Verified OK
, you can safely use it to verify the checksums of other artifacts you downloaded from the release using sha256sum
:
sha256sum --ignore-missing -c checksums.txt
Done! You artifacts are now verified!
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or on Discord.
v0.14.4
Au revoir, bugs
This release fixes a buncha bugs and introduces a nice lil' quality-of-life feature.
Changelog
New!
- 8422c49: feat(filter): Add cyclic navigation (#483) (@piero-vic)
Fixed
- e095a91: fix(input): wrong height when using borders in the header (@caarlos0)
- d722a2f: fix: height 0 by default (#640) (@caarlos0)
- 046a4d3: fix: use 0 as default width (#634) (@caarlos0)
- 9db5c7f: fix: select all keybindings (#639) (@caarlos0)
- 96448e0: fix: show background style help (#641) (@caarlos0)
Deps
- dd5aa97: feat(deps): bump github.com/charmbracelet/bubbles (#654) (@dependabot[bot])
- 1a91d33: feat(deps): bump github.com/charmbracelet/glamour from 0.7.0 to 0.8.0 (#646) (@dependabot[bot])
- 2ee90c8: feat(deps): bump github.com/charmbracelet/lipgloss (#655) (@dependabot[bot])
- f55c314: fix(deps): update huh (@caarlos0)
Docs
Other stuff
Verifying the artifacts
First, download the checksums.txt
file, for example, with wget
:
wget 'https://github.com/charmbracelet/gum/releases/download/v0.14.4/checksums.txt'
Then, verify it using cosign
:
cosign verify-blob \
--certificate-identity 'https://github.com/charmbracelet/meta/.github/workflows/goreleaser.yml@refs/heads/main' \
--certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \
--cert 'https://github.com/charmbracelet/gum/releases/download/v0.14.4/checksums.txt.pem' \
--signature 'https://github.com/charmbracelet/gum/releases/download/v0.14.4/checksums.txt.sig' \
./checksums.txt
If the output is Verified OK
, you can safely use it to verify the checksums of other artifacts you downloaded from the release using sha256sum
:
sha256sum --ignore-missing -c checksums.txt
Done! You artifacts are now verified!
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or on Discord.
v0.14.3
Fixinβ more bugs
Hot on the heels of the last release (very hot, in fact), hereβs one more quick point release to fix a regression in spinner.
Verifying the artifacts
First, download the checksums.txt
file, for example, with wget
:
wget 'https://github.com/charmbracelet/gum/releases/download/v0.14.3/checksums.txt'
Then, verify it using cosign
:
cosign verify-blob \
--certificate-identity 'https://github.com/charmbracelet/meta/.github/workflows/goreleaser.yml@refs/heads/main' \
--certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \
--cert 'https://github.com/charmbracelet/gum/releases/download/v0.14.3/checksums.txt.pem' \
--signature 'https://github.com/charmbracelet/gum/releases/download/v0.14.3/checksums.txt.sig' \
./checksums.txt
If the output is Verified OK
, you can safely use it to verify the checksums of other artifacts you downloaded from the release using sha256sum
:
sha256sum --ignore-missing -c checksums.txt
Done! You artifacts are now verified!
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or on Discord.
v0.14.2
Fixinβ bugs
This is a maintenance release to pull in various fixes from huh upstream. As a bonus, macOS binaries are now also signed and notarized courtesy @goreleaser.
Thanks for using Gum!
Changelog
New
- sign and notarize macos binaries in #612
Changed
- use in-house utility packages in #616
Fixed
- drop left padding in choose in #597
- fix race conditon where spinner could mis-render in #621
- fix a bug where choose could crash when spacebar is pressed twice #587
- fix a bug where the foreground color could not be set in choose #614
- fix a bug where foreground could not be set in write #583
- fix a bug where keypresses could crash choose #580
- restore y/n keybindings to confirm #568
- restore centering to buttons in confirm #566
New Contributors
Full Changelog: v0.14.1...v0.14.2
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or Discord.
v0.14.1
What's Changed
- Show help with Huh? by @maaslalani in #587
- Support using the Home/End keys in pager by @lzm0 in #548
Fixes
- Handle
huh?
user aborted error by @MikaelFangel in #578 - Cursor styling by @MikaelFangel in #592
- Re-introduce ESC for
gum write
by @MikaelFangel in #579
New Contributors
- @CodeZea1ot made their first contribution in #542
- @camcui made their first contribution in #537
- @lzm0 made their first contribution in #548
Full Changelog: v0.14.0...v0.14.1
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or Discord.
v0.14.0
Gum + Huh?
Gum v0.14.0
is a major internal refactor which uses huh?
internally for choose
, confirm
, file
, input
, write
inputs!
All functionality remains the same, but you will notice some minor visual changes / improvements.
If you haven't already, check it out:
Changes
- Use Huh for Gum Choose by @maaslalani in #521
- Use Huh for Gum Confirm by @maaslalani in #522
- Use Huh for Gum File by @maaslalani in #523
- Use Huh for Gum Input by @maaslalani in #524
- Use Huh for Gum Write by @maaslalani in #525
- fix(spin): Output Pipes if Timeout Occurs by @hopefulTex in #461
- Document
gum log --time
by @ernstki in #472 - feat(spin): Add support for
--show-error
for the spinner. (rebase #440) by @pingiun in #518
New Contributors
- @ernstki made their first contribution in #472
- @pingiun made their first contribution in #518
- @dungle-scrubs made their first contribution in #513
Full Changelog: v0.13.0...v0.14.0
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or Slack.
v0.13.0
Changelog
New Features
Add --select-if-one
flag to gum choose
and gum filter
.
> gum choose --select-if-one "option"
> option
Bug fixes
- 5c65944: (fix): ShowOutput flag displays in realtime (#405) (@hopefulTex)
Verifying the artifacts
First, download the checksums.txt
file, for example, with wget
:
wget 'https://github.com/charmbracelet/gum/releases/download/v0.13.0/checksums.txt'
Then, verify it using cosign
:
cosign verify-blob \
--certificate-identity 'https://github.com/charmbracelet/meta/.github/workflows/goreleaser.yml@refs/heads/main' \
--certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \
--cert 'https://github.com/charmbracelet/gum/releases/download/v0.13.0/checksums.txt.pem' \
--signature 'https://github.com/charmbracelet/gum/releases/download/v0.13.0/checksums.txt.sig' \
./checksums.txt
If the output is Verified OK
, you can safely use it to verify the checksums of other artifacts you downloaded from the release using sha256sum
:
sha256sum --ignore-missing -c checksums.txt
Done! You artifacts are now verified!
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or on Discord.
v0.12.0
Gum Log πͺ΅
Version 0.12.0 of gum features a brand new log
command. Gum log
logs messages to the terminal at using different levels and styling using the charmbracelet/log
library.
To get started, simply run:
gum log
# Log some debug information.
gum log --structured --level debug "Creating file..." name file.txt
# DEBUG Unable to create file. name=temp.txt
# Log some error.
gum log --structured --level error "Unable to create file." name file.txt
# ERROR Unable to create file. name=temp.txt
See charmbracelet/log
for more usage.
What's Changed
- Pretty Table Print by @maaslalani in #436
- Log command by @aymanbagabas in #449
- Avoid reading from stdin if
--value
is being used by @piero-vic in #448 - Made filter work with lists as choose by @MikaelFangel in #424
New Contributors
- @cglong made their first contribution in #401
- @docwhat made their first contribution in #433
- @piero-vic made their first contribution in #448
Full Changelog: v0.11.0...v0.12.0
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or on Discord.
v0.11.0
Pager Search, Timeouts, and Bug fixes
This release of Gum includes several features and bug fixes to make your Gum usage more smooooth! π§
Whatβs Changed
New
- Pager search functionality (by @MikaelFangel) in #321
- Strip ANSI for
gum filter
andgum choose
when output is not a TTY - Non-positive widths will cause
gum write
will use the entire terminal width GUM_FORMAT_THEME
/GUM_FORMAT_LANGUAGE
environment variables--no-sort
flag forgum filter
- Customizable cursor modes
- Customizable cursor line text
- Add
--timeout
flag to all subcommands (by @deicon)
Fixed
- Respect file path argument in filepicker
Other stuff
New Contributors
- @hopefulTex made their first contribution in #303
- @vahnrr made their first contribution in #374
- @kennyp made their first contribution in #387
Full Changelog: v0.10.0...v0.11.0
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or on Discord.