Reusable terminal UI for browser projects. It returns an HTMLElement, keeps the renderer pluggable, and separates UI rendering from transport concerns.
bun add @acode/terminalimport { createTerminal, WebSocketTerminalTransport } from "@acode/terminal";
import "@acode/terminal/style.css";
const terminal = createTerminal();
document.body.append(terminal);
terminal.controller.mount();
terminal.controller.setTransport(
new WebSocketTerminalTransport({
url: "ws://localhost:3000/terminals/demo",
}),
);
await terminal.controller.connect();
terminal.controller.focus();import { createTerminal, XtermEngine } from "@acode/terminal";
const terminal = createTerminal({
engine: new XtermEngine({
fontSize: 13,
fontFamily: "JetBrains Mono",
renderer: "auto",
imageSupport: true,
fontLigatures: true,
}),
});createTerminal()returns anHTMLElementwith acontrollerproperty.TerminalControllerhandles lifecycle, events, and transport wiring.XtermEngineis the default renderer implementation.WebSocketTerminalTransportis an optional transport layer.- Custom renderers can implement the exported
TerminalEngineinterface.
bun run testAn example package-level test lives in test/example.test.ts and demonstrates how to plug in a custom engine and transport.