Tessera is an early, pre-1.0 Swift foundation for terminal applications. It is useful for
local experimentation, but it is not ready for production use. The terminal substrate
(TesseraTerminal) is usable today; the view and application-programming layer
(Tessera) is under active development and does not yet offer a stable public API.
This document is the canonical status, roadmap, and documentation-boundary reference. The root README stays intentionally light and defers here for detail.
Tessera targets macOS, Linux, and Windows with Swift 6.3 or later. Current continuous testing covers only these environments:
| Platform | Tested configuration | Architecture |
|---|---|---|
| macOS | 26.5.2 | Apple silicon |
| Linux | Ubuntu 24.04 (project Linux VM) | ARM64 |
| Windows | Windows 11 25H2 (project Windows VM) | ARM64 |
Continuous integration runs the full test suite on all three platforms with Ghostty-backed
output snapshot coverage (via libghostty-vt), including Windows.
As the view layer matures, Tessera will broaden the supported and tested range along these axes. None of the following are guaranteed yet; each lands when it is verified in CI or by a contributor:
- Older and newer macOS releases beyond the single pinned version, and Intel (
x86_64) coverage alongside Apple silicon. - Additional Linux distributions and releases beyond the pinned Ubuntu VM, and
x86_64alongside ARM64. - Windows
x86_64alongside ARM64.
Contributions that validate other OS versions, distributions, or architectures are welcome — see CONTRIBUTING.md.
The Tessera Showcase is the project's full-featured integration app: a dense terminal application that composes the public view surface, demonstrates one component contract at a time, and presents its own live view graph through a read-only diagnostics Inspector. It is the canonical proof that the components compose, not a second specification or a tutorial.
From a checkout it runs directly:
just core showcase # or: swift run --package-path Examples TesseraShowcaseIts target shape:
- A three-role workspace — Catalog, Playground, and Inspector — composed
through
NavigationSplitViewand the negotiatedSplitViewgeometry. - Responsive presentation that adapts from a dense
120x24desktop down to a canonical40x16mobile fixture, collapsing from three roles to two to one and finally to a resize guard below23x10, always keeping critical material inside aScrollViewrather than clipping it. - Every user operation driven by visible, labeled public controls (including Catalog, Inspector, and open/close affordances at compact sizes) with keyboard and pointer paths.
- An Inspector rendered purely over the most recent completed, immutable graph snapshot: it can never mutate the graph, trigger a render pass, or capture controlled values.
The full responsive policy and fixture matrix live in
design/showcase.md.
The view layer is under active construction and has no stable public API yet. Foundations have landed; controls, collections, and styling are in progress toward the accepted 1.0 inventory below.
Landed foundations (TesseraCore, TesseraLayout, TesseraWidgets):
- An explicit, inspectable
ViewGraphwith reconciliation, identity, environments, and immutable diagnostics. View,ViewBuilder,ForEach,AnyView,EquatableView, andText(grapheme/width-aware).- The integer-cell
Layoutprotocol,VStack/HStack/ZStack,Spacer,frame,padding,layoutPriority, and the sharedFlexsolver. ScrollViewandSplitViewfoundations with negotiated pane geometry.
Planned for 1.0:
- Styling and decoration: inherited semantic
Stylevalues, borders,Box,overlay,background,Divider, and the sharedScrollIndicator. - Focus and input: document-order focus, key routing, responder bubbling, mouse hit testing, and application-owned text selection.
- Controls:
Button,Toggle,Picker,Stepper, andTextField. - Collections and navigation:
Grid,Table,List,Section, andNavigationSplitView.
The design catalog under design/ is the authoritative contract
for each component's anatomy, state, sizing, input, and degradation.
The active milestone is the Phase 4 view layer, delivered as dependency-ordered slices and integrated into the Showcase as each lands:
- Core view graph, reconciliation, and
Text— done. - Layout, stacks, static
SplitView, andScrollView— done. - Flex sizing and final
SplitViewnegotiation — done. - Styling, text wrapping, decoration, and
ScrollIndicator— in progress. - Focus, key routing, and controlled responders (
Button,Toggle,Picker,Stepper,TextField) — planned. - Mouse, hit testing, and application-owned text selection — planned.
Grid,Table, andNavigationSplitViewcomposition — planned.List,Section, controlled cutover, and the complete Showcase — planned.
After the view layer (spec Phase 5, "Runtime + polish") the work turns to:
- The immediate-mode API (you own the loop and call
terminal.draw { … }) and an optional, architecture-agnostic@MainActorconvenience runtime for event delivery, responder routing, focus, invalidation, and render scheduling. - Example apps (counter, file browser, chat client) that double as integration tests.
- DocC tutorial content and a performance pass.
- 1.0 release preparation.
That work will also broaden the OS versions Tessera supports and tests. The first public
source release will follow the release gate. The complete design and implementation plan
lives in docs/Spec.md.
- The root README is the starting point for installation, product choice, and project maturity.
- The package's DocC catalogs describe source APIs. They are not hosted yet: Swift Package
Index publication is deferred, and static GitHub Pages documentation is planned. Read
them in the checkout or generate them locally with
just docs preview. docs/Spec.mdand thedesign/catalog are design and architecture references, not a supported API contract.- CONTRIBUTING.md and the
docs/operational guides are for contributors and local development.
Use Q&A for usage questions, Feature Requests and Ideas for proposed behavior, and Issue Triage for behavior that still needs confirmation. Open a bug report once a defect is reproducible. Do not open an unsolicited pull request: wait for maintainer agreement and complete the vouched contributor workflow.
Report vulnerabilities through the private process in the Security Policy, never through a public issue or Discussion.