test("status is 200", () => {
expect(api.response.status)
.to.equal(200);
});Scripts and assertions
Run pre-request and response hooks with QuickJS. Verify responses with Chai, AJV and declarative assertions.
NATIVE DESKTOP · LOCAL FIRST · OPEN SOURCE
From one request to your whole collection.
A native workbench that keeps you in the flow.
macOS · Windows · Linux

ONE WORKBENCH, YOUR WHOLE FLOW
Protocols, environments, scripts and tests. Everything connects in one native window.
Edit query parameters, headers and bodies, or paste cURL to start. Read status, response data and the timeline in one place.
Documentation{{base_url}}/users?limit=10{
"users": [
{ "id": 1, "name": "Alex" },
{ "id": 2, "name": "Sam" }
]
}Give Query and Variables their own editors. Inspect returned data in the same workbench and focus on the fields you need.
Documentation{{base_url}}/graphqlquery GetViewer {
viewer {
id
name
email
}
}Receive server-sent events incrementally, follow incoming data and cancel the stream whenever you need.
Documentation{{base_url}}/eventsevent: message
data: {"text":"Hello"}
event: message
data: {"text":"ApiFuck"}
event: doneConnect, send messages and inspect replies. Explore two-way communication without leaving your workbench.
Documentation{{ws_url}}/socket→ {"type":"ping"}
← {"type":"pong"}
→ {"message":"Hello"}
← {"echo":"Hello"}YOUR FILES. YOUR WORKFLOW.
Store requests, folder settings and environments in readable OpenCollection YAML. Commit, review and collaborate alongside your code.
Preserve comments and formatting outside edited nodes, keeping changes easy to review.
Unfinished input saves locally and stays recoverable after you close a tab.
Project, folder and request scopes, with variable previews and completion.
info:
name: Get users
type: http
http:
method: GET
url: '{{base_url}}/users'
params:
- name: limit
value: '10'
type: queryShared requests go in Git. Local drafts stay in .apifuck/.
LESS REPETITION, MORE MOMENTUM
test("status is 200", () => {
expect(api.response.status)
.to.equal(200);
});Run pre-request and response hooks with QuickJS. Verify responses with Chai, AJV and declarative assertions.
cURL → ApiFuck
Bru → OpenCollection
→ JavaScript / Python / GoPaste cURL or import Bru requests, environments and folders. Preview and copy JavaScript, Python, Go and more.
Rust + GPUI Kit
Light / Dark / System
English / 简体中文Built with Rust and GPUI Kit, with offline editor assistance included. No Node.js or Bun needed to run a downloaded build.
YOUR NEXT REQUEST STARTS HERE
No account needed. Choose your platform, or run from source.
Apple Silicon · ZIP
Browse all releases Native build coming soonx86_64 · EXE
Browse all releases Native build coming soonx86_64 · Binary
Browse all releases Native build coming soonOnly builds matching the current native architecture are offered. Historical versions may differ from the current product.
No. ApiFuck is a local desktop application. Create or open a project and start sending requests.
Requests, environments and folder settings live in OpenCollection YAML in your project. Local drafts and variable overrides live in .apifuck/. Keep that directory out of Git.
HTTP, GraphQL, SSE and WebSocket are supported today. gRPC, advanced authentication and full asynchronous scripting are not yet available. See the execution documentation for details.
There is no standalone CLI product. Native MCP integration is planned. A collection runner exists in the core library but has no desktop entry point yet.