For teams · £96 per seat per year

The API client that runs on your machine.

ReqForge is a native desktop API client and test runner. Collections, environments, scripting and assertions — plus load testing, security scanning and a headless CLI for CI. No cloud workspace, no sync service, no request of yours leaving your network: your work stays as plain JSON files in a folder you choose.

Five seats, fourteen days, no card. Buy at £96 per seat per year when it has earned it.

The ReqForge window: collections on the left, a GET request with query parameters, and a JSON response with status, timing and size.

Your data never leaves your machines Works offline for a fortnight at a time One JSON file per collection Rust HTTP engine macOS · Windows · Linux No analytics, no crash reporting

Everything the job needs, in one window

Sending a request is the start of the work, not the end of it. The things an API client usually sends you elsewhere for are here.

Native speed

The request path is Rust — TLS, redirects, decompression, cookies and streaming all happen outside the web view, so the interface stays responsive while a 30 MB response downloads.

Your data is just files

A collection is one JSON file in a directory you pick. Diff it in a pull request, copy the folder to another machine, carry on working. No proprietary database, no export step.

Variables that explain themselves

Four scopes with a clear precedence, autocomplete on {{ showing what each name resolves to, and a hover preview of the fully resolved value and where it came from.

Scripting and assertions

Pre-request and test scripts in JavaScript with a Postman-compatible pm API, run in an embedded engine with time limits so a runaway loop cannot hang the app.

Run the whole collection

In the app with live results, or headlessly with reqforge-cli — JSON and JUnit reporters, CI-shaped exit codes, and the same engine behind both.

Load testing with k6

Turn the open request into a k6 script and run it locally. Pick virtual users and a duration; get p90, p95, p99 and max latency, throughput and failure rate as it runs.

Security scanning

Drive OWASP ZAP against your own endpoints — one request, a collection, or everything. Spidering plus an opt-in active scan, with findings grouped by risk.

Git for your collections

Open ReqForge on a repository and commit, branch, pull and push from inside the app. libgit2 is bundled, so it works whether or not git is installed.

Brings your work with you

Import Postman v2.1 collections and environments, cURL commands and OpenAPI 3.x documents. Export back to Postman, optionally with every credential blanked.

WebSockets and SSE

ws://, wss:// and Server-Sent Events render as a timestamped conversation. Binary frames are decoded when they are text and hex-dumped when they are not.

Documented from the inside

Press F1 for a searchable user guide covering every feature, written for someone who has never opened the app. No undocumented features ship.

Keyboard first

Send, save, close, filter, new request, new window and the guide are all a chord away, and the tree and tab strip are fully navigable without a mouse.

A look around

Every screenshot on this page is the real application, captured from the current build.

Write the assertions where the request lives

Test scripts use the same pm API you already know: pm.test, Chai-style pm.expect, pm.environment.set to pass a value to the next request, and pm.sendRequest when a call needs a token first.

  • Results land in the response panel, pass or fail, with the reason.
  • Pre-request scripts run before the send, with the same API.
  • Console output from either script is kept beside the response.
The Tests tab of a request, showing a JavaScript test script with pm.test assertions and syntax highlighting.

Run the suite and see what broke

Press on a collection or a folder to run every request in order. Each row shows the status, the time and every assertion; failures expand to the URL that was reached and what the assertion expected.

  • Stop at the first failure, or let it run to the end.
  • Put a delay between requests when the API rate-limits.
  • The same run, headless, is one reqforge-cli command.
The collection runner: nine requests run, one failed, with the failing assertion expanded to show the expected and actual status.

Load test the request you already have

No second tool, no second definition of the request. Choose virtual users and a duration or an iteration count, and ReqForge turns the open request into a k6 script and runs it locally, streaming k6's own output as it goes.

  • Average, p90, p95, p99 and max latency.
  • Throughput, failure rate, peak VUs and iterations.
  • Needs k6 on your PATH; the panel tells you how to install it.
The Load Test tab after a run: a results table with latency percentiles and throughput, above k6's streamed console output.

Scan your own endpoints for vulnerabilities

ReqForge drives OWASP ZAP — the bundled one it can start for you, or a daemon you already run. Point it at the active request, a whole collection, or everything, and it spiders first, with an active scan as an opt-in second pass.

  • Findings grouped by risk, with evidence and remediation.
  • Export the report as JSON.
  • Only scan systems you are authorised to test.
The OWASP ZAP dialog: connection settings, target selection, and a findings list with a high-risk SQL injection alert expanded.

Open it on the folder the tests belong to

A workspace is just a directory — a repository, or the folder beside the service under test. ReqForge lists the API files it finds there (its own, Postman exports, OpenAPI documents), imports them on a press, and reads the folder's git branch and remote.

  • Start on one from a terminal: reqforge .
  • Several windows on the same folder; drag a tab out into its own.
  • Commit, branch, pull and push without leaving the app.
The workspace dialog: the current folder with its git branch and remote, the API files found in it, and a list of recent folders.

The same run, in CI

reqforge-cli runs your collections without the UI, through the same engine: same variables, same scripts, same settings, same cascade. Its options mirror Newman's and it reads the same files, so an existing pipeline usually only needs the command name changed.

reqforge-cli
$ reqforge-cli run ./billing.postman_collection.json

ReqForge · Billing API · 3 request(s)

Billing API / Invoices / List invoices GET http://127.0.0.1:8099/v1/invoices
  200 OK · 3 ms · 123 B
  ✓ status is 200
  ✓ returns a page of invoices

Billing API / Invoices / Create invoice POST http://127.0.0.1:8099/v1/invoices
  201 Created · 1 ms · 30 B
  ✓ status is 201

Billing API / Health check GET http://127.0.0.1:8099/healthz
  200 OK · 0 ms · 55 B
  ✓ status is 200
  ✓ every dependency is up

3 request(s) · 0 failed · 5 assertion(s) · 0 failed · 46 ms

Exit code 0 when everything passed, 1 when a request or an assertion failed, 2 for bad usage — so a CI job fails for the right reasons. Add -r junit --reporter-junit-export results.xml and your runner shows the failures as tests. The CLI reference is in the docs.

More of the app

Click any of these to see it full size.

Try it against your own APIs

Fourteen days, five seats, no card — the whole product, not a cut-down version of it. Builds for macOS, Windows and Linux come with the trial, along with the seat that runs them.

After that it is £96 per seat per year, billed annually, with every feature in every seat. Your collections are files on your own disk throughout, and they stay readable whether you buy or not.