One workspace. Every model. Never stop coding.
Relay is a desktop-native, AI-first coding environment that orchestrates browser-based LLMs (ChatGPT, Kimi, Qwen, Gemini, Claude, DeepSeek) without API keys — and when one model hits a rate limit, the Relay Handoff Protocol compacts the session into a portable Relay Packet and hands control to the next model.
Specs: Relay_PRD.md · Relay_Complete_Documentation.md
- AI Dock — every model embedded side-by-side in one window. Log in once; cookies persist across restarts. Provider pages have zero access to your machine (no IPC capability).
- Relay Handoff Protocol — rate-limit detection (multi-signal, passive) suggests relaying; the session context is compacted into a Relay Packet and pre-filled into the next model's input for you to review and send.
- Built-in browser preview — a first-class tab in the editor with mobile / tablet / desktop viewports, zoom, live reload on save, and an embedded live server for HTML projects.
- Real editor — Monaco with tabs, dirty tracking, diff preview before applying AI edits, markdown preview, project-wide search (Ctrl+Shift+F).
- PTY terminal — real shell via portable-pty + xterm.js with AI-suggested commands surfaced as one-click Run buttons (always user-confirmed).
- File bridge — the AI can propose file writes/edits; you review them in a diff and apply with one click. It never touches a file you didn't approve.
- Command palette (Ctrl+K), session restore, recent projects.
Installers for Windows, macOS and Linux are attached to Releases:
- Windows — run
Relay_*_x64-setup.exe(installs with Start Menu + desktop icon, no admin needed) or the.msifor enterprise deployment. A portablerelay.exeis also available. - macOS — open the
.dmgand drag Relay to Applications. - Linux —
.AppImage(run anywhere) or.deb.
Prerequisites: Node ≥ 20, Rust toolchain (rustup), and the platform webview
prereqs from Tauri v2 docs.
git clone https://github.com/Rohithdgrr/RELAY-PROJECT.git
cd RELAY-PROJECT
npm install
npm run tauri dev # run the full desktop app in dev mode
npm run tauri build # produce a release binary in src-tauri/target/release/Frontend-only mode (Tauri invoke calls will fail in a plain browser):
npm run devsrc-tauri/src/
lib.rs Tauri builder, command registry, provider webview launcher
types.rs PRD §9.1 data models (RelayPacket, SessionState, …)
relay.rs Relay Engine: session store + handoff orchestration
terminal.rs PTY manager (portable-pty) with scrollback capture
fs.rs File bridge: read/write, read-only patterns, backups, atomic writes
dock.rs Embedded provider webviews (multiwebview), scan + inject
preview.rs Embedded browser preview (child webview)
live_server.rs Static live server for HTML preview
src-tauri/preloads/relay-bridge.js provider bridge: scan, fill, rate-limit, rolling buffer
src-tauri/src/selectors.rs updateable selector registry (bundled defaults)
src/
relay/ types, provider registry, zustand store
components/ sidebar, editor, terminal, AI dock, browser preview, status bar
- PTY: docs listed
node-pty; v0.1 uses Rustportable-pty— the idiomatic Tauri choice, no Node sidecar. xterm.js on the frontend is unchanged. Recorded in both docs' changelogs. - Compliance stance (Complete Docs §8.5): Relay is assisted-only. The preload only observes the page; it never sends messages and never evades bot detection. Provider webviews have no Tauri capability, so a compromised provider page cannot reach IPC — enforced by configuration.
- Selector registry: provider DOM is volatile, so selectors ship in
~/.relay/selectors.json(written from bundled defaults on first run). Edit it when a provider reworks its markup and switch provider tabs — no app rebuild needed. A malformed file falls back to bundled defaults.
Issues and PRs are welcome! For big changes, open an issue first to discuss
the approach. Run npm run lint && npm run typecheck before submitting.
MIT — free to use, modify, and ship.