The API platform that respects your privacy, your RAM, and your Git workflow.
No login. No cloud. No bloat.
Postman uses 800 MB of RAM. ApiArk uses 60 MB.
Download • Features • Switching from Postman • Performance • Community • Development
English • Español • Français • Deutsch • Português • 中文 • 日本語 • 한국어 • العربية
More screenshots
| POST Request | GraphQL |
![]() |
![]() |
| WebSocket | Server-Sent Events |
![]() |
![]() |
| PUT Request | PATCH Request |
![]() |
![]() |
| DELETE Request | |
![]() |
| Postman | Bruno | Hoppscotch | ApiArk | |
|---|---|---|---|---|
| Framework | Electron | Electron | Tauri | Tauri v2 |
| RAM Usage | 300-800 MB | 150-300 MB | 50-80 MB | ~60 MB |
| Startup | 10-30s | 3-8s | <2s | <2s |
| Account Required | Yes | No | Optional | No |
| Data Storage | Cloud | Filesystem | IndexedDB | Filesystem (YAML) |
| Git-Friendly | No | Yes (.bru) | No | Yes (standard YAML) |
| gRPC | Yes | Yes | No | Yes |
| WebSocket | Yes | No | Yes | Yes |
| SSE | Yes | No | Yes | Yes |
| MQTT | No | No | No | Yes |
| Mock Servers | Cloud only | No | No | Local |
| Monitors | Cloud only | No | No | Local |
| Plugin System | No | No | No | JS + WASM |
| Proxy Capture | No | No | No | Yes |
| Response Diff | No | No | No | Yes |
| Platform | Download |
|---|---|
| Windows | .exe installer • .msi |
| macOS | Apple Silicon .dmg • Intel .dmg |
| Linux | .AppImage • .deb • .rpm |
Package managers
# Homebrew (macOS/Linux) — coming soon
brew install --cask apiark
# Chocolatey (Windows) — coming soon
choco install apiark
# Snap (Linux) — coming soon
sudo snap install apiark
# AUR (Arch Linux) — coming soon
yay -S apiark-binInterested in maintaining a package? Open an issue and we'll work with you.
Build from source
Prerequisites: Node.js 22+, pnpm 10+, Rust toolchain, Tauri v2 system deps
git clone https://github.com/berbicanes/apiark.git
cd apiark
pnpm install
pnpm tauri build- Export your Postman collection (Collection v2.1 JSON)
- Open ApiArk
Ctrl+K> "Import Collection" > select your file- Done. Your requests are now YAML files you own.
Also imports from: Insomnia, Bruno, Hoppscotch, OpenAPI 3.x, HAR, cURL.
Multi-Protocol — REST, GraphQL, gRPC, WebSocket, SSE, MQTT, Socket.IO in one app. No tool has broader protocol coverage.
Local-First Storage — Every request is a .yaml file. Collections are directories. Everything is git-diffable. No proprietary formats.
Dark Mode + Themes — Dark, Light, Black/OLED themes with 8 accent colors.
TypeScript Scripting — Pre/post-request scripts with full type definitions. ark.test(), ark.expect(), ark.env.set().
Collection Runner — Run entire collections with data-driven testing (CSV/JSON), configurable iterations, JUnit/HTML reports.
Local Mock Servers — Create mock APIs from your collections. Faker.js data, latency simulation, error injection. No cloud, no usage limits.
Scheduled Monitoring — Cron-based automated testing with desktop notifications and webhook alerts. Runs locally, not on someone else's server.
API Docs Generation — Generate HTML + Markdown documentation from your collections.
OpenAPI Editor — Edit and lint OpenAPI specs with Spectral integration.
Response Diff — Compare responses side-by-side across runs.
Proxy Capture — Local intercepting HTTP/HTTPS proxy for traffic inspection and replay.
AI Assistant — Natural language to requests, auto-generate tests, OpenAI-compatible API.
Plugin System — Extend ApiArk with JavaScript or WASM plugins.
Import Everything — Postman, Insomnia, Bruno, Hoppscotch, OpenAPI, HAR, cURL. One-click migration.
Built with Tauri v2 (Rust backend + native OS webview), not Electron.
| Metric | Target |
|---|---|
| Binary size | ~20 MB |
| RAM at idle | ~60 MB |
| Cold startup | <2s |
| Request send latency | <10ms overhead |
Your data is plain YAML. No lock-in. No proprietary encoding.
# users/create-user.yaml
name: Create User
method: POST
url: "{{baseUrl}}/api/users"
headers:
Content-Type: application/json
auth:
type: bearer
token: "{{adminToken}}"
body:
type: json
content: |
{
"name": "{{userName}}",
"email": "{{userEmail}}"
}
assert:
status: 201
body.id: { type: string }
responseTime: { lt: 2000 }
tests: |
ark.test("should return created user", () => {
const body = ark.response.json();
ark.expect(body).to.have.property("id");
});# Run a collection
apiark run ./my-collection --env production
# With data-driven testing
apiark run ./my-collection --data users.csv --reporter junit
# Import a Postman collection
apiark import postman-export.jsonIf 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.
- Discord — Chat, ask questions, share feedback
- Twitter / X — Updates and announcements
- GitHub Discussions — Ideas, Q&A, show & tell
- GitHub Issues — Bug reports and feature requests
ApiArk UI supports internationalization via react-i18next. Currently available in English.
Help us translate ApiArk into your language! See the locales/ directory and submit a PR.
# Install dependencies
pnpm install
# Run in development mode
pnpm tauri dev
# TypeScript check
pnpm -C apps/desktop exec tsc --noEmit
# Build for production
pnpm tauri buildapiark/
├── apps/
│ ├── desktop/ # Tauri v2 desktop app
│ │ ├── src/ # React frontend
│ │ └── src-tauri/ # Rust backend
│ ├── cli/ # CLI tool (Rust)
│ ├── mcp-server/ # MCP server for AI editors
│ └── vscode-extension/ # VS Code extension
├── packages/
│ ├── types/ # Shared TypeScript types
│ └── importer/ # Collection importers
└── CLAUDE.md # Full product & engineering blueprint
Frontend: React 19, TypeScript, Vite 6, Zustand, Tailwind CSS 4, Monaco Editor, Radix UI
Backend: Rust, Tauri v2, reqwest, tokio, tonic (gRPC), axum (mock servers), deno_core (scripting)
Contributions are welcome! Please read the CLAUDE.md blueprint for architecture details and conventions.
If ApiArk helps your workflow, consider giving it a star. It helps others discover the project.







