Skip to content

Platforms

Restura ships from a single React renderer to three targets. The workspace and request model are shared; network, storage, and native capabilities differ where the platform requires it.

TargetHow it runsWhere data lives
WebSPA on Cloudflare Pages, requests proxied through a Cloudflare Worker on api.restura.dev.IndexedDB (browser).
DesktopElectron app on macOS / Windows / Linux. Requests sent directly from the main process.Encrypted electron-store, key wrapped by the OS keychain.
Self-hostedSingle Node container that serves both the SPA and the API proxy on one port.IndexedDB (browser); the server is stateless.

The browser sandbox can’t expose raw TCP, custom CAs, or SOCKS. Restura surfaces this as “Desktop only” badges on UI fields whose underlying capability isn’t available on the platform you’re using. PAC proxy scripts are not yet wired end to end on either target.

  • Kafka (produce / consume — needs raw TCP + SASL).
  • MQTT (publish / subscribe — needs raw TCP/TLS).
  • WebSocket custom handshake headers (the browser WebSocket API can’t set upgrade headers).
  • MCP http-sse transport (rejected in web mode; use streamable-http on web).
  • mTLS client certificates — sign with a client cert.
  • SOCKS4 / SOCKS5 proxies.
  • Custom CA bundle / disable TLS verification.
  • Pre-flight DNS guard against DNS-rebind (Electron net.lookup integration).
  • Filesystem-backed collections + git operations on a workspace.
  • OS keychain storage for encryption keys (via safeStorage).
  • Local mock HTTP server, system tray, native notifications.
  • AI assistant — request-aware chat (Electron-first, streams over IPC; no Worker /api/ai route).
  • AI Lab — prompt/model testing workbench with dataset evals, agent suites, and LLM-as-judge, against local and cloud models.

HTTP/REST, GraphQL, gRPC (unary + streaming over the Connect protocol), WebSocket, basic SSE, MCP over streamable-HTTP, Socket.IO emit / listen / ack, collections, environments, workflows, scripts, persistent local storage, and the SSRF guard. Web persistence is plaintext IndexedDB; OS-keychain-backed encryption is desktop-only.

On web, the SPA fetches /api/* on the same origin, which hits a Cloudflare Worker that performs SSRF validation, applies the auth signing, and forwards to the upstream. This avoids CORS friction and gives a uniform fetch surface.

On desktop, the renderer talks to the Electron main process over a context-isolated IPC bridge (window.electron), and the main process executes the request directly with Node’s http / https / net / tls — so all the capabilities above are available.

On self-hosted, the same Hono app that runs in the Worker runs in a Node process via worker/node-entry.ts. One process serves both the SPA and /api/* on one port.

All three paths share the same protocol cores in shared/protocol/ — see Architecture / Shared protocol layer.

  • Just exploring an API? Use the web app.
  • Need Kafka, mTLS, custom CAs, SOCKS proxies, or proper DNS-rebind protection? Download the desktop app.
  • Want to run it inside your VPC behind your reverse proxy? Use the Docker image.