{"id":50692352,"url":"https://github.com/andrewmmc/roshi","last_synced_at":"2026-06-09T04:08:17.501Z","repository":{"id":353182244,"uuid":"1177096448","full_name":"andrewmmc/roshi","owner":"andrewmmc","description":"A Postman-like API testing tool — built specifically for LLM APIs.","archived":false,"fork":false,"pushed_at":"2026-06-06T18:07:13.000Z","size":6968,"stargazers_count":0,"open_issues_count":3,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-06-06T18:13:38.322Z","etag":null,"topics":["ai","claude","codex","gemini","gpt","openai","openrouter","postman"],"latest_commit_sha":null,"homepage":"https://roshi.mmc.dev","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/andrewmmc.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null},"funding":{"github":["andrewmmc"]}},"created_at":"2026-03-09T17:32:23.000Z","updated_at":"2026-06-06T18:07:17.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/andrewmmc/roshi","commit_stats":null,"previous_names":["andrewmmc/roshi"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/andrewmmc/roshi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrewmmc%2Froshi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrewmmc%2Froshi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrewmmc%2Froshi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrewmmc%2Froshi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andrewmmc","download_url":"https://codeload.github.com/andrewmmc/roshi/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrewmmc%2Froshi/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34090885,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-09T02:00:06.510Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","claude","codex","gemini","gpt","openai","openrouter","postman"],"created_at":"2026-06-09T04:08:16.600Z","updated_at":"2026-06-09T04:08:17.494Z","avatar_url":"https://github.com/andrewmmc.png","language":"TypeScript","funding_links":["https://github.com/sponsors/andrewmmc"],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./assets/roshi-logo.png\" alt=\"Roshi logo\" width=\"128\" /\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eRoshi\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eMIT-licensed, local-first API workbench for LLM developers.\u003c/strong\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  Test OpenAI, Anthropic, OpenRouter, Google Gemini, and custom OpenAI-compatible endpoints with real-time streaming, local history, image inputs, and raw payload inspection.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/andrewmmc/roshi/actions/workflows/ci.yml\"\u003e\n    \u003cimg alt=\"CI\" src=\"https://github.com/andrewmmc/roshi/actions/workflows/ci.yml/badge.svg\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/andrewmmc/roshi/releases/latest\"\u003e\n    \u003cimg alt=\"Latest release\" src=\"https://img.shields.io/github/v/release/andrewmmc/roshi?display_name=release\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"./LICENSE\"\u003e\n    \u003cimg alt=\"License: MIT\" src=\"https://img.shields.io/github/license/andrewmmc/roshi\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\nRoshi is a local-first workspace for testing and debugging LLM APIs. Send prompts, inspect streaming responses, tune model settings, test image inputs, switch between providers, and review raw request and response payloads from one focused interface.\n\nNo backend. No account. No telemetry. Your API keys, settings, and request history stay on your machine.\n\nWhether you are debugging prompts, testing custom endpoints, or comparing model behavior, Roshi gives you a dedicated workspace for multi-turn conversations, provider-specific settings, and fast iteration without bending a generic API client into shape.\n\n## Why Roshi\n\n- **Purpose-built for LLM APIs** — test chat-style payloads, streaming, image inputs, and provider-specific settings without forcing them into a generic HTTP client\n- **Local-first by default** — no backend, no signup, no telemetry, and no hosted key storage\n- **Multi-provider workflow** — built-in templates for OpenAI, Anthropic, Google Gemini, and OpenRouter, plus custom OpenAI-compatible endpoints\n- **Debuggable and reproducible** — inspect raw payloads, save local history, and generate Python and Node.js snippets for supported OpenAI-compatible requests\n\n## Screenshots\n\nReal views from the actual app, so you can quickly see how Roshi feels before you download it.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./assets/screenshot-1.png\" alt=\"Roshi composer view\" width=\"92%\" /\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eCompose and iterate fast\u003c/strong\u003e\u003cbr /\u003e\n  Build multi-turn requests, tune model parameters, and attach images in one focused workspace.\n\u003c/p\u003e\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd width=\"50%\" valign=\"top\"\u003e\n      \u003cimg src=\"./assets/screenshot-2.png\" alt=\"Roshi response inspection view\" /\u003e\n      \u003cp\u003e\n        \u003cstrong\u003eInspect responses deeply\u003c/strong\u003e\u003cbr /\u003e\n        Review streamed output, raw payloads, and generated code while iterating on requests.\n      \u003c/p\u003e\n    \u003c/td\u003e\n    \u003ctd width=\"50%\" valign=\"top\"\u003e\n      \u003cimg src=\"./assets/screenshot-3.png\" alt=\"Roshi provider and history view\" /\u003e\n      \u003cp\u003e\n        \u003cstrong\u003eOrganize providers and history\u003c/strong\u003e\u003cbr /\u003e\n        Manage models, headers, provider setups, and local request history from one place.\n      \u003c/p\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n## Download\n\n**[Download on the Mac App Store](https://apps.apple.com/us/app/roshi-llm-api-workbench/id6761768847)**\n\u0026nbsp;\u0026nbsp;·\u0026nbsp;\u0026nbsp;\n**[Download the latest release](https://github.com/andrewmmc/roshi/releases/latest)** (free, manual updates)\n\nmacOS builds are available for both Apple Silicon (M1+) and Intel.\n\n### Mac App Store (recommended)\n\nThe Mac App Store version is a one-time purchase that includes automatic updates and supports ongoing development. Click **[Download on the Mac App Store](https://apps.apple.com/us/app/roshi-llm-api-workbench/id6761768847)** to get it.\n\n### Manual install (free, GitHub releases)\n\n1. Download the `.dmg` file from the [releases page](https://github.com/andrewmmc/roshi/releases/latest) for your architecture (Apple Silicon or Intel).\n2. Open the `.dmg` and drag **Roshi** to your **Applications** folder.\n3. On first launch, macOS may block the app. Go to **System Settings → Privacy \u0026 Security** and click **Open Anyway**.\n4. Add your API key for any provider in the app and start testing.\n\n\u003e You can also use Roshi as a [web app](#development) in the browser — no install required.\n\n## Features\n\n- **Multi-provider support** — built-in templates for OpenAI, Anthropic, Google Gemini, and OpenRouter; add custom providers for any OpenAI-compatible endpoint\n- **Real-time streaming** — SSE streaming with live token output\n- **Multi-turn conversations** — build and test full chat sessions with role-based message composer\n- **Request history** — every request and response stored locally with search and filtering\n- **Code snippets** — auto-generated Python and Node.js snippets for supported OpenAI-compatible requests\n- **Image attachments** — test vision models with base64-encoded image inputs\n- **Advanced parameters** — temperature, top-p, frequency/presence penalty, max tokens, custom headers, system prompt\n- **Dark mode** — toggle between light and dark themes\n- **Open source and fully client-side** — MIT licensed, no backend, no telemetry; API keys are stored locally and never transmitted\n\n## Why Developers Can Trust It\n\n- **Open source under MIT** — the code and license are straightforward to inspect, use, and contribute to\n- **Privacy-first architecture** — provider keys, settings, and history are stored locally in the app instead of routed through a Roshi service\n- **Verified in CI** — every push and pull request runs lint, format checks, tests, and a production build in [CI](https://github.com/andrewmmc/roshi/actions/workflows/ci.yml)\n- **No hidden hosted dependency** — the desktop app calls provider APIs directly, and the browser workflow remains client-side for development\n\n## Development\n\n\u003e **Note:** This section is for contributors and developers only. If you just want to use Roshi, [download the app](#download) instead.\n\n### Prerequisites\n\n- Node.js 20+\n- [Rust](https://www.rust-lang.org/tools/install) (for Tauri desktop builds)\n\n### Quick start\n\n```bash\nnpm install\nnpm run dev          # http://localhost:5173\n```\n\n### Commands\n\n```bash\nnpm run build        # production build\nnpm run test         # run tests\nnpm run lint         # ESLint\nnpm run typecheck    # TypeScript check\nnpm run format       # Prettier\nnpm run tauri:dev    # desktop app (dev)\nnpm run tauri:build  # desktop app (release)\n```\n\n### Tech stack\n\nReact 19, TypeScript, Vite 7, Tailwind CSS v4, shadcn/ui v4, Zustand, Dexie.js (IndexedDB), eventsource-parser (SSE), Tauri 2 (desktop), Vitest (testing).\n\nSee **[AGENTS.md](./AGENTS.md)** for architecture, conventions, and contributor docs.\n\n## Contributing\n\nIssues and pull requests are welcome. If you want to propose a feature, report a bug, or improve a provider workflow, start with [GitHub issues](https://github.com/andrewmmc/roshi/issues) and include enough context to reproduce the behavior.\n\n## Author\n\nCreated by **Andrew Mok** ([@andrewmmc](https://github.com/andrewmmc))\n\n## Disclaimer\n\nRoshi is an independent, open-source project. It is not affiliated with, endorsed by, or sponsored by Postman, Inc. \"Postman\" is a trademark of Postman, Inc. References to Postman are for descriptive purposes only.\n\n## License\n\n[MIT License](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandrewmmc%2Froshi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandrewmmc%2Froshi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandrewmmc%2Froshi/lists"}