AI_IMAGE: Dark terminal interface floating in void-black space, glowing teal cursor blinking on a command line, faint green-on-black text scrolling upward, reflections of code on a matte surface below, cinematic shallow depth of field, moody atmospheric lighting | digital-art | landscape

// project_detail

VoidTerm

Year:

2024

Stack:

TypeScript, WebAssembly, xterm.js, Node.js, WebSocket

Repo:

https://github.com/marklange/voidterm

Live:

https://voidterm.marklange.com

VoidTerm is a browser-native terminal emulator that brings the full power of a local shell session into the browser tab. Built on WebAssembly for near-native execution speed and xterm.js for pixel-accurate terminal rendering, it handles everything from interactive SSH tunneling to custom color theming without plugins or extensions.

Why Another Terminal Emulator

Most web-based terminals feel sluggish because they relay every keystroke through a REST layer. VoidTerm sidesteps that by compiling a PTY multiplexer to Wasm and running it in a dedicated worker thread. The UI thread stays free for rendering, which means zero dropped frames even during heavy output — piping a multi-gigabyte log through grep feels instant.

The project started as a weekend experiment after I got frustrated with SSH-in-browser tools that couldn’t handle my tmux workflow. Three months later it had a theme engine, split-pane support, and a WebSocket relay that lets you tunnel into any host where you can run the companion daemon.


Architecture Overview

The front end is a TypeScript application bundled with Vite. xterm.js handles rendering, with addons for search, Unicode 11 width tables, and the WebGL renderer for GPU-accelerated output. Theme definitions are JSON files — swap palettes at runtime without reloading.

The back end is a lightweight Node.js relay server that authenticates via SSH keys and multiplexes connections over a single WebSocket. The Wasm PTY bridge handles local shell emulation for offline mode, so you can prototype shell scripts without a network connection.

If your terminal emulator can’t keep up with cat /dev/urandom, it’s not a terminal — it’s a slideshow.

Key Capabilities

  • Full xterm-256color support with truecolor passthrough
  • Split panes — horizontal and vertical — with drag-to-resize dividers
  • SSH tunnel relay with ed25519 and RSA key authentication
  • Offline local shell via Wasm PTY bridge
  • Hot-swappable JSON theme engine with 40+ bundled palettes
  • WebGL renderer for sustained 60fps output on heavy workloads

VoidTerm is MIT-licensed and actively maintained. Contributions welcome — especially around Wayland clipboard integration and the planned libsixel image-in-terminal renderer.

[ Back to all projects ]