← ALL TAGS

Tag: cli

27 articles tagged “cli” 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

Getting Started with Bubblezone in TypeScript: Clickable Buttons, Tabs and Sliders for Terminal Apps

A from-zero guide to @oakoliver/bubblezone, the TypeScript port of lrstanley/bubblezone for Bubble Tea. Make a button, a tab bar, a slider and a pair of nested counters respond to the mouse without computing a single screen coordinate, and see exactly what breaks a zone. Every program runs on Bun, Node and Deno.

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 →
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

Getting Started with ntcharts in TypeScript: Terminal Charts for Bubble Tea and Plain CLIs

A from-zero guide to @oakoliver/ntcharts, the TypeScript port of NimbleMarkets' terminal charting library. Print a sparkline, a bar chart, a time series and candlesticks as plain strings, then stream live CPU data into a Bubble Tea program, zoom with the keyboard and the mouse, and put three charts on one screen. Every program runs on Bun, Node and Deno.

November 1, 2026 13 min read
Read Story →
Testing

Porting Go's ntcharts to TypeScript: Terminal Charts That Match Go to the Last Bit

NimbleMarkets' ntcharts, the charting library for Bubble Tea, is now a TypeScript package: canvas, bar, line, streaming, time series, wave, sparkline and heatmap charts, candlesticks and JSON chart specs. Its output is compared byte for byte with the Go library on 342 scenarios, which meant reproducing Go's fused multiply-add and its own math functions.

November 1, 2026 12 min read
Read Story →
Runtime

OG Images with Satori and resvg-js in Bun: Server and CLI

Satori turns a JSX or object tree into SVG, resvg-js turns it into PNG. A standalone CLI, a cached Bun route, fonts, timings and pitfalls from production.

October 28, 2026 16 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 specify-cli: Spec-Driven Development in Ten Minutes

@oakoliver/specify-cli is GitHub Spec Kit's `specify` command for Node and Bun. This guide sets up a project for an AI coding agent, walks through every file it generates, checks the setup with status and doctor, and explains the specify → plan → tasks → implement loop the generated skills give your agent.

October 3, 2026 7 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 kb: A Knowledge Base an LLM Writes for You

@oakoliver/kb turns notes, papers and web pages into a linked, Obsidian-compatible wiki: you ingest sources, an LLM compiles them into articles, and you search, lint and browse the result from the terminal. This guide goes from an empty folder to KB Studio, and shows which steps need an API key.

October 3, 2026 7 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 →
Runtime

Specify-CLI v1.1.0: Syncing 28 Agents, a Catalog System, and Doctor/Status Commands

We synced @oakoliver/specify-cli with upstream spec-kit v0.7.0. 5 new agents, YAML recipe generation, catalog search, doctor diagnostics. 324 tests, zero dependencies.

April 15, 2026 7 min read
Read Story →
Runtime

Stop Pasting Into ChatGPT. Build a Knowledge Base Your AI Can Actually Search.

I built a CLI tool that turns URLs, PDFs, and markdown into a searchable knowledge base with AI-powered Q&A. No vector database. No embedding service. Just files, BM25 search, and LLM synthesis — all from your terminal.

April 3, 2026 7 min read
Read Story →
Runtime

How kb Works: 27 Modules, One External Dependency, and a Compiler That Turns Raw Sources Into a Wiki

A deep dive into the architecture of kb — the CLI knowledge base tool. Hash-based incremental compilation, BM25 search, TTY-aware dual output, Zod-validated frontmatter, and a dependency graph that recompiles only what changed. 154 tests, 27 TypeScript modules, the full @oakoliver stack.

April 3, 2026 8 min read
Read Story →
Runtime

Porting Python's Spec-Kit to TypeScript: Using SDD to Build SDD

We ported GitHub's spec-kit — the Spec-Driven Development CLI — from Python to TypeScript with zero dependencies. This is the complete journey.

March 26, 2026 16 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 →