This tutorial sketches the recommended architecture for a small production-style terminal app.
tuikit init TasksApp
cd TasksApp
swift runOr add TUIkit manually in Package.swift using a tagged release or release-candidate tag.
struct TaskItem: Identifiable, Equatable {
let id: UUID
var title: String
var isDone: Bool
}
enum Route: Equatable {
case inbox
case details(UUID)
case settings
}struct TasksScreen: View {
@State private var route: Route = .inbox
@State private var tasks: [TaskItem] = []
var body: some View {
NavigationSplitView {
TaskList(tasks: tasks, route: $route)
} detail: {
TaskDetail(route: route, tasks: $tasks)
}
.statusBarItems {
StatusBarItem(shortcut: "Tab", label: "next")
StatusBarItem(shortcut: "Enter", label: "open")
StatusBarItem(shortcut: "q", label: "quit")
}
}
}ForEach(tasks, id: \.id) { task in
Button(task.title) { route = .details(task.id) }
.focusID("task.\(task.id)")
}Every production screen should have useful loading, empty, error, disabled, focused, and selected states. Prefer concise recovery guidance over generic failure text.
Add render tests for each state and interaction tests for important keyboard behavior. Before shipping, run:
swift build
swift test --parallel
./scripts/release-validation-checklist.shThen manually validate in the terminals your users depend on and record results in docs/TerminalCompatibility.md.