Skip to content


Choose a tag to compare
@caarlos0 caarlos0 released this 08 May 17:44
· 35 commits to master since this release

It is finally time for another Bubble Tea release!

This release contains 31 commits by 14 contributors. Thank you everyone! ๐Ÿ’•

Without further ado, here's a list of the most important changes:

Message handling and filtering

The tea.QuitMsg is now exported and you can use tea.WithFilter to filter which messages your model will receive:

func filter(m tea.Model, msg tea.Msg) tea.Msg {
  if _, ok := msg.(tea.QuitMsg); !ok {
      return msg

  model := m.(myModel)
  if model.hasChanges {
      return nil

  return msg

p := tea.NewProgram(Model{}, tea.WithFilter(filter));

if _,err := p.Run(); err != nil {
  fmt.Println("Error running program:", err)


We are introducing an our very own /x package, which contains the teatest package.

With teatest, you can easily run a tea.Program, assert its final model and/or output.

This package required a couple of new methods on Bubble Tea, namely Program.Wait(), WithoutSignals.

You can see an example usage in the simple example.

Bug fixing

We try hard to not let any of them pass, but we know, sometimes a few of them do. This release also gets rid of a bunch of them.

What's Changed

New Contributors

Full Changelog: v0.23.2...v0.24.0

The Charm logo

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