charmbracelet/bubbletea
63.7
Adequate · 24 September 2026
10.9k
lines of production code
Go
primary language
5
measurements over time
What this system is
This system is the Bubble Tea v2 framework, a Go library for building terminal user interfaces. It provides a declarative model-view architecture for rendering terminal state, handling keyboard and mouse input, and managing asynchronous commands. The codebase includes a comprehensive suite of examples and tutorials demonstrating core components like text inputs, lists, tables, and progress bars, alongside advanced features such as terminal capability querying, clipboard access, and layered UI composition.
How it got here
2020–2021 — Bubble Tea v2 migration
28 changes.
This period focused on the major architectural shift to Bubble Tea v2, transitioning from imperative commands to a declarative view-based model. The work involved updating the core library's import path and API, including new message types and terminal control features, while simultaneously migrating all examples and tutorials to reflect these new idioms.
2022–2023 — Bubble Tea v2 example migration
18 changes.
This period focused on migrating and expanding the example suite to demonstrate the new Bubble Tea v2 and Bubbles v2 APIs. The work involved adding numerous new examples covering components like textareas, tables, and file pickers, while updating existing ones to reflect the new charm.land domain and v2 runtime features.
2024–2026 — Bubble Tea v2 example suite
23 changes.
This period focused on expanding the example suite for the Bubble Tea v2 and Lip Gloss v2 APIs, introducing demonstrations for advanced features like terminal capability queries, keyboard enhancements, and layered UI composition. The work also included updating existing examples to the new API and refining test coverage to align with changes in terminal escape sequences and state management.
Features
Add Bubble Tea v2 splash screen example
Introduces a new splash screen example in the examples/splash directory, demonstrating a rotating color gradient animation using the Bubble Tea v2 API (charm.land/bubbletea/v2) and Lip Gloss v2. The example initializes the model with a rate of 90 and renders a full-screen animated gradient by interpolating between a defined set of colors based on time and window size.
examples/splash · high confidence
Add Doom Fire terminal animation example
A new Doom Fire example has been added to the examples directory, demonstrating a terminal-based fire animation using the Bubbletea v2 API and Lipgloss v2 styling. The example implements a fire-spreading algorithm that renders half-block characters with a specific color palette, supporting window resizing and quitting via 'q' or Ctrl+C.
examples/doom-fire · high confidence
Add Exec example demonstrating external process execution
The examples/exec directory now includes a new Exec example that demonstrates how to launch an external editor (defaulting to vim if the EDITOR environment variable is not set) using the tea.ExecProcess command. The example shows how to handle the completion of the external process via a custom message, toggle the alternate screen buffer, and manage program lifecycle with the v2 API.
examples/exec · high confidence
Add HTTP example demonstrating I/O with Bubble Tea v2
A new example in the \examples/http\ directory demonstrates how to perform asynchronous I/O (a GET request) within a Bubble Tea application. The example shows how to use the v2 API, including \tea.NewProgram\, the \tea.Cmd\ pattern for background tasks, and message handling for status updates and errors.
examples/http · high confidence
Add ISBN form validation example
A new interactive example demonstrating ISBN-13 and book title validation has been added to the examples directory. The application uses charm.land/bubbles/v2 and charm.land/bubbletea/v2 to provide a form where users can input an ISBN and a title, with real-time validation logic ensuring the ISBN follows the 13-digit checksum standard and the title does not contain banned words. The example also includes a tape test script to verify the interaction flow.
examples/isbn-form · high confidence
Add altscreen-toggle example demonstrating mode switching and suspension
The altscreen-toggle example demonstrates how to toggle between alternate screen and inline modes using the spacebar, and how to suspend and resume the program using ctrl+z. It showcases the updated v2 API including tea.KeyPressMsg, tea.Suspend, tea.ResumeMsg, and the new View-based rendering approach with lipgloss styling.
examples/altscreen-toggle · high confidence
Add blinking eyes terminal animation example
Added a new example in the \examples/eyes\ directory that renders an animated pair of blinking eyes in the terminal. The implementation uses \charm.land/bubbletea/v2\ for the UI framework and \charm.land/lipgloss/v2\ for styling, featuring randomized blink intervals and a double-blink effect.
examples/eyes · high confidence
Add canvas example demonstrating layered composition and z-ordering
A new example application has been added to the \examples/canvas\ directory that showcases the updated \bubbletea\ v2 API and \lipgloss\ v2 layout capabilities. The demo illustrates how to compose multiple UI layers using \lipgloss.NewCompositor\ and \lipgloss.NewLayer\, specifically highlighting the ability to control visual stacking order via the \.Z()\ method. Users can interact with the example by pressing any key to toggle the z-order of two cards, or quit using standard keys.
examples/canvas · high confidence
Add cellbuffer animation example
Introduces a new example in the \examples/cellbuffer\ directory that demonstrates drawing and animating on a cellular grid using the Bubbletea v2 API and the Harmonica library for spring physics. The application renders an animated ellipse that follows mouse movements, showcasing the new \tea.MouseMsg\, \tea.MouseClickMsg\, and \tea.MouseMotionMsg\ event types along with the \tea.MouseModeCellMotion\ setting.
examples/cellbuffer · high confidence
Add clickable example demonstrating v2 layer hit detection
Added a new example in the clickable directory that demonstrates the v2 mouse callback system for layer hit detection. The example showcases how to identify which composited view layer was clicked using the new LayerHitMsg, enabling interactive features like dragging dialog boxes and handling button clicks within nested UI elements.
examples/clickable · high confidence
Add colorprofile example demonstrating capability requests and manual color profiles
A new example application has been added to demonstrate how to request terminal capabilities (RGB and True Color) and handle color profile messages within the Bubble Tea v2 framework. The example also shows how to manually specify a color profile using the colorprofile library and render styled text with custom colors.
examples/colorprofile · high confidence
Add composable views example demonstrating nested Bubble Tea models
Introduces a new example in the \examples/composable-views\ directory that demonstrates how to compose multiple Bubble Tea models (specifically a timer and a spinner) within a single application. The example shows how to manage focus between child models using keyboard input (Tab to switch, N to reset) and batch commands to update both components simultaneously, illustrating a pattern for building complex UIs from smaller, reusable view parts.
examples/composable-views · high confidence
Add cursor-style example for Bubbletea v2
The examples/cursor-style directory now contains a new Go program demonstrating how to customize the terminal cursor shape (block, underline, or bar) and toggle its blinking state using the Bubbletea v2 API. Users can run this example to see how to instantiate a cursor, assign it to a view, and update its properties in response to key presses.
examples/cursor-style · high confidence
Add debounce example demonstrating command debouncing in Bubbletea v2
Added a new example in the examples/debounce directory that illustrates how to debounce commands using Bubbletea v2. The example shows a pattern where key presses increment a tag, and a delayed message is only processed if it matches the current tag, effectively ignoring rapid successive inputs. This helps users understand how to implement debouncing logic in their own Bubbletea applications.
examples/debounce · high confidence
Add default list example with v2 API and alt-screen support
Introduces a new 'Default List' example demonstrating the v2 API for the list component. The example showcases key v2 changes including the use of \charm.land/bubbles/v2/list\, \charm.land/bubbletea/v2\, and \charm.land/lipgloss/v2\. It implements a basic list with custom items, handles window resizing, and supports exiting via Ctrl+C. The example also utilizes the \tea.WithAltScreen\ option (via \v.AltScreen = true\ in the view) to provide a full-screen experience.
examples/list-default · high confidence
Add dynamic textarea example with height constraints and status display
A new example application demonstrates a textarea component that automatically adjusts its height based on content, constrained by minimum (3 lines) and maximum (15 lines) height settings. The example showcases configuration options such as line numbers, virtual cursor control, and width settings, while also displaying real-time status information including current height, line count, cursor position, and scroll percentage.
examples/dynamic-textarea · high confidence
Add example for retrieving values after program exit
A new result example demonstrates how to retrieve a value from a Bubble Tea program after it has exited. The example uses the v2 API (charm.land/bubbletea/v2), implements the Model interface with Init, Update, and View methods, and utilizes tea.NewProgram and Run to capture the final model state upon termination.
examples/result · high confidence
Add keyboard enhancements demo example
A new example application has been added to demonstrate enhanced keyboard support features, specifically key disambiguation and key event reporting (presses and releases). The demo illustrates how to configure the terminal to report these events and handles the resulting messages to log user input, providing a reference for implementing advanced keyboard interactions in Bubble Tea applications.
examples/keyboard-enhancements · high confidence
Add package-manager example demonstrating v2 API usage
The package-manager example has been added to the examples directory, showcasing the updated Charm ecosystem libraries (bubbles/v2, bubbletea/v2, lipgloss/v2). It demonstrates a simulated package installation workflow using the new tea.View return type, the updated progress bar blend API, and unmanaged output printing via tea.Printf to display success messages above the application UI.
examples/package-manager · high confidence
Add paginator example using Bubbles v2
A new paginator example has been added to the examples directory, demonstrating the Bubbles v2 paginator component. The example showcases pagination with dot indicators, dynamic styling based on background color (light/dark mode), and keyboard navigation (h/l for pages, q to quit). It uses the charm.land domain imports and BubbleTea v2 APIs.
examples/paginator · high confidence
Add pipe example demonstrating stdin data handling
A new pipe example has been added to the examples directory, illustrating how to read data piped into a Bubble Tea application via stdin and display it in a text input field. The example uses the v2 API (charm.land/bubbletea/v2, charm.land/bubbles/v2) and automatically detects piped input, exiting with a message if no data is provided.
examples/pipe · high confidence
Add progress-download example using Bubbles v2 API
Introduces a new example demonstrating file downloads with a visual progress bar, built against the Bubbles v2 and Bubble Tea v2 APIs. The application uses an io.TeeReader to track download progress and sends updates to the TUI, which renders the bar using the new progress component and tea.View for output.
examples/progress-download · high confidence
Add realtime channel-based activity example
A new example in the examples/realtime directory demonstrates how to send asynchronous activity to a Bubble Tea application via Go channels. The code uses charm.land/bubbletea/v2 and charm.land/bubbles/v2/spinner to simulate real-time events, showing users how to handle external notifications (like chat messages) within the Bubble Tea model loop using tea.KeyPressMsg and tea.View.
examples/realtime · high confidence
Add simple countdown example using Bubble Tea v2
Introduced a new 'simple' example demonstrating a countdown timer that exits after 5 seconds, built with the Bubble Tea v2 API (charm.land/bubbletea/v2). The example showcases the v2 Model interface, including Init, Update, and View methods, and supports logging via the BUBBLETEA\_LOG environment variable, as well as quitting with Ctrl+C or suspending with Ctrl+Z. A corresponding test file is included but currently disabled due to color profile issues in the test environment.
examples/simple · high confidence
Add simple list example for Bubbles v2
A new 'list-simple' example demonstrates how to use the Bubbles list component with the v2 API. The example shows a selectable list of items (e.g., food choices) styled with Lip Gloss v2, supporting keyboard navigation, selection confirmation via Enter, and quitting via 'q' or Ctrl+C.
examples/list-simple · high confidence
Add space example to demonstrate FPS measurement and performance
A new space example has been added to the examples directory. This application renders a moving space-like background using half-block characters and measures performance by displaying the FPS count. It utilizes the v2 API, specifically importing from charm.land/bubbletea/v2 and charm.land/lipgloss/v2, and demonstrates the new tea.WithFPS(120) option for setting a target frame rate.
examples/space · high confidence
Add spinner example using Bubbles v2 and Bubbletea v2
The spinner example has been updated to demonstrate the spinner component from the Bubbles library, now utilizing the v2 APIs of both Bubbles and Bubbletea (imported as 'tea'). The example showcases a model-based structure where the spinner animates with a 'Loading forever...' message, supports quitting via 'q', 'esc', or 'ctrl+c', and uses lipgloss v2 for styling the spinner's foreground color.
examples/spinner · high confidence
Add split-editors example with multiple synchronized text areas
The split-editors example now demonstrates how to manage multiple textarea instances within a single Bubble Tea application. Users can add or remove editor panes using Ctrl+N and Ctrl+W, navigate between them with Tab and Shift+Tab, and quit with Esc. The example utilizes the v2 API (charm.land/bubbles/v2, charm.land/bubbletea/v2, charm.land/lipgloss/v2) and includes visual styling for focused/blurred states, line numbers, and cursor highlighting.
examples/split-editors · high confidence
Add stopwatch example
A new stopwatch example has been added to the examples directory, demonstrating how to use the v2 stopwatch component alongside the help and key packages. The example provides a functional UI with start, stop, reset, and quit controls, serving as a reference for building time-tracking applications with the updated Bubbles v2 API.
examples/stopwatch, examples/tui-daemon-combo · high confidence
Add table example using v2 API
Added a new table example in the examples/table directory that demonstrates the v2 API for the table component. The example showcases key features such as column and row configuration, styling via lipgloss/v2, keyboard navigation (Enter to select, Esc to blur/focus), and integration with the bubbletea/v2 runtime using tea.NewProgram and tea.View.
examples/table · high confidence
Add table-resize example using Lip Gloss v2
Added a new example demonstrating how to build a resizable table component using the Lip Gloss v2 API. The example showcases table styling, including custom headers, row highlighting (specifically for Pikachu), and color-coded type columns, while handling window resize events to adjust the table dimensions dynamically.
examples/table-resize · high confidence
Add terminal color setting example
A new example application has been added at examples/set-terminal-color that demonstrates how to change the terminal's foreground, background, and cursor colors using the v2 API. The program uses a text input component to accept hex color codes and applies them to the Bubble Tea view, allowing users to visually test color settings in their terminal session.
examples/set-terminal-color · high confidence
Add terminal progress bar example
A new example application has been added to demonstrate the terminal progress bar feature. This demo allows users to interactively control the progress bar's value and state (including indeterminate mode) using keyboard inputs, highlighting compatibility requirements for terminal emulators that support this specific UI element.
examples/progress-bar · high confidence
Add textarea example with v2 API and real cursor support
Added a new example demonstrating the textarea component using the Bubbles v2 and Bubbletea v2 APIs (charm.land domain). The example showcases the updated API surface, including the use of tea.View for rendering, tea.RequestBackgroundColor for dynamic theme styling, and the integration of a real cursor via the Cursor type and tea.View.Cursor field.
examples/textarea · high confidence
Add vanish-on-exit example demonstrating clean terminal exit
A new example program has been added to the examples/vanish directory that demonstrates how to use the Bubble Tea v2 library (imported from charm.land/bubbletea/v2) to create a program that exits cleanly without leaving residual output on the terminal. The example shows a simple model that waits for a key press and then quits, utilizing the tea.NewView API.
examples/vanish · high confidence
Added Commands tutorial for Bubble Tea v2
A new tutorial has been added to the \tutorials/commands\ directory, demonstrating how to handle asynchronous I/O operations using commands in Bubble Tea v2. The accompanying \main.go\ example shows how to make an HTTP request, define custom message types for status and error handling, and manage the program lifecycle via the \tea.Cmd\ interface and \tea.NewProgram(...).Run()\ entry point.
tutorials/commands · high confidence
Bubble Tea v2 release with declarative views and new import path
Bubble Tea v2 introduces a major architectural shift from imperative commands to declarative views, where terminal state (such as alternate screen, mouse mode, and window title) is now controlled via fields on the \tea.View\ struct returned by the \View()\ method instead of program options or toggle commands. The library's import path has changed to \charm.land/bubbletea/v2\, and the \View()\ method now returns a \tea.View\ struct rather than a string. Key handling has been updated with new message types (\tea.KeyPressMsg\, \tea.KeyReleaseMsg\) and fields (\msg.Code\, \msg.Text\, \msg.Mod\), and the space bar is now represented as \"space"\. New features include native clipboard support via OSC52 (\SetClipboard\, \ReadClipboard\), terminal color querying (\RequestForegroundColor\, \RequestBackgroundColor\), and a new \Sequence\ command for ordered command execution.
(repo-wide) · high confidence
Focus-blur example demonstrates v2 focus reporting
The examples/focus-blur directory now contains a new Go program that demonstrates the v2 focus-reporting capability. Users can toggle focus reporting on and off by pressing 't', and the view updates to indicate whether the application is currently focused or blurred when reporting is enabled.
examples/focus-blur · high confidence
New 'Fancy List' example using Bubbles v2 and Lip Gloss v2
The examples/list-fancy directory now provides a comprehensive list demonstration built on the v2 APIs of the Bubbles and Lip Gloss libraries. This example showcases advanced list capabilities, including item insertion and removal, dynamic filtering, and toggling UI elements like the title bar, status bar, pagination, and help menu. It also demonstrates responsive styling that adapts to dark or light background modes and utilizes the new key binding system from charm.land/bubbles/v2/key.
examples/list-fancy · high confidence
New Timer example using Bubbles v2
Added a new 'timer' example in the examples/timer directory that demonstrates the Bubbles v2 API. The example uses the new timer.Model from charm.land/bubbles/v2/timer and integrates with the v2 key and help components. It provides a countdown timer with start, stop, reset, and quit functionality, utilizing tea.KeyPressMsg for input handling and tea.NewView for rendering.
examples/timer · high confidence
New autocomplete example for Bubbles v2
Added a new example demonstrating how to implement autocomplete functionality in a text input field using the Bubbles v2 API. The example fetches a list of Charmbracelet repositories from the GitHub API and uses them as suggestions, showcasing key bindings for navigation and completion within the Bubbletea v2 framework.
examples/autocomplete · high confidence
New capability request example for Bubble Tea v2
Added a new example application in the capability directory that demonstrates how to request terminal capabilities using the Bubble Tea v2 API. The example uses charm.land imports (bubbletea/v2, bubbles/v2, lipgloss/v2) and shows users how to handle tea.KeyPressMsg and tea.CapabilityMsg to query terminal features like 'TN' or 'RGB'.
examples/capability · high confidence
New chat example demonstrating Bubbles v2 components
Added a new chat application example in the examples/chat directory that showcases the Bubbles v2 API, including the textarea, viewport, and cursor components. The example demonstrates key v2 features such as window resizing, AltScreen mode, and proper key routing to the textarea, while migrating imports to the new charm.land domain.
examples/chat · high confidence
New example demonstrating external message sending to Bubble Tea programs
Added a new send-msg example that demonstrates how to send messages to a Bubble Tea program from outside the program using Program.Send(Msg). The example uses the v2 API (charm.land/bubbletea/v2, charm.land/bubbles/v2, charm.land/lipgloss/v2) and shows a spinner model that processes external result messages while running.
examples/send-msg · high confidence
New example demonstrating how to set the terminal window title
An example has been added at examples/set-window-title that shows how to set the terminal window title using the new v2 API. The example uses charm.land/bubbletea/v2 and charm.land/lipgloss/v2, and sets the title via the WindowTitle property on a View, displaying a message that the title will be cleared on exit.
examples/set-window-title · high confidence
New file-picker example for Bubble Tea v2
Added a new example application demonstrating the v2 file-picker component. The example shows how to initialize the picker, restrict allowed file types, set the current directory, handle file selection and disabled-file errors, and render the interface in the alternate screen buffer.
examples/file-picker · high confidence
New fullscreen example demonstrating alternate screen buffer usage
Added a new example program that opens the alternate screen buffer to display a countdown timer. The example illustrates how to configure the view to use the alternate screen by setting \AltScreen = true\ within the \View\ method, and shows the updated v2 API usage including \tea.NewProgram\, \tea.Tick\, and key press handling.
examples/fullscreen · high confidence
New help bubble example demonstrating v2 key bindings and help model
Added a new example in the help directory that showcases the v2 help bubble component. The example implements a simple interactive model using charm.land/bubbles/v2/help and charm.land/bubbletea/v2, featuring custom key bindings for navigation and help toggling, and demonstrates how to integrate the help view with dynamic width setting and lipgloss styling.
examples/help · high confidence
New mouse interaction example for Bubbletea v2
Added a new example program in the examples/mouse directory that demonstrates how to handle mouse events and configure mouse reporting modes using the Bubbletea v2 API. The example shows how to enable full motion tracking via the View's MouseMode property and process mouse coordinates and events through the Model's Update method.
examples/mouse · high confidence
New pager example with viewport highlighting and gutter support
The pager example now demonstrates the Bubbles v2 viewport component, featuring a custom left gutter that displays line numbers and soft-wrap indicators, as well as text highlighting capabilities (specifically highlighting occurrences of 'artichoke'). The example also includes header and footer views with percentage scroll indicators and supports both keyboard (q, esc, ctrl+c) and mouse wheel navigation within the full-screen alternate screen buffer.
examples/pager · high confidence
New prevent-quit example demonstrates event filtering
Added a new example in examples/prevent-quit that shows how to use the tea.WithFilter option to intercept and suppress quit events when the user has unsaved changes, preventing accidental data loss.
examples/prevent-quit · high confidence
New print-key example demonstrates v2 keyboard enhancements
Added a new print-key example in the examples/print-key directory that showcases the bubbletea v2 API. The example illustrates how to enable keyboard enhancement reporting via the View's KeyboardEnhancements.ReportEventTypes setting and how to handle tea.KeyboardEnhancementsMsg to detect supported event types, as well as how to access key text details from key press events.
examples/print-key · high confidence
New sequence example demonstrating ordered command execution
Added a new example in the sequence directory that illustrates how to use the tea.Sequence command to run a series of commands in a specific order, contrasting it with concurrent execution via tea.Batch. The example also demonstrates nested sequences and batches, and has been updated to use the v2 API including tea.View and tea.NewView.
examples/sequence · high confidence
New suspend example demonstrates program suspension and resumption
The examples/suspend directory now includes a new example program that demonstrates how to suspend and resume a Bubbletea v2 application. Users can press Ctrl+Z to suspend the program, which restores the terminal state, and resume it by bringing the process to the foreground. The example also handles interrupts via Ctrl+C and exit via Q or Esc, showing the new tea.ResumeMsg and tea.Suspend capabilities introduced in the v2 API.
examples/suspend · high confidence
New terminal capability query example
Added a new example in examples/query-term that demonstrates how to use the Bubbles v2 textinput component to send custom ANSI escape sequences to the terminal for querying its capabilities. The example allows users to input a sequence, validates it, and writes it to stdout, providing a practical tool for terminal interaction testing.
examples/query-term · high confidence
Removals
Removal of the legacy example program
The example application located in example/main.go has been removed from the codebase. This deletion eliminates the previous demonstration of the tea library, which featured a simple menu navigation interface using j/k keys and a quit command.
example · high confidence
Behavioural changes
Add spinner example using Bubbles v2 API
The spinners example has been updated to use the Bubbles v2 and Bubbletea v2 APIs (imported from charm.land). It now demonstrates how to integrate the spinner component with the new model-based architecture, including the use of tea.View for rendering and tea.KeyPressMsg for handling keyboard input to cycle through available spinner styles.
examples/spinners · high confidence
Basics tutorial updated for Bubble Tea v2 API
The basics tutorial and its accompanying example code have been migrated to the Bubble Tea v2 API. This update reflects the new \tea.Model\ interface structure, including changes to method signatures (such as \Update\ returning \tea.Model\ and \tea.Cmd\) and the introduction of \tea.NewView\ for rendering. The example now demonstrates setting a window title via the view object and uses the \charm.land/bubbletea/v2\ import path, ensuring users learn the current idioms for building terminal applications.
tutorials/basics · high confidence
Glamour example updated to use v2 APIs
The Glamour example has been rewritten to use the v2 APIs for Bubbles, Bubble Tea, and Glamour (imported from charm.land). It now renders markdown content within a styled viewport component, supporting both light and dark themes based on the terminal background, and includes word-wrapping and navigation instructions.
examples/glamour · high confidence
Split progress bar example into static and animated variants
The single progress bar example has been split into two distinct examples: progress-animated and progress-static. The animated variant demonstrates how to render a progress bar with built-in transitions by using progress.WithDefaultBlend() and handling progress.FrameMsg for internal animation updates. The static variant shows how to render the progress bar in a 'pure' fashion without internal state management, using the ViewAs method to render the bar based on a percentage value maintained by the top-level model, and supports custom color configurations via progress.WithColors.
examples/progress-animated · high confidence
Tabs example updated for Bubble Tea v2 and Lip Gloss v2
The tabs example has been migrated to use the Bubble Tea v2 and Lip Gloss v2 APIs. This includes updating imports to the charm.land domain, switching to the new tea.View return type, and adopting tea.KeyPressMsg and tea.MouseClickMsg for input handling. The example now demonstrates the latest styling capabilities and program structure required for the v2 framework.
examples/tabs · high confidence
Text input example updated for Bubbles v2 API
The text input example has been migrated to the Bubbles v2 API, now importing from charm.land/bubbles/v2 and charm.land/bubbletea/v2. The demo program demonstrates key v2 features including virtual cursor support (via SetVirtualCursor and VirtualCursor), character limits (CharLimit), and width configuration (SetWidth). It also utilizes the new tea.View return type and tea.KeyPressMsg for input handling, replacing older patterns like StartReturningModel and tea.KeyMsg.
examples/textinput · high confidence
Updated text inputs example for Bubbles v2 API
The text inputs example has been migrated to use the Bubbles v2 API, importing components from charm.land/bubbles/v2 and charm.land/bubbletea/v2. The demo now showcases multiple simultaneous text inputs with distinct configurations (nickname, email, password) and supports cycling through cursor modes (blink, hide, etc.) via the new cursor package. It also utilizes the updated tea.View return type and tea.KeyPressMsg for input handling.
examples/textinputs · high confidence
Updated views example to use Bubble Tea v2 API
The views example has been updated to use the Bubble Tea v2 API, importing from charm.land/bubbletea/v2 and charm.land/lipgloss/v2. The application now uses the new Model interface-based structure with an Init method and returns tea.Model from Update, while keybindings utilize tea.KeyPressMsg. The rendering layer has shifted to tea.NewView for composing sub-views, and the program is started via tea.NewProgram.
examples/views · high confidence
Window-size example updated for Bubbletea v2 API
The window-size example has been migrated to the Bubbletea v2 API, importing from charm.land/bubbletea/v2. It now uses the new tea.View return type for rendering and tea.KeyPressMsg for handling keyboard input, while continuing to demonstrate how to query and display the terminal window size via tea.WindowSizeMsg.
examples/window-size · high confidence
Test coverage
Updated golden test output for the simple example; Updated terminal I/O golden files for test validation; Updated terminal output expectations for clear and clipboard operations.
Dependencies
Update module path to charm.land/bubbletea/v2 and upgrade dependencies
The main module path has been updated to charm.land/bubbletea/v2, and the Go version requirement has been raised to 1.26.0. The dependency tree has been refreshed to use the latest versions of core libraries, including github.com/charmbracelet/x/ansi v0.11.7, github.com/charmbracelet/colorprofile v0.4.3, and golang.org/x/sys v0.46.0. Additionally, the examples and tutorials directories now have their own go.mod files, pinning charm.land/bubbletea/v2 v2.0.2 and v2.0.0 respectively, and updating their own transitive dependencies to match the new module structure.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.
Score
- CAI 59 → 64 (+4.9)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 85 → 99 (+13.5)
- Architecture 99 → 99 (+0.7)
- Maturity 50 → 50 (-0.7)
- Readiness 71 → 75 (+4.1)
- Security 53 → 66 (+13.4)
Resolved (36)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- Duplicated block (11 lines × 2) (examples/stopwatch/main.go)
- Duplicated block (11 lines × 3) (examples/progress-animated/main.go)
- Duplicated block (8 lines × 2) (tea.go)
- FileTooLong: ./tea.go (tea.go)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- Medium CVE: GO-2025-3955 (go.mod)
- Medium CVE: GO-2026-4601 (tutorials/go.mod)
- Medium CVE: GO-2026-5024 (tutorials/go.mod)
- No exposed public API
- Off-boarding risk: anonymized user #1
- Program.Run (cognitive 41) (tea.go)
- Program.Run (cyclomatic 32) (tea.go)
- Program.eventLoop (cognitive 52) (tea.go)
- …and 16 more
New (46)
- Dependency pinned to a stale untagged commit: github.com/fogleman/ease
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- Duplicated block (5 lines × 2) (tty_unix.go)
- Duplicated block (9 lines × 2) (tea.go)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- Medium CVE: GO-2026-4599 (go.mod)
- …and 26 more
Changes since last survey
- 12 commits — 6 feature/other, 6 fixes
By area
- (root) — 8 commits
- (repo) — 1 commit
- .github/dependabot.yml — 1 commit
- .github/workflows — 1 commit
- testdata/TestViewModel — 1 commit
Notable commits
- fix: ci: fix examples workflow (#1734)
- fix: fix(key): map media record to ultraviolet code (#1757)
- fix: fix: assign MouseButton11 = uv.MouseButton11 (#1754)
- fix: fix: don't panic in ProgressBarState.String() for out-of-range values (#1748)
- fix: fix: pendingErase in cursedRenderer (#1755)
- fix: fix: restore kitty keyboard stack on exit (#1750)
- change: chore: bump go to 1.26.0 (#1807)
- change: chore: remove deprecated windows note (#1695)
- change: ci: sync dependabot config (#1763)
- change: docs: fix links to tutorials & examples (#1645)
- change: fix: typo in doc (#1756)
- change: v2.0.9
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
charmbracelet/bubbletea was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 24 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 657aaae216e3f87df09b60959a9fe5de7b2ca419 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-923689c465cf.