{
  "markdown": "<div align=\"center\">\n\n<img src=\".github/assets/banner.svg\" alt=\"Restura — a private, multi-protocol API client\" width=\"100%\">\n\n# Restura\n\n**One local-first API client for HTTP, GraphQL, gRPC, WebSocket, Kafka, MQTT, MCP, and more.**\n\n[![CI](https://img.shields.io/github/actions/workflow/status/dipjyotimetia/restura/ci.yml?style=flat-square&label=CI&labelColor=14121F&color=2E91FF)](https://github.com/dipjyotimetia/restura/actions/workflows/ci.yml)\n[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/dipjyotimetia/restura/badge?style=flat-square)](https://securityscorecards.dev/viewer/?uri=github.com/dipjyotimetia/restura)\n[![Release](https://img.shields.io/github/v/release/dipjyotimetia/restura?style=flat-square&label=release&labelColor=14121F&color=2E91FF)](https://github.com/dipjyotimetia/restura/releases/latest)\n[![License](https://img.shields.io/badge/license-MIT-2E91FF?style=flat-square&labelColor=14121F)](LICENSE)\n[![Node](https://img.shields.io/badge/node-%E2%89%A524-2E91FF?style=flat-square&labelColor=14121F)](https://nodejs.org)\n[![TypeScript](https://img.shields.io/badge/TypeScript-strict-2E91FF?style=flat-square&labelColor=14121F)](https://www.typescriptlang.org)\n\n[![Try the web app](https://img.shields.io/badge/Try_the_web_app-2E91FF?style=for-the-badge&logo=cloudflare&logoColor=white)](https://restura.dev/)\n&nbsp;\n[![Download desktop](https://img.shields.io/badge/Download_desktop-14121F?style=for-the-badge&logo=electron&logoColor=white)](https://github.com/dipjyotimetia/restura/releases/latest)\n&nbsp;\n<a href=\"https://docs.restura.dev/\" target=\"_blank\" rel=\"noopener noreferrer\"><img src=\"https://img.shields.io/badge/Read_the_docs-14121F?style=for-the-badge&logo=readthedocs&logoColor=white\" alt=\"Documentation\"></a>\n\n</div>\n\nRestura lets you debug an HTTP API, inspect a gRPC service, keep a WebSocket transcript, and work with Kafka or MQTT without switching tools—or surrendering your collections to a hosted account. Run it in your browser, as a native desktop app for macOS, Windows, and Linux, or self-host it in Docker behind your firewall.\n\nNo account. No cloud sync. Your collections, history, and environments stay in local browser storage or encrypted desktop storage; optional crash reporting is scrubbed and can be disabled. Native networking and AI features are deliberately desktop-only where browser security boundaries make them impossible.\n\n> **Try it your way:** [open the web app](https://restura.dev/) for HTTP-first workflows, [download desktop](https://github.com/dipjyotimetia/restura/releases/latest) for native protocols and OS-backed secrets, or [self-host with Docker](docs/SELF_HOSTING.md) for a controlled deployment.\n\n## Everything your API stack speaks\n\n| Protocol | What works today | Platform |\n| --- | --- | --- |\n| **REST / HTTP** | All methods, params, headers, body types, cookies, code generation | Web · Desktop |\n| **GraphQL** | Query builder, schema introspection, subscriptions | Web · Desktop |\n| **gRPC** | Unary calls, server streaming, reflection; native client/bidi streaming | Web · Desktop¹ |\n| **WebSocket** | Connect, send/receive, full message history | Web · Desktop |\n| **Socket.IO** | Connect, emit/listen events, acknowledgements | Web · Desktop |\n| **SSE** | Live event-stream viewer with reconnection | Web · Desktop |\n| **Kafka** | Produce, consume, transactions, admin, SASL/OAuth, TLS | Desktop |\n| **MQTT** | Publish/subscribe, QoS, TLS | Desktop |\n| **MCP** | Connect to MCP servers—or expose Restura as one | Web · Desktop² |\n\n¹ Web supports unary and server-streaming gRPC; client and bidirectional streaming require desktop. ² Web supports streamable HTTP; HTTP-SSE transport requires desktop. See the [capability matrix](docs/CAPABILITY_MATRIX.md) for the complete, generated platform breakdown.\n\n## Why developers choose Restura\n\n| | |\n| --- | --- |\n| **Bring your existing work** | Import Postman v2.1, Insomnia, OpenAPI 3.x / Swagger 2.0, Hoppscotch, and Bruno collections. Export when you need to move on. |\n| **Reuse requests safely** | Organise collections and environments; inherit auth; switch `{{base_url}}` between staging and production without copying requests. |\n| **Automate without a fragile script runner** | Run pre-request and test scripts in a bounded QuickJS WASM sandbox with no DOM, filesystem, or network access. Build portable workflows from saved HTTP and GraphQL requests. |\n| **Keep authentication close to the wire** | Configure Basic, Bearer, API Key, Digest, NTLM, OAuth 1.0a/2.0, WSSE, AWS SigV4, and more. Desktop also supports mTLS, custom CAs, and SOCKS. |\n| **Work with AI on sensitive requests** | Desktop AI chat and AI Lab use request context with secrets and internal URLs redacted before provider calls. Evaluate prompts, models, and bounded agent suites locally. |\n| **Use MCP in both directions** | Inspect MCP server traffic as a client, or expose permitted Restura collections through Restura’s MCP server mode. |\n\n## Start in the right place\n\n### Web app\n\nOpen [restura.dev](https://restura.dev/) to send HTTP, GraphQL, WebSocket, SSE, and supported gRPC/MCP requests immediately. Browser capabilities are intentionally constrained; consult the [capability matrix](docs/CAPABILITY_MATRIX.md) before relying on native networking features.\n\n### Develop locally\n\n**Prerequisites:** Node.js 24+ and npm.\n\n```bash\ngit clone https://github.com/dipjyotimetia/restura.git\ncd restura\nnpm ci\nnpm run dev # http://localhost:5173\n```\n\nThis starts the Vite app and its local Cloudflare Worker proxy through Miniflare.\n\n### Desktop app\n\nGet prebuilt installers from the [latest release](https://github.com/dipjyotimetia/restura/releases/latest), or build from source:\n\n```bash\nnpm run electron:dev              # development with live reload\nnpm run electron:dist:mac         # macOS: DMG + ZIP\nnpm run electron:dist:win         # Windows: NSIS + portable\nnpm run electron:dist:linux       # Linux: AppImage + deb + rpm\n```\n\nDesktop is the right target for Kafka, MQTT, native gRPC streaming, filesystem/Git collections, OS-keychain secret handles, mTLS, custom CAs, SOCKS, and all AI surfaces.\n\n### Self-host with Docker\n\nRun the web application in one Node container; no Cloudflare account is required.\n\n```bash\ncp .env.example .env # set WORKER_PROXY_TOKEN and ALLOWED_ORIGIN\ndocker compose up -d --build\ncurl -fs http://localhost:3000/health\n```\n\nRead [Self-hosting](docs/SELF_HOSTING.md) before deploying: it covers authentication modes, reverse-proxy configuration, internal-network access, rate limits, and health checks.\n\n## Built to keep request data under your control\n\n- **Local persistence with clear boundaries.** Browser data lives in local IndexedDB. On desktop, encrypted storage is backed by Electron `safeStorage` and the OS keychain; secret handles keep plaintext out of the renderer where supported.\n- **Outbound-request protection.** Shared SSRF validation blocks private, link-local, and cloud-metadata targets by default. Desktop adds DNS-rebind protection; self-hosted deployments can explicitly enable private-network access when needed.\n- **Wire-accurate signing.** AWS SigV4 is signed in the Worker or Electron handler, not the renderer, so the upstream receives the exact signed bytes.\n- **Sandboxed user code.** Pre-request and test scripts run with time and memory limits and have no host bridge.\n- **Transparent telemetry.** Error reporting is opt-out and can be disabled in **Settings → Privacy**. It excludes request URLs, headers, bodies, secrets, and identity. Self-hosted deployments collect no usage analytics.\n\nRead the [security architecture](docs/adr/0004-security-hardening.md), [privacy and telemetry decision](docs/adr/0027-telemetry-and-privacy-preserving-usage-analytics.md), and [capability matrix](docs/CAPABILITY_MATRIX.md) for the full model and platform caveats.\n\n## One renderer, three targets\n\nThe React SPA runs as a web app, a self-hosted Node/Docker service, and an Electron desktop application. Its transport changes by target; its protocol core does not.\n\n```text\nReact SPA\n  ├─ Web: Cloudflare Worker (Hono) → target API or service\n  ├─ Self-hosted: Node/Hono server → target API or service\n  └─ Desktop: Electron IPC → native protocol handlers → target API or service\n```\n\n`shared/protocol/` owns request construction, header policy, response shaping, and SSRF validation. Worker and Electron handlers supply the transport-specific adapters. See [Architecture](docs/ARCHITECTURE.md) for the details.\n\n<details>\n<summary><strong>Project layout</strong></summary>\n\n```text\nsrc/features/          # protocol UI, collections, scripts, workflows, AI\nshared/protocol/       # backend-agnostic protocol orchestrators\nworker/                # Cloudflare Worker and self-hosted Node/Hono app\nelectron/main/         # desktop IPC, native handlers, secure storage\nextension/             # Chrome capture and VS Code extensions\ncli/                   # collection and workflow automation for CI\ndocs/                  # architecture, operations, security, and guides\n```\n\n</details>\n\n## Development and contributing\n\n```bash\nnpm run dev              # web development server\nnpm run validate         # static checks, tests, and builds\nnpm run test:run         # Vitest once\nnpm run test:coverage    # coverage report\nnpm run type-check:all   # renderer, Worker, Electron, CLI, extensions\nnpm run lint             # Biome lint\nnpm run format:check     # formatting check\n```\n\nContributions across protocol support, bugs, security, docs, and UX are welcome. Read [CONTRIBUTING.md](CONTRIBUTING.md) for setup and conventions; use a [good first issue](https://github.com/dipjyotimetia/restura/labels/good%20first%20issue) to get started. For a new protocol or a larger change, open an issue first so the design can be discussed.\n\n## Explore further\n\n- [Documentation](https://docs.restura.dev/) — installation, protocol guides, and references\n- [Capability matrix](docs/CAPABILITY_MATRIX.md) — precise web-versus-desktop support\n- [AI Lab](https://docs.restura.dev/guides/ai-lab/) — desktop model evaluation and agent-suite testing\n- [Architecture](docs/ARCHITECTURE.md) — shared protocol core, transport boundaries, and security model\n- [Self-hosting](docs/SELF_HOSTING.md) — Docker, auth, reverse proxies, and operations\n- [Roadmap](docs/ROADMAP.md) and [changelog](docs/CHANGELOG.md) — planned and shipped work\n- [Security policy](SECURITY.md) — responsible disclosure\n- [Browser extension](extension/chrome/README.md) — capture browser traffic into a collection\n- [VS Code extension](extension/vscode/README.md) — OpenCollection validation, Test Explorer, and inline send\n\n<div align=\"center\">\n\n**MIT License** · Hosted on Cloudflare Pages · Made by [dipjyotimetia](https://github.com/dipjyotimetia)\n\n<sub>If Restura saves you a context-switch, a ⭐ helps other developers find it.</sub>\n\n</div>\n",
  "bytes": 10904,
  "sha": "ca015b21c682440fba1e29d907a17d2fa7d62bf3c09a15a06a3da9e558a59ff3",
  "repo_slug": "dipjyotimetia/restura",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/okf_dipjyotimetia_restura_openwiki_index_md_64e599c0/readme"
}