← ALL TAGS

Tag: npm

15 articles tagged “npm” 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

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

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

Getting Started with pageindex: Tree Indexes for Reasoning-Based RAG

A hands-on introduction to pageindex, the TypeScript port of PageIndex: turn a Markdown document into a tree of sections from the CLI and from code, thin the tree, add summaries through any OpenAI-compatible endpoint, and write the tree-search loop that answers questions from the right section. Offline first, with clear notes on which steps need an LLM.

October 3, 2026 10 min read
Read Story →
Runtime

Getting Started with bm25s: Full-Text Search in TypeScript Without a Search Server

A hands-on introduction to bm25s, the TypeScript port of Python's BM25 library: index a corpus, rank results with scores, pick a BM25 variant, tune k1 and b, add stopwords and stemming, save and load an index, and finish with a small CLI that searches your Markdown notes. Every example runs on Node, Bun and Deno.

October 3, 2026 10 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 →
Real-time

Porting Go-Rod to TypeScript: Browser Automation from Scratch

Go-rod — the DevTools Protocol automation library used by Charmbracelet for VHS — is being ported to TypeScript as a multi-package monorepo. Three packages complete: cdp-input (keyboard/mouse encoding), cdp (WebSocket client), and browser-launcher (process management). 107 tests, 179 expects. Zero dependencies.

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