← ALL TAGS

Tag: charmbracelet

21 articles tagged “charmbracelet” on Oak Oliver Engineering, newest first. The latest is “Porting Go's Bubblezone to TypeScript: Mouse Hit-Testing for Bubble Tea”.

Engineering

Porting Go's Bubblezone to TypeScript: Mouse Hit-Testing for Bubble Tea

lrstanley/bubblezone — clickable regions for Bubble Tea, found by hiding zero-width markers in the view — is now a TypeScript package. 549 lines of source, 122 tests, no runtime dependencies. What changed when the Go goroutine went away, what the original gets wrong about hyperlinks, and what still doesn't work.

November 1, 2026 13 min read
Read Story →
Runtime

Getting Started with Freeze in TypeScript: Code and Terminal Screenshots as SVG, PNG and WebP

@oakoliver/freeze is a Node and Bun port of Charm's freeze: it turns a code file or a command's coloured output into an image with window controls, a shadow and syntax highlighting, as SVG, PNG or WebP. This guide goes from one command to a script that renders a set of images, with the real output of every step.

November 1, 2026 8 min read
Read Story →
Runtime

Getting Started with teatest in TypeScript: Test Your Terminal Apps, Keys, Waits and Golden Files

A from-zero guide to @oakoliver/teatest, the TypeScript port of Charm's testing library for Bubble Tea. Run a program headless, press keys, wait for output, check the final model, compare the whole output with a golden file, take the clock out of a test, and use it from bun test, node:test or Vitest. Every program runs.

November 1, 2026 13 min read
Read Story →
Runtime

Porting Go's teatest to TypeScript: Golden-File Tests for Bubble Tea Programs

Charm's teatest runs a Bubble Tea program headless, sends it keys, waits for its output and compares everything it wrote with a golden file. It is now a TypeScript package that works with bun test, node:test and Vitest. 137 tests, escaping and diffs checked against real Go, and a failure message made to be read.

November 1, 2026 13 min read
Read Story →
Runtime

Getting Started with Wish in TypeScript: SSH Apps in Six Small Programs

A from-zero guide to @oakoliver/wish, the TypeScript port of Charm's wish. Build an SSH server that greets people, recognises them by key, runs commands and serves a Bubble Tea app to every session, then share state between sessions and make it safe to expose. Every program runs on Node and Bun.

November 1, 2026 12 min read
Read Story →
Engineering

Porting Go's Freeze to TypeScript: Code and Terminal Screenshots, Byte for Byte

Charm's freeze turns code and terminal output into SVG, PNG and WebP images. The TypeScript port reproduces upstream's SVG byte for byte for terminal output and in everything but token colours for code, renders PNGs about 20 times faster than freeze's own WebAssembly fallback, and writes real WebP with a 455-line encoder. 100 tests, 37 golden SVGs.

November 1, 2026 12 min read
Read Story →
Runtime

Porting Go's Wish to TypeScript: SSH Apps and Bubble Tea over SSH

Charm's wish, the Go library for building SSH apps, is now a TypeScript package on top of ssh2: an SSH server with middleware, one Bubble Tea program per session, Git and SCP. 154 tests on Node and Bun, and the key-generation bug that hid behind a flaky test.

November 1, 2026 12 min read
Read Story →
Runtime

How OpenCode Renders Messages in Bubble Tea: A Source Tour

How OpenCode's Go TUI renders chat: Bubble Tea's update loop, Glamour markdown, Lip Gloss, a render cache and a viewport, then the same in TypeScript.

October 28, 2026 15 min read
Read Story →
Runtime

Getting Started with Bubbles in TypeScript: Spinners, Inputs, Lists and Tables for Terminal Apps

A from-zero guide to @oakoliver/bubbles, the TypeScript port of Charm's component library for Bubble Tea. Add a spinner, a text input, a filterable list and a table to a terminal app, then combine two components with focus switching. Every program runs on Node, Bun and Deno.

October 3, 2026 10 min read
Read Story →
Runtime

Getting Started with Bubble Tea in TypeScript: Interactive Terminal Apps in Six Small Programs

A from-zero guide to @oakoliver/bubbletea, the TypeScript port of Charm's Bubble Tea. Learn the Elm Architecture with a counter, then add key handling, timers, full-screen mode and printed output, and finish with a styled todo app. Every program runs on Node, Bun and Deno.

October 3, 2026 11 min read
Read Story →
Runtime

Getting Started with Glow: Read Markdown in Your Terminal

Install one npm package and your terminal renders Markdown: files, stdin, URLs, a browsable TUI for a whole docs folder, styles, a git hook that shows the changelog after every pull, and an npm script for your project's docs. Every command here was run as written.

October 3, 2026 6 min read
Read Story →
Runtime

Getting Started with gum: Interactive Shell Scripts Without Writing a TUI

@oakoliver/gum gives bash scripts menus, prompts, confirmations, spinners, styled boxes, Markdown and tables, one command at a time. This guide builds up to a conventional-commit helper in seven steps, and every picture is the real output of the script beside it.

October 3, 2026 8 min read
Read Story →
Runtime

Getting Started with Lip Gloss in TypeScript: Terminal Styling in Ten Minutes

@oakoliver/lipgloss brings Charm's Lip Gloss to Node, Bun and Deno: CSS-like styles for the terminal, with borders, padding, colors and layout. This guide goes from an empty folder to a small status dashboard in five runnable steps, each with its real output.

October 3, 2026 6 min read
Read Story →
Runtime

Getting Started with Huh in TypeScript: Terminal Forms in Ten Minutes

From npm install to a working project scaffolder: one question, a multi-field form, validation, themes, and a script that writes real files. Every snippet in this guide was run as written, on Node and Bun, and every animation is a recording of that run.

October 3, 2026 8 min read
Read Story →
Runtime

Getting Started with Glamour in TypeScript: Render Markdown in the Terminal

@oakoliver/glamour renders Markdown as styled terminal output on Node, Bun and Deno: headings, tables, task lists, syntax-highlighted code and seven built-in themes. This guide goes from one function call to a small script that renders any README in your terminal, with the real output of every step.

October 3, 2026 6 min read
Read Story →
Runtime

Getting Started with VHS in TypeScript: Terminal GIFs Written as Code

@oakoliver/vhs is a Node and Bun port of Charm's VHS: you write a .tape file of keystrokes and pauses, and it renders a GIF, MP4 or PNG of a real terminal running them. This guide covers the prerequisites, a first tape, waiting on output, styling, rendering from TypeScript, keeping README GIFs fresh, and the tape-language gotchas we hit along the way.

October 3, 2026 8 min read
Read Story →
Engineering

Porting Go's Huh? to TypeScript: Interactive Terminal Forms, Zero Dependencies

Charmbracelet's Huh? — interactive terminal forms with 7 field types, 5 themes, dynamic evaluation, and validation — is now a TypeScript package. 4,944 lines of source, 28 tests, 126 expects. The sixth Charm ecosystem port.

March 20, 2026 6 min read
Read Story →
Engineering

Porting Go's Glow to TypeScript: A Terminal Markdown Reader, Zero Dependencies

Charmbracelet's Glow — the terminal markdown reader with CLI and interactive TUI modes — is now a TypeScript package. 4,254 lines of source, 10 Go dependencies replaced, 60 tests. The fifth and final Charm port.

March 19, 2026 9 min read
Read Story →
Engineering

Porting Go's Terminal UI Ecosystem to TypeScript: Glamour and Lipgloss Are Now on npm

charmbracelet/glamour and charmbracelet/lipgloss are now available as TypeScript packages. Custom GFM parser, 7 built-in themes, 645+ tests. The first two of five Charm ports.

March 16, 2026 7 min read
Read Story →
Engineering

Porting Go's Bubble Tea to TypeScript: An Elm Architecture TUI Framework for Node.js

Charmbracelet's Bubble Tea — the Elm Architecture TUI framework — is now available as a zero-dependency TypeScript package. Event loop, input parser, renderer, 46 tests. The third of five Charm ports.

March 16, 2026 7 min read
Read Story →
Engineering

Porting Go's Bubbles to TypeScript: 15 TUI Components, Zero Dependencies

Charmbracelet's Bubbles — 15 pre-built TUI components including text inputs, viewports, tables, lists, and spinners — is now available as a zero-dependency TypeScript package. 256 tests, 11,738 lines. The fourth of five Charm ports.

March 16, 2026 7 min read
Read Story →