A native Rust workspace
Tide's application is a ten-crate Cargo workspace, with a separate xtask crate for maintainer tooling. Configuration catalogs, syntax grammars, and themes are embedded in the executable.
| Crate | Responsibility |
|---|---|
tide | CLI entry point, terminal lifecycle, and managed installation |
tide-ui | App state, pane tree, dialogs, rendering, input routing, and session restoration |
tide-core | Rope-backed documents, edits, selections, undo, search, and folds |
tide-config | Embedded defaults, JSONC, themes, XDG paths, and session structures |
tide-services | Files, Git operations, and background syntax highlighting |
tide-terminal | Native PTY processes and terminal emulation |
tide-lsp | Language-server discovery, transport, and typed requests |
tide-db | PostgreSQL connections, schemas, queries, and result operations |
tide-ai | External CLI adapters, session discovery, and secret providers |
tide-tools | Typed tool operations and shared contracts |
One workbench, several surfaces
App coordinates input and asynchronous events. The UI owns a recursive main-pane tree, workspace and Agents sidebars, a bottom dock, overlays, and focus state. Files, diffs, SQL, shells, and agents share the pane and tab system.
A document can have multiple views while retaining one text revision and save state. Layout, rendering, and hit testing share terminal-cell geometry.
Rendering and input
Ratatui and Crossterm render workbench state into terminal cells. Ratatui emits changes between frames. Mouse targets are recorded from the same rectangles that draw controls, including tab actions, dividers, scrollbars, and dialog buttons.
Overlays receive input first. Workbench commands, focused terminal input, and local pane controls follow their contexts. Normal shell control keys remain available to hosted processes.
Documents and background work
Ropey backs UTF-8 documents. Editing and hit testing use grapheme and display-cell boundaries. Syntect supplies syntax highlighting from embedded grammars and theme-specific rules.
Bounded background workers parse document snapshots; results carry revisions so the UI can apply ready state. Language-server requests, workspace search, and provider discovery also return asynchronous events.
Native terminals
portable-pty owns child processes and alacritty_terminal parses their output. Viewport snapshots include cells, colors, cursor state, scrollback, screen buffers, and terminal modes.
Ordinary terminals and external coding agents use the same implementation. Provider adapters choose executable arguments and discover sessions; they do not alter terminal parsing or rendering.
Runtime catalogs
The runtime catalog joins command metadata, native dispatch, compatibility aliases, preferences, and alternate bindings. A pure exporter generates the keyboard, command, and configuration references without opening an app workspace or PTY.
Supported controls are distinct from settings preserved only for migration. The website's reference tables follow the generated runtime catalog.
Storage and installation
Configuration, data, state, and cache live in Tide's XDG roots. Rust sessions are separate from historical TypeScript writes. Provider-native histories remain provider-owned.
Managed installation verifies ownership, payload hashes, and modes before activation, and retains a previous release for rollback. PostgreSQL and secret services stay independent of workbench rendering.