What is tuil
The system model, design principles, and intended application scope.
tuil is an application framework for terminal interfaces with a renderer-neutral application runtime. Ink is the React compatibility renderer; renderer applications can instead project the shared scene, semantics, input, resize, and lifecycle contracts directly to the deterministic cell backend. tuil supplies the services and component conventions that large terminal products otherwise rebuild independently.
What it owns
- an explicit configure, initialize, mount, ready, stop, and dispose lifecycle
- typed services, commands, events, plugins, and extension points
- deterministic focus, hotkeys, input routing, overlays, and navigation
- forms, operations, workflows, persistence, and compensation
- theme tokens, variants, slots, capabilities, and live theme switching
- semantic output for resilient tests and portable component stories
- a source-owned component registry and project CLI
What it does not own
tuil does not replace React, require an existing Ink application to migrate, or own your domain model, data access layer, or deployment architecture. React components built from Ink primitives remain Ink-renderer surfaces; cell-backed applications use the explicit renderer-application boundary. Runtime services are opt-in, and every focused package can be installed without the umbrella package when that better fits the application.
Design principles
- Terminal-native. Input, focus, layout, color depth, Unicode, images, alternate screen, reduced motion, and redirected output are first-class.
- Deterministic ownership. Every registration has an owner and a disposer.
- Typed extension. Events, services, plugins, and extension points preserve application-specific types.
- Semantic behavior. Tests query roles, labels, and state rather than brittle rows and columns.
- Portable output. One component story can run in a terminal, a test, documentation, a static snapshot, or Storybook.
- Source ownership. Registry UI is installed into the application, not hidden behind an inflexible binary component dependency.
Best fit
tuil is designed for developer tools, operations consoles, installers, configuration workflows, interactive agents, data explorers, and other terminal applications whose behavior must remain maintainable after the first screen.