Skip to content

Platforms

Restura ships from a single React renderer to three targets. The user experience is identical; what differs is the network and storage capabilities the platform exposes.

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, SOCKS, or PAC scripting. Restura surfaces this as “Desktop only” badges on UI fields whose underlying capability isn’t available on the platform you’re using.

  • Kafka (produce / consume — needs raw TCP + SASL).
  • Socket.IO acks (requires a long-lived non-HTTP transport).
  • SSE custom headers (the browser EventSource API doesn’t expose headers).
  • MCP stdio transport (subprocesses can’t run in a browser).
  • mTLS client certificates — sign with a client cert.
  • SOCKS4 / SOCKS5 proxies.
  • PAC script resolution.
  • 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.

HTTP/REST, GraphQL, gRPC (unary + streaming over Connect / gRPC-Web), WebSocket, basic SSE, MCP over HTTP-SSE, Socket.IO basic emit/listen, collections, environments, workflows, scripts, encrypted local storage, the AI assistant, and the SSRF guard.

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.