Tauri + React app for running multiple terminal panes alongside a Git-focused sidebar (status, branches, commits, stashes, remotes, worktrees, diffs). The same UI is also packaged as a VS Code extension that talks to the Rust backend over WebSocket.
src/— React + Vite UI. Storybook stories live insrc/stories.src-tauri/— Tauri backend for PTY sessions, Git operations, and the WebSocket server mode used by the extension.vscode-extension/— VS Code extension + webview bundle (built bynpm run frontend:build:vscode).ai-elements-fork/— vendored ACP/AI Elements reference UI used by Storybook reference stories.
- Install deps:
npm install - Run Tauri app:
npm run tauri dev - Run in browser (Tauri mocked):
npm run dev:browser - Storybook:
npm run storybook - Build frontend:
npm run build - Build Tauri bundle:
npm run tauri build - Build Storybook:
npm run build-storybook
- Build webview assets:
npm run frontend:build:vscode - Compile extension:
npm --prefix vscode-extension run compile - Package with bundled backend:
npm run extension:package:mac-arm64ornpm run extension:package:win-x64 - Use an external backend by setting
PARALLEL_CLI_RUNNER_WS_URLandPARALLEL_CLI_RUNNER_AUTH_TOKEN
- Git data is read directly from local repositories; no extra metadata is stored outside the repos themselves.
- Worktrees are standard git worktrees created/removed via the sidebar actions.
- Terminal panes are backed by PTY sessions managed in the Rust backend.
TypeScript types for Rust DTOs are automatically generated using the ts-rs crate. This ensures type safety between the Rust backend and TypeScript frontend.
When you modify Rust DTOs in src-tauri/src/git/types.rs, you need to regenerate the corresponding TypeScript types:
# Using cargo alias (recommended)
cargo export-types
# Or using the full command
cargo run --bin export_types --manifest-path src-tauri/Cargo.tomlTo check if TypeScript types are up to date without regenerating:
# Using cargo alias (recommended)
cargo check-types
# Or using the full command
cargo test --manifest-path src-tauri/Cargo.toml types_are_syncedsrc/types/git.ts— Auto-generated from Rust DTOs. Do not edit manually.src/types/git-ui.ts— UI-layer types. Manually maintained, separate from DTOs.
A GitHub Actions workflow (.github/workflows/type-safety.yml) automatically verifies that types are in sync when:
src-tauri/src/git/types.rschangessrc-tauri/src/export_types.rschangessrc/types/git.tschanges