{"id":47183098,"url":"https://github.com/berbicanes/apiark","last_synced_at":"2026-04-01T18:58:00.879Z","repository":{"id":342137268,"uuid":"1172914445","full_name":"berbicanes/apiark","owner":"berbicanes","description":"Privacy-first API platform built with Tauri v2. No login, no cloud, ~60 MB RAM. A lightweight Postman alternative.","archived":false,"fork":false,"pushed_at":"2026-03-23T08:29:49.000Z","size":4735,"stargazers_count":816,"open_issues_count":11,"forks_count":43,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-03-24T01:02:34.259Z","etag":null,"topics":["api-client","desktop-app","developer-tools","rust","tauri","typescript"],"latest_commit_sha":null,"homepage":null,"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/berbicanes.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-04T20:27:53.000Z","updated_at":"2026-03-23T23:38:28.000Z","dependencies_parsed_at":"2026-03-16T02:04:00.699Z","dependency_job_id":null,"html_url":"https://github.com/berbicanes/apiark","commit_stats":null,"previous_names":["berbicanes/apiark"],"tags_count":45,"template":false,"template_full_name":null,"purl":"pkg:github/berbicanes/apiark","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/berbicanes%2Fapiark","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/berbicanes%2Fapiark/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/berbicanes%2Fapiark/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/berbicanes%2Fapiark/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/berbicanes","download_url":"https://codeload.github.com/berbicanes/apiark/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/berbicanes%2Fapiark/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31290983,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T13:12:26.723Z","status":"ssl_error","status_checked_at":"2026-04-01T13:12:25.102Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["api-client","desktop-app","developer-tools","rust","tauri","typescript"],"created_at":"2026-03-13T08:03:28.081Z","updated_at":"2026-04-01T18:58:00.868Z","avatar_url":"https://github.com/berbicanes.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"apps/desktop/src-tauri/icons/128x128@2x.png\" alt=\"ApiArk\" width=\"96\" height=\"96\" /\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eApiArk\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eThe API platform that respects your privacy, your RAM, and your Git workflow.\u003c/strong\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  No login. No cloud. No bloat.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cem\u003ePostman uses 800 MB of RAM. ApiArk uses 60 MB.\u003c/em\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/berbicanes/apiark/releases/latest\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/berbicanes/apiark?style=flat-square\u0026color=6366f1\" alt=\"Latest Release\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/berbicanes/apiark/releases/latest\"\u003e\u003cimg src=\"https://img.shields.io/github/downloads/berbicanes/apiark/total?style=flat-square\u0026color=22c55e\" alt=\"Downloads\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/berbicanes/apiark/stargazers\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/berbicanes/apiark?style=flat-square\u0026color=eab308\" alt=\"Stars\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/berbicanes/apiark/actions/workflows/ci.yml\"\u003e\u003cimg src=\"https://img.shields.io/github/actions/workflow/status/berbicanes/apiark/ci.yml?style=flat-square\u0026label=CI\" alt=\"CI\" /\u003e\u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/github/license/berbicanes/apiark?style=flat-square\" alt=\"MIT License\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#download\"\u003eDownload\u003c/a\u003e \u0026bull;\n  \u003ca href=\"#features\"\u003eFeatures\u003c/a\u003e \u0026bull;\n  \u003ca href=\"#switching-from-postman\"\u003eSwitching from Postman\u003c/a\u003e \u0026bull;\n  \u003ca href=\"#performance\"\u003ePerformance\u003c/a\u003e \u0026bull;\n  \u003ca href=\"#community\"\u003eCommunity\u003c/a\u003e \u0026bull;\n  \u003ca href=\"#development\"\u003eDevelopment\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"README.md\"\u003eEnglish\u003c/a\u003e \u0026bull;\n  \u003ca href=\"docs/readme/README_es.md\"\u003eEspa\u0026#241;ol\u003c/a\u003e \u0026bull;\n  \u003ca href=\"docs/readme/README_fr.md\"\u003eFran\u0026#231;ais\u003c/a\u003e \u0026bull;\n  \u003ca href=\"docs/readme/README_de.md\"\u003eDeutsch\u003c/a\u003e \u0026bull;\n  \u003ca href=\"docs/readme/README_pt.md\"\u003ePortugu\u0026#234;s\u003c/a\u003e \u0026bull;\n  \u003ca href=\"docs/readme/README_zh.md\"\u003e\u0026#20013;\u0026#25991;\u003c/a\u003e \u0026bull;\n  \u003ca href=\"docs/readme/README_ja.md\"\u003e\u0026#26085;\u0026#26412;\u0026#35486;\u003c/a\u003e \u0026bull;\n  \u003ca href=\"docs/readme/README_ko.md\"\u003e\u0026#54620;\u0026#44397;\u0026#50612;\u003c/a\u003e \u0026bull;\n  \u003ca href=\"docs/readme/README_ar.md\"\u003e\u0026#1575;\u0026#1604;\u0026#1593;\u0026#1585;\u0026#1576;\u0026#1610;\u0026#1577;\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/screenshots/rest-get.png\" alt=\"ApiArk — REST GET Request\" width=\"800\" /\u003e\n\u003c/p\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eMore screenshots\u003c/strong\u003e\u003c/summary\u003e\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003ePOST Request\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003eGraphQL\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cimg src=\"docs/screenshots/rest-post.png\" alt=\"POST Request\" width=\"400\" /\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"docs/screenshots/graphql.png\" alt=\"GraphQL\" width=\"400\" /\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eWebSocket\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003eServer-Sent Events\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cimg src=\"docs/screenshots/websocket.png\" alt=\"WebSocket\" width=\"400\" /\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"docs/screenshots/sse.png\" alt=\"SSE\" width=\"400\" /\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003ePUT Request\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003ePATCH Request\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cimg src=\"docs/screenshots/rest-put.png\" alt=\"PUT Request\" width=\"400\" /\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"docs/screenshots/rest-patch-title.png\" alt=\"PATCH Request\" width=\"400\" /\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eDELETE Request\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cimg src=\"docs/screenshots/rest-delete.png\" alt=\"DELETE Request\" width=\"400\" /\u003e\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n\u003c/details\u003e\n\n## Why ApiArk?\n\n| | Postman | Bruno | Hoppscotch | **ApiArk** |\n|---|---|---|---|---|\n| **Framework** | Electron | Electron | Tauri | **Tauri v2** |\n| **RAM Usage** | 300-800 MB | 150-300 MB | 50-80 MB | **~60 MB** |\n| **Startup** | 10-30s | 3-8s | \u003c2s | **\u003c2s** |\n| **Account Required** | Yes | No | Optional | **No** |\n| **Data Storage** | Cloud | Filesystem | IndexedDB | **Filesystem (YAML)** |\n| **Git-Friendly** | No | Yes (.bru) | No | **Yes (standard YAML)** |\n| **gRPC** | Yes | Yes | No | **Yes** |\n| **WebSocket** | Yes | No | Yes | **Yes** |\n| **SSE** | Yes | No | Yes | **Yes** |\n| **MQTT** | No | No | No | **Yes** |\n| **Mock Servers** | Cloud only | No | No | **Local** |\n| **Monitors** | Cloud only | No | No | **Local** |\n| **Plugin System** | No | No | No | **JS + WASM** |\n| **Proxy Capture** | No | No | No | **Yes** |\n| **Response Diff** | No | No | No | **Yes** |\n\n## Download\n\n**[Latest Release](https://github.com/berbicanes/apiark/releases/latest)**\n\n| Platform | Download |\n|----------|----------|\n| **Windows** | [`.exe` installer](https://github.com/berbicanes/apiark/releases/latest) \u0026bull; [`.msi`](https://github.com/berbicanes/apiark/releases/latest) |\n| **macOS** | [Apple Silicon `.dmg`](https://github.com/berbicanes/apiark/releases/latest) \u0026bull; [Intel `.dmg`](https://github.com/berbicanes/apiark/releases/latest) |\n| **Linux** | [`.AppImage`](https://github.com/berbicanes/apiark/releases/latest) \u0026bull; [`.deb`](https://github.com/berbicanes/apiark/releases/latest) \u0026bull; [`.rpm`](https://github.com/berbicanes/apiark/releases/latest) |\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003ePackage managers\u003c/strong\u003e\u003c/summary\u003e\n\n```bash\n# Homebrew (macOS)\nbrew tap berbicanes/apiark\nbrew install --cask apiark\n\n# Scoop (Windows)\nscoop bucket add apiark https://github.com/berbicanes/apiark\nscoop install apiark\n\n# APT (Debian/Ubuntu)\ncurl -fsSL https://berbicanes.github.io/apiark-apt/install.sh | sudo bash\nsudo apt install apiark\n```\n\nAlso available on the [Microsoft Store](https://apps.microsoft.com/search?query=ApiArk).\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eBuild from source\u003c/strong\u003e\u003c/summary\u003e\n\n**Prerequisites:** Node.js 22+, pnpm 10+, Rust toolchain, [Tauri v2 system deps](https://v2.tauri.app/start/prerequisites/)\n\n```bash\ngit clone https://github.com/berbicanes/apiark.git\ncd apiark\npnpm install\npnpm tauri build\n```\n\u003c/details\u003e\n\n## Switching from Postman\n\n1. Export your Postman collection (Collection v2.1 JSON)\n2. Open ApiArk\n3. `Ctrl+K` \u003e \"Import Collection\" \u003e select your file\n4. Done. Your requests are now YAML files you own.\n\nAlso imports from: **Insomnia**, **Bruno**, **Hoppscotch**, **OpenAPI 3.x**, **HAR**, **cURL**.\n\n## Features\n\n**Multi-Protocol** — REST, GraphQL, gRPC, WebSocket, SSE, MQTT, Socket.IO in one app. No tool has broader protocol coverage.\n\n**Local-First Storage** — Every request is a `.yaml` file. Collections are directories. Everything is git-diffable. No proprietary formats.\n\n**Dark Mode + Themes** — Dark, Light, Black/OLED themes with 8 accent colors.\n\n**TypeScript Scripting** — Pre/post-request scripts with full type definitions. `ark.test()`, `ark.expect()`, `ark.env.set()`.\n\n**Collection Runner** — Run entire collections with data-driven testing (CSV/JSON), configurable iterations, JUnit/HTML reports.\n\n**Local Mock Servers** — Create mock APIs from your collections. Faker.js data, latency simulation, error injection. No cloud, no usage limits.\n\n**Scheduled Monitoring** — Cron-based automated testing with desktop notifications and webhook alerts. Runs locally, not on someone else's server.\n\n**API Docs Generation** — Generate HTML + Markdown documentation from your collections.\n\n**OpenAPI Editor** — Edit and lint OpenAPI specs with Spectral integration.\n\n**Response Diff** — Compare responses side-by-side across runs.\n\n**Proxy Capture** — Local intercepting HTTP/HTTPS proxy for traffic inspection and replay.\n\n**AI Assistant** — Natural language to requests, auto-generate tests, OpenAI-compatible API.\n\n**Plugin System** — Extend ApiArk with JavaScript or WASM plugins.\n\n**Import Everything** — Postman, Insomnia, Bruno, Hoppscotch, OpenAPI, HAR, cURL. One-click migration.\n\n## Performance\n\nBuilt with Tauri v2 (Rust backend + native OS webview), not Electron.\n\n| Metric | Target |\n|---|---|\n| Binary size | ~20 MB |\n| RAM at idle | ~60 MB |\n| Cold startup | \u003c2s |\n| Request send latency | \u003c10ms overhead |\n\n## Data Format\n\nYour data is plain YAML. No lock-in. No proprietary encoding.\n\n```yaml\n# users/create-user.yaml\nname: Create User\nmethod: POST\nurl: \"{{baseUrl}}/api/users\"\n\nheaders:\n  Content-Type: application/json\n\nauth:\n  type: bearer\n  token: \"{{adminToken}}\"\n\nbody:\n  type: json\n  content: |\n    {\n      \"name\": \"{{userName}}\",\n      \"email\": \"{{userEmail}}\"\n    }\n\nassert:\n  status: 201\n  body.id: { type: string }\n  responseTime: { lt: 2000 }\n\ntests: |\n  ark.test(\"should return created user\", () =\u003e {\n    const body = ark.response.json();\n    ark.expect(body).to.have.property(\"id\");\n  });\n```\n\n## CLI\n\n```bash\n# Run a collection\napiark run ./my-collection --env production\n\n# With data-driven testing\napiark run ./my-collection --data users.csv --reporter junit\n\n# Import a Postman collection\napiark import postman-export.json\n```\n\n## No Lock-In Pledge\n\n\u003e If you decide to leave ApiArk, your data leaves with you. Every file is a standard format. Every database is open. We will never make it hard to switch away.\n\n## Community\n\n- [GitHub Discussions](https://github.com/berbicanes/apiark/discussions) — Ideas, Q\u0026A, show \u0026 tell\n- [GitHub Issues](https://github.com/berbicanes/apiark/issues) — Bug reports and feature requests\n\n## Translations\n\nApiArk UI supports internationalization via `react-i18next`. Currently available in **English**.\n\nHelp us translate ApiArk into your language! See the [`locales/`](apps/desktop/src/locales/) directory and submit a PR.\n\n## Development\n\n```bash\n# Install dependencies\npnpm install\n\n# Run in development mode\npnpm tauri dev\n\n# TypeScript check\npnpm -C apps/desktop exec tsc --noEmit\n\n# Build for production\npnpm tauri build\n```\n\n### Project Structure\n\n```\napiark/\n├── apps/\n│   ├── desktop/           # Tauri v2 desktop app\n│   │   ├── src/           # React frontend\n│   │   └── src-tauri/     # Rust backend\n│   ├── cli/               # CLI tool (Rust)\n│   ├── mcp-server/        # MCP server for AI editors\n│   └── vscode-extension/  # VS Code extension\n├── packages/\n│   ├── types/             # Shared TypeScript types\n│   └── importer/          # Collection importers\n└── docs/                  # Documentation and legal\n```\n\n### Tech Stack\n\n**Frontend:** React 19, TypeScript, Vite 6, Zustand, Tailwind CSS 4, Monaco Editor, Radix UI\n\n**Backend:** Rust, Tauri v2, reqwest, tokio, tonic (gRPC), axum (mock servers), deno_core (scripting)\n\n## Contributing\n\nContributions are welcome! Check out the [GitHub Issues](https://github.com/berbicanes/apiark/issues) for open tasks and feature requests.\n\n\u003ca href=\"https://github.com/berbicanes/apiark/graphs/contributors\"\u003e\n  \u003cimg src=\"https://contrib.rocks/image?repo=berbicanes/apiark\" alt=\"Contributors\" /\u003e\n\u003c/a\u003e\n\n## License\n\n[MIT](LICENSE)\n\n---\n\n\u003cp align=\"center\"\u003e\n  \u003csub\u003eIf ApiArk helps your workflow, consider giving it a star. It helps others discover the project.\u003c/sub\u003e\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fberbicanes%2Fapiark","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fberbicanes%2Fapiark","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fberbicanes%2Fapiark/lists"}