← ALL TAGS

Tag: nodejs

20 articles tagged “nodejs” on Oak Oliver Engineering, newest first. The latest is “Program Status, Colour Profiles and Snapshots That Don't Stop the Program: What Today's Charm Port Releases Add”.

Runtime

Program Status, Colour Profiles and Snapshots That Don't Stop the Program: What Today's Charm Port Releases Add

Eleven TypeScript ports shipped new versions on November 2: Bubble Tea 1.4 reports what a program is doing to the terminal (OSC 7501) and writes frames in the terminal's colour profile, freeze 1.1 rasterizes off the event loop, ntcharts 1.1 gives charts fixed zone IDs, huh 1.1.3 fills bound fields at once, teatest 1.1 waits for the frame. One runnable example, a canary deploy you approve, uses all of them.

November 2, 2026 23 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 the Charm Ports Together: A Multi-User Terminal Dashboard over SSH in TypeScript

Build one program with five TypeScript ports of Charm's Go libraries: ntcharts draws the charts, bubblezone makes them clickable, wish serves the dashboard to everyone who connects over SSH, freeze turns a screen into an SVG, and teatest tests it all with golden files and real mouse input. Step by step, on Bun and Node.

November 1, 2026 24 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

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

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 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 Rod in TypeScript: Drive Chrome Over the DevTools Protocol

Three small zero-dependency packages, @oakoliver/browser-launcher, @oakoliver/cdp and @oakoliver/cdp-input, let you start Chrome, send it DevTools Protocol commands and type and click like a user, from Node 22+ or Bun. This guide goes from an empty folder to a script that fills in a form, waits for the result and saves a screenshot.

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

We Replaced Node.js With Bun Across Every Production Service. Here's What Nobody Tells You.

The real story of migrating three production services from Node.js to Bun on a single VPS — cold starts, memory savings, deleted dependencies, and every gotcha that bit us.

January 15, 2026 9 min read
Read Story →