Deployment Shape
Component Architecture
The desktop app is composed of three main processes:Tauri Shell (Rust)
The outer shell that manages the native window, deep links (openlinear://), secure credential storage, and process lifecycle. It spawns the sidecar and renders the webview.
- Window: 1200x800, frameless (custom title bar)
- Deep links: Handles
openlinear://callbackfor OAuth flows - Sidecar management: Starts/stops the local API server
- Secure storage: System keychain integration for sensitive data
Desktop UI (Next.js Webview)
The user interface rendered inside the Tauri webview. A full Next.js application with:- App Router pages: Dashboard, Inbox, My Issues, Archived, Projects, Teams, Settings
- Kanban board with drag-and-drop via
@hello-pangea/dnd - Real-time updates via SSE from the sidecar
- Radix UI + shadcn/ui component library
Sidecar (Express API)
A local Express server bundled as a sidecar binary. It provides:- REST API for tasks, teams, projects, repos, labels, settings
- Execution engine — clones repos, creates branches, runs OpenCode agents
- Batch orchestration — parallel and queue execution modes
- SSE broadcasting — real-time events to the desktop UI
- Database access — PostgreSQL via Prisma
Repository Structure
Data Flow
User creates a task
Desktop UI sends
POST /api/tasks to the sidecar. Sidecar writes to PostgreSQL and broadcasts task:created via SSE.User executes a task
Desktop UI sends
POST /api/tasks/:id/execute. The sidecar clones the repository, creates a branch, and starts an OpenCode session.Agent writes code
OpenCode reads the task prompt, analyzes the codebase, writes code, and commits to the branch. Progress is streamed via SSE.
Release Channels
| Channel | Format | Platform |
|---|---|---|
| GitHub Releases | .dmg, .app.tar.gz, AppImage, .deb | macOS, Linux |
| npm | openlinear package | macOS, Linux |
| AUR | openlinear-bin | Arch Linux |
| curl | install.sh | macOS, Linux |
Security Model
- Local-first: All code execution happens on your machine
- No cloud sync of sensitive data: Tokens, API keys, logs, and diffs never leave your machine
- Forbidden sync fields: The validation layer strips sensitive fields before any network transmission
- JWT authentication: Session tokens with 7-day expiry, HS256 signing
- GitHub token storage: Stored in
~/.config/openlinear/github-auth.json, never transmitted to OpenLinear servers

