A web-based terminal application built with React, TypeScript, and Xterm.js. The project consists of a UI package (using Vite and React) and a server package (using WebSockets and Node.js).
/
├── packages/
│ ├── ui/ # React frontend with Xterm.js terminal
│ └── server/ # Node.js WebSocket server with node-pty
- Node.js
- Bun (for package management and UI development)
bun install
To run both the UI and server concurrently:
bun run dev
This will start:
- UI server at http://localhost:5173 (Vite dev server)
- WebSocket server at ws://localhost:5174
bun run --filter '@webterm/ui' dev
bun run --filter '@webterm/server' dev
The server is running with Node.js and not Bun due to a known issue with Bun causing crashes when using node-pty. This is related to an open issue: oven-sh/bun#19688
- Interactive web-based terminal
- WebSocket-based real-time communication
- Cross-platform support (Windows, macOS, Linux)
- Automatic terminal resizing
- Connection status indicator
- Custom working directory via URL parameter (
cwd
)
You can specify a custom working directory for the terminal by using the cwd
URL parameter:
http://localhost:5173?cwd=/absolute/path/to/your/project
This allows you to start the terminal in any directory on your system, making it convenient for working with specific projects.