Comprehensive examples demonstrating the @termwright/core library for programmatic terminal control.
Fundamental examples for learning Termwright basics:
- basic.ts - Spawning sessions, running commands, basic I/O
- interactive.ts - Working with interactive programs (REPLs, prompts)
npm run getting-started:basic
npm run getting-started:interactiveComplex scenarios and advanced features:
- pattern-matching.ts - Regex patterns, conditional execution, async waiting
- multi-session.ts - Parallel execution, session management, resource pooling
npm run advanced:pattern-matching
npm run advanced:multi-sessionUsing Termwright for automated testing:
- testing-example.ts - CLI testing, validation, error handling
npm run testing:cli-
Install dependencies (from repository root):
npm install
-
Build the core library (required first time):
npm run build
-
Run any example:
npm run getting-started:basic
examples/
├── README.md # This file
├── getting-started/
│ ├── README.md # Getting started guide
│ ├── basic.ts # Basic usage
│ └── interactive.ts # Interactive sessions
├── advanced/
│ ├── README.md # Advanced patterns guide
│ ├── pattern-matching.ts # Pattern matching
│ └── multi-session.ts # Multi-session management
└── testing/
├── README.md # Testing guide
└── testing-example.ts # CLI testing example
import { TerminalManager } from "@termwright/core";
// TerminalManager is a singleton - use directly (no 'new')
const session = TerminalManager.spawn({
cols: 80,
rows: 24,
cwd: process.cwd(),
});// Spawn
const session = TerminalManager.spawn({ cols: 80, rows: 24 });
// Use
await session.runCommand("echo 'hello'", { timeout: 5000 });
// Always destroy when done
session.destroy();// One-shot command (waits for completion)
const result = await session.runCommand("ls -la", { timeout: 5000 });
console.log(result.output);
// Interactive input/output
session.write("python3\n");
await session.waitForPattern(/>>>/);
session.write("print('hello')\n");
const output = session.readOutput();// Wait for specific output
await session.waitForPattern(/COMPLETE/, { timeout: 5000 });
// Handle multiple outcomes
const output = await session.waitForPattern(/SUCCESS|FAILED/);
if (output.includes("SUCCESS")) {
// Handle success
}- Getting Started Guide - Start here if you're new
- Advanced Guide - Complex scenarios and patterns
- Testing Guide - Automated testing strategies
- API Reference - Complete API documentation
- Core Library Docs - Core library details
- MCP Server Docs - MCP integration
| Use Case | Example | Category |
|---|---|---|
| Run a simple command | basic.ts |
Getting Started |
| Interactive CLI tools | interactive.ts |
Getting Started |
| Wait for specific output | pattern-matching.ts |
Advanced |
| Parallel execution | multi-session.ts |
Advanced |
| Test CLI applications | testing-example.ts |
Testing |
Import Error: Make sure to build the core library first:
npm run build --workspace=@termwright/coreSession hangs: Always set timeouts on async operations:
await session.runCommand("cmd", { timeout: 5000 });
await session.waitForPattern(/pattern/, { timeout: 3000 });Memory leaks: Always destroy sessions when done:
try {
// Use session
} finally {
session.destroy();
}