v0.10.0

Rust Architecture

A native executable, a pane-based workbench, and focused Rust crates for editing, tools, and services.

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.

CrateResponsibility
tideCLI entry point, terminal lifecycle, and managed installation
tide-uiApp state, pane tree, dialogs, rendering, input routing, and session restoration
tide-coreRope-backed documents, edits, selections, undo, search, and folds
tide-configEmbedded defaults, JSONC, themes, XDG paths, and session structures
tide-servicesFiles, Git operations, and background syntax highlighting
tide-terminalNative PTY processes and terminal emulation
tide-lspLanguage-server discovery, transport, and typed requests
tide-dbPostgreSQL connections, schemas, queries, and result operations
tide-aiExternal CLI adapters, session discovery, and secret providers
tide-toolsTyped 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.

Build and contribute to Tide →