foxpro-go is a from-scratch homage to the FoxPro for DOS TUI (and dBASE before it) — floating windows, draggable / resizable / focusable, a menu bar with hotkeys, half-box scrollbars, drop shadows, and a CGA-style palette. It targets a tcell.Screen, so the same widget code runs in a real terminal or, like here, against a WebAssembly canvas. No DOM hacks, no per-platform rewrites — just one cell buffer rendered two ways.
GOOS=js, drives a tcell.SimulationScreen, and paints the cell buffer to a canvas every animation frame.
Late-90s Borland / FoxPro DOS: single-line borders, blue/cyan/yellow
chrome, half-box (▌▐) scrollbar gutters, hollow drop shadows. Title
bars carry ■ close and ▲ zoom glyphs.
Modal dialogs darken the desktop behind them.
The whole palette swaps in one line — try ClassicPalette(),
DraculaPalette(), or RetroGreenPalette() in your own demo.
F10 activates, Alt+F / Alt+H jump straight to a menu.F10 opens the menu. File → New Window spawns more.F2 (or Ctrl+F2 — whichever your browser leaves alone) toggles the command window — type HELP, VER, CLS, ECHO hi, or WAIT saving... for a FoxPro-style toast.Terminals are still the densest, fastest, most-keyboard-driven surface we've got for tools that watch live state — debuggers, monitors, simulators. FoxPro's TUI got an enormous amount right: fast keyboard nav, predictable layout, no animation tax. This framework brings that vocabulary to Go and, via wasm, to anywhere a browser runs.
The whole project is one Go module. The terminal build is
go run ./examples/hello; the browser build you're
looking at is make inside examples/wasm-hello
(builds the wasm, serves it on :8765). Both share the same widget
code — only the screen backend differs.
Source & docs: github.com/carledwards/foxpro-go · WASM_PORT.md for the browser-port architecture. The companion project 6502-sim-tui embeds this framework as its host shell.
Carl Edwards · thecarledwards.com