How migueldeicaza/swiftterm works
SwiftTerm is a reusable Swift VT/xterm terminal-emulation library, with headless, Apple, and WebAssembly hosting options. The main workflow is a host feeding terminal bytes to the engine; the parser updates screen and scrollback state, which a host renderer presents. Terminal-generated replies and user input travel back through the host interface. Separate capabilities include selection/search, Unicode and bidirectional text, graphics, local process I/O, and session playback. The README documents these product branches; sampled excerpts are limited, so uncertain internal wiring is omitted.
Main entry points: Terminal.swift Terminal core · AppleTerminalView.swift Apple terminal views · LocalProcess.swift Local process · WasmTerminalHost.swift WASM terminal host
Components 23
Terminal engine
- Terminal core
Sources/SwiftTerm/Terminal.swift - Escape parser
Sources/SwiftTerm/EscapeSequenceParser.swift - Screen buffers
Sources/SwiftTerm/BufferSet.swift - Packed cells
Sources/SwiftTerm/CellStorage.swift - Unicode and BiDi
Sources/SwiftTerm/Bidi.swift - Terminal graphics
Sources/SwiftTerm/KittyGraphics.swift - Selection service
Sources/SwiftTerm/SelectionService.swift - Search service
Sources/SwiftTerm/SearchService.swift
Apple interfaces
- Apple terminal views
Sources/SwiftTerm/Apple/AppleTerminalView.swift - Apple rendering
Sources/SwiftTerm/Apple/TerminalRenderOwner.swift - Metal renderer
Sources/SwiftTerm/Apple/Metal/MetalTerminalRenderer.swift - macOS view
Sources/SwiftTerm/Mac/MacTerminalView.swift - iOS view
Sources/SwiftTerm/iOS/iOSTerminalView.swift
Hosts and sessions
- Headless terminal
Sources/SwiftTerm/HeadlessTerminal.swift - Local process
Sources/SwiftTerm/LocalProcess.swift - PTY transport
Sources/SwiftTerm/Pty.swift - Termcast record/playback
Sources/Termcast/TermcastRecorder.swift
WebAssembly
- WASM terminal host
Sources/SwiftTermWebWasm/WasmTerminalHost.swift - WASM ABI exports
Sources/SwiftTermWebWasm/Exports.swift - Render snapshots
Sources/SwiftTermWebWasm/SnapshotEncoder.swift - TypeScript client
Web/src/terminal.ts
Other components
- Terminal host
- Browser host
Connections 24
- Terminal host → Terminal core: feeds bytes
- Terminal core → Escape parser: parses input
- Escape parser → Screen buffers: updates screen
- Screen buffers → Packed cells: stores cells
- Terminal core → Terminal host: sends replies
- Terminal core → Apple terminal views: provides terminal state
- Apple terminal views → Apple rendering: requests rendering
- Apple rendering → Metal renderer: uses optionally
- Apple terminal views → Selection service: supports selection
- Apple terminal views → Search service: supports search
- macOS view → Apple terminal views: specializes view
- iOS view → Apple terminal views: specializes view
- Headless terminal → Terminal core: hosts engine
- Local process → PTY transport: uses PTY
- Local process → Terminal core: delivers process output
- Terminal core → Local process: forwards input
- Termcast record/playback → Local process: records session
- WASM terminal host → Terminal core: hosts engine
- WASM ABI exports → WASM terminal host: dispatches calls
- WASM terminal host → Render snapshots: encodes snapshots
- TypeScript client → WASM ABI exports: calls ABI
- Browser host → TypeScript client: loads client
- Unicode and BiDi → Terminal core: supports text handling
- Terminal graphics → Terminal core: handles graphics protocols