-
01
SwiftUI semantics, not just its vibe
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. Five host products.
The same App and Scene declarations can feed a terminal executable, a WASI browser deployment, a localhost WebHost launch, a native SwiftUI surface, or a native Android surface. The framework drives the cells; the host owns the chrome.
SwiftTUI · SwiftTUIWASI · SwiftTUIWebHost · SwiftUIHost · SwiftTUIAndroidHost
-
03
Strict, inspectable pipeline
Seven phases — resolve, measure, place, semantics, draw, raster, commit — stay visible through DefaultRenderer and FrameArtifacts. Inspect a frame if 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 SwiftTUIAnimatedImage 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