ApiArk
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 | |
![]() |
Why ApiArk?
| 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 |
Download
| Platform | Download |
|---|---|
| Windows | .exe installer • .msi |
| macOS | Apple Silicon .dmg • Intel .dmg |
| Linux | .AppImage • .deb • .rpm |
Package managers
# Homebrew (macOS)
brew tap berbicanes/apiark
brew install --cask apiark
# Scoop (Windows)
scoop bucket add apiark https://github.com/berbicanes/apiark
scoop install apiark
# APT (Debian/Ubuntu)
curl -fsSL https://berbicanes.github.io/apiark-apt/install.sh | sudo bash
sudo apt install apiark
Also available on the Microsoft Store.
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
Switching from Postman
- 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.
Features
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.
Performance
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 |
Data Format
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");
});
CLI
# 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.json
No Lock-In Pledge
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.
Community
- GitHub Discussions — Ideas, Q&A, show & tell
- GitHub Issues — Bug reports and feature requests
Translations
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.
Development
# 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 build
Project Structure
apiark/
├── 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
└── docs/ # Documentation and legal
Tech Stack
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)
Contributing
Contributions are welcome! Check out the GitHub Issues for open tasks and feature requests.
License
If ApiArk helps your workflow, consider giving it a star. It helps others discover the project.






