No description
  • JavaScript 58.8%
  • Zig 26.8%
  • Go 9.3%
  • CSS 2.8%
  • HTML 1.1%
  • Other 1.2%
Find a file
Cheng Cao 50b40e97fa Add Go server and harden terminal sessions
Add the Go HTTPS/HTTP3 frontend backed by the Zig session engine and PTY worker. Harden connection ownership, bounded transport queues, hedged WSS roaming, and terminal rendering.
2026-09-10 03:29:09 -07:00
bcwebmux Add Go server and harden terminal sessions 2026-09-10 03:29:09 -07:00
common/terminal Add Go server and harden terminal sessions 2026-09-10 03:29:09 -07:00
docs Redesign the shared terminal glyph cache 2026-08-30 14:57:05 -07:00
wgpuTerminal Add Go server and harden terminal sessions 2026-09-10 03:29:09 -07:00
.gitignore Extract zero-overhead wgpuTerminal and reorganize bcwebmux 2026-08-20 14:07:39 -07:00
LICENSE Align grids and pixel sizing, try font rasterizer in wasm, add LICENSE 2026-08-16 23:27:31 -07:00
package-lock.json Extract zero-overhead wgpuTerminal and reorganize bcwebmux 2026-08-20 14:07:39 -07:00
package.json Extract zero-overhead wgpuTerminal and reorganize bcwebmux 2026-08-20 14:07:39 -07:00
README.md Add Go server and harden terminal sessions 2026-09-10 03:29:09 -07:00

bcwebmux

A fast browser terminal built with Ghostty's terminal engine, WebAssembly with WebGPU and an automatic WebGL2 fallback, and a Go HTTPS server with a Zig session core.

Get started

What lives where?

This repository contains both a complete remote-terminal application and the reusable browser terminal it is built on. They are not the same component:

  • bcwebmux/ is the complete application, including the browser UI, session management, transport, and Go/native server that runs shells in PTYs.
  • wgpuTerminal/ is the reusable JavaScript terminal frontend with its public API, browser input, selection, scrolling, and rendering. It provides no PTY, server, or transport.
  • common/terminal/ is the low-level WASM engine integrating Ghostty with terminal emulation, font shaping/rasterization, render batches, and shaders.

The browser stack is bcwebmux/webwgpuTerminalterminal.wasm built from common/terminal. Separately, the application connects to the Go server → native Zig session core/PTY worker → shell. The native server also uses Ghostty, but does not run the browser WASM wrapper.

Just want something like xterm.js?

Use wgpuTerminal/, not the complete bcwebmux application. It fills the embeddable-terminal role; it is not an xterm.js-compatible drop-in API. See the package README for an integration example and index.d.ts for the public API.

Where do I make a change?

Edit source directories, not generated zig-out/, wgpuTerminal/dist/, dependency caches (zig-pkg/, node_modules/), or vendored Go dependencies.

License

This project is licensed under the MIT License.