Releases: charmbracelet/bubbletea
v0.16.0
Cancelable Reads
This release implements a cancelable input reader which allows user input to be read after a Program
has exited. This means that you can now run multiple Program
s in succession in a single application as well as generally read user input in other after a Program
has exited in the context of a single application.
In addition, all Goroutines are now gracefully terminated before Program.Start()
returns, resulting in reliable behavior between subsequent Program
s.
This update has been a major undertaking by @erikgeiser, who built specific implementations for Linux, BSD/macOS, and Windows as well as a general purpose implementation for other flavors of unix.
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter or The Fediverse.
v0.15.0
Interop and Inputs
The big, new feature in this update is Program.Send(Msg)
, which allows you to send messages to the Update
loop from outside a Bubble Tea program. This simplifies Bubble Tea’s interoperability with other libraries quite a lot and we’re excited to see what you do with it.
Beyond that, we’ve made a lot of small changes under the hood to allow Bubble Tea to work better with more types of terminal input such as PTYs over SSH. The program option WithInputTTY
has also been added to make it easier to open a TTY (or console input device on Windows) on demand.
Changelog
New
Msg
s can now be sent toProgram
s withProgram.Send(Msg)
WithInputTTY
is a newProgramOption
for explicitly opening a new TTY (or console on Windows) for input
Fixed
- Fixed a send on closed channel panic that could happen during a shutdown when messages are being sent super fast
- The cursor will now always hide/show itself during startup/shutdown, regardless of whether input is a terminal
- Input will now attempt to be read regardless of whether input is a terminal
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter or The Fediverse.
v0.14.1
Renderer Bugfix: Honor Explicitly Ignored Lines
This release fixes a bug where lines requested to be ignored weren't always honored by the renderer. Most notably, this affected high performance scrolling in the Bubbles Viewport.
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or right here in GitHub Discussions.
v0.14.0
Improvements: Races and Rendering
This release introduces three new ProgramOption
s for starting programs with the altscreen and mouse enabled. This was implemented to solve both race conditions when initializing programs as well as correctness with regard to custom inputs.
// New! This is the recommended way to start your program with the mouse and altscreen active.
p := tea.NewProgram(model, tea.WithAltScreen(), tea.WithMouseAllMotion())
// Deprecated as this will only operate on stdout, as opposed to a custom output you may have set.
p := tea.NewProgram(model)
p.EnableAltScreen()
p.EnableMouseAllMotion()
// Strongly discouraged as these commands could be sent before starting the renderer, resulting
// in rendering artifacts. This is due to the fact that commands run asynchronously in a goroutine.
func (m model) Init() tea.Cmd {
return tea.Batch(tea.EnterAltScreen, tea.EnableMouseAllMotion)
}
Also included are two subtle—yet important—rendering improvements.
Changelog
New
- Added
ProgramOption
WithAltScreen
for starting programs in the alternate screen buffer. - Added
ProgramOption
sWithMouseCellMotion
andWithMouseAllMotion
for starting programs with the mouse enabled.
Fixed
- Programs will no longer render artifacts when exiting due to an error or panic.
- If a view returns the empty string output will be cleared. Previously, rendering would be skipped entirely.
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or right here in GitHub Discussions.
v0.13.4
Rendering Hotfix
This bugfix release corrects a mis-rendering that could occur when the number of lines increases.
✌️ Special thanks for @fiws for reporting this one.
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or right here in GitHub Discussions.
v0.13.3
Faster Rendering
This release introduces a performance optimization to the Bubble Tea standard renderer where only lines that have changed since the last render will be drawn.
Note that there's already an optimization in place that will skip rendering entirely if nothing has changed.
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or right here in GitHub Discussions.
v0.13.2
This bugfix release ensures Bubble Tea clears the bottom line before exiting, preventing the cursor the last row of output from potentially appearing behind the prompt. It also fixes a data race in the default renderer and improves compatibility with rxvt-based terminals.
Thoughts? Questions? Feel free to reach out on Twitter and The Fediverse.
v0.13.1
v0.13.0
This release adds two new features as well as a few other small-ish improvements.
New: Headless Mode
WithoutRenderer
is a new program option that, when set, will tell Bubble Tea not to manage rendering. With the renderer disabled print and log statements will, by default, go straight to standard output. This opens up a few possibilities:
- Daemon Mode: It's now possible for your Bubble Tea program to also operate as a daemon in addition to a TUI. See the
daemon-tui-combo
example for an example implementation. - Non-TTY Mode: If output’s not a TTY your Bubble Tea program can simply print or log output to
stdout
. See thedaemon-tui-combo
example for an example implementation. - General Purpose Application Development: It's possible to use the Bubble Tea framework for general purpose application development. That is to say, your can take advantage of this implementation of The Elm Architecture to build other types of applications, like servers, GUIs and so on.
New: Toggle the Alt Screen
Previously, you had to choose whether your application would be inline or fullscreen prior to starting your Bubble Tea program. Now you can jump in and out of the altscreen with the new EnterAltScreen
and ExitAltScreen
commands.
Changelog
New
- Added option
WithoutRenderer
for disabling the Bubble Tea renderer in non-TTY, daemon and general-purpose application development contexts (details) - New
EnterAltScreen
andExitAltScreen
commands for jumping into and out of the alternate screen buffer (read: full window mode) - Bubble Tea will not automatically exit the alternate screen buffer on quit
Changed
- Type
Key
now satisfies the Stringer interface (KeyMsg
already did)(https://pkg.go.dev/github.com/charmbracelet/bubbletea@v0.13.0#KeyType) - Program option
WithOutput
now takes anio.Writer
instead of an*os.File
Fixed
- All key constants (such as
KeyEnter
) are now of type [KeyType
]
Thoughts? Questions? Feel free to reach out on Twitter and The Fediverse.
v0.12.5
This big news in this release is that Bubble Tea will now automatically open a TTY for input (or a ConPTY on Windows) if input is not a terminal. In other words, if you pipe something into Bubble Tea, the keyboard and mouse will just work. Note that if you’re already specifying a custom input via tea.WithInput
the Bubble Tea runtime will assume you have things under control and won't open a TTY/ConPTY.
New
- If input is not a TTY, automatically open a TTY unless the user has explicitly specified a custom input
Fixed
- Bubble Tea projects now build properly in Go 1.16. Previously building Bubble Tea on Go 1.16 meant running
go mod tidy
.
Thoughts? Questions? Feel free to reach out on Twitter and The Fediverse.