-
01
SwiftUI semantics, not a clone
Recursive parent-child layout. Graph-scoped state drives rendering, not the reverse. Modifier order matters because modifiers participate in layout and semantics. The terminal target does not bend the authoring story.
@MainActor · View · @State · Layout
-
02
One app. Several host products.
The same App and Scene declarations can feed a terminal executable, a WASI browser deployment, a localhost WebHost launch, or a host-managed SwiftUI surface. The framework owns the cells; the host owns the chrome.
SwiftTUI · SwiftTUIWASI · SwiftTUIWebHostCLI · SwiftUIHost
-
03
Strict, inspectable pipeline
Seven phases — resolve, measure, place, semantics, draw, raster, commit — stay visible through DefaultRenderer and FrameArtifacts. Inspect a frame when you need to understand layout, routing, or final cells.
DefaultRenderer · FrameArtifacts
-
04
Capability-aware, not lowest-common-denominator
ANSI, sanitized OSC 8 hyperlinks, Kitty graphics, Sixel, truecolor, and mouse reporting are negotiated per session against a live capability profile. PNG and baseline JPEG decode in pure Swift; GIF playback ships in the AnimatedImage peer product.
TerminalCapabilityProfile
-
05
Swift 6 library, normal app code
SwiftTUI builds with Swift 6 language mode, explicit @MainActor authoring APIs, and Sendable frame artifacts. Your app can consume the package without copying those build settings.
Swift 6 · @MainActor View.body · SwiftPM package
-
06
No dependencies on a terminal emulator
The browser path does not embed xterm.js or a DOM terminal. WebHost mounts a scene runtime directly. Tests render frames as integer-cell rasters without spinning up a TTY.
WebHost · RasterSurface · no xterm.js