Reqling

A native Mac client for HTTP, GraphQL, gRPC, and WebSocket APIs. Keep your requests in your repository, and send them yourself or through your AI agent.

The Reqling window with the Acme API project in the sidebar and its Get user request open: a GET to {{baseUrl}}/users/:userId with include and trace parameters and its userId path variable, above a 200 OK response in 86 ms whose JSON tree shows Ada Lovelace's id, name, email, roles, and team.

Projects

Requests that live with your code

A project is a folder of small JSON files, so it diffs cleanly and can live in your API's own repository. Edits from a git pull or your editor show up in the window as they land.

The files in a Reqling project
  • My API.reqling/
    • project.json
    • project.pre.js
    • environments/
      • default.json
      • staging.json
    • requests/
      • users/
        • _folder.json
        • get-user.json
        • create-user.json
        • create-user.post.js

Protocols

Every kind of API, one window

Beyond plain HTTP, send GraphQL queries, gRPC calls, and WebSocket messages, or watch an event stream, all with your variables, auth, and certificates.

GraphQL

Write queries with completion and validation against the API's schema, from introspection or a file, and browse every type beside the request.
The Search products GraphQL request in the Storefront project: a Search query taking a $q variable, checked against the 17 types in storefront.graphql, with q filled from {{searchTerm}} and a 200 OK response. Beside it the schema browser shows the Product type's fields, with price deprecated in favor of priceRange.

gRPC

Call unary and streaming methods in proto3 JSON, typed by your protos, a descriptor set, or server reflection, with every message on one timeline.
The Chat gRPC request, a bidirectional stream to acme.greeter.v1.Greeter over TLS with its schema from greeter.binpb, above a timeline of two messages sent and two greetings received, ending OK in 48 ms.

Event streams

A text/event-stream response stays open, listing each event with its type, ID, and time; a GET stream reconnects with Last-Event-ID.
The Order updates request in Acme API's Live folder, a GET to {{baseUrl}}/orders/stream?status=open with an Accept: text/event-stream header, above its stopped 200 OK stream: an order.created event and two order.updated events, with IDs 1041 to 1043, each opened to its fields.

WebSockets

Save the messages a connection opens with, then send more while it's live, with text, binary, pings, and close codes on one timeline.
The Support chat WebSocket request, connected to {{baseUrl}}/support over the chat.v2 subprotocol, with “Thanks! Can you send me the tracking link?” drafted in its composer beside Ping, Save, and Send Message, above its saved auth message and that message's Send button. Below, the open connection's timeline: the auth message sent with its token masked, “Hi Grace, Ada here. How can I help?”, “Where's order 1041?”, “It ships today, tracking to follow.”, and a ping from the server, answered with a pong.

Scripts

Requests that sign, chain, and check themselves

Run JavaScript before a request, after its response, and on each message a stream delivers, even to send a reply. Set it on one request, a folder, or the whole project. Scripts from Postman run as they are, and import with their collection.

The Create user request in Acme API's Users folder, a POST to {{baseUrl}}/users, on its Scripts tab: a post-response script that runs after the Users folder's, testing that the user is created, gets the viewer role, and is sent a welcome email, then saving the new user's ID for later requests. Below, its 201 Created response's Tests tab shows 3 of 4 tests passing, “sends a welcome email” failing with “expected false to be true”, and the console line “Created user 43”.

Folder runs

Run the whole flow, row by row

Run every request in a folder or project in order, a number of times or once per row of a CSV or JSON file, with scripts carrying tokens and IDs from one request to the next. Each request's result shows beside it in the sidebar.

The Users folder in Acme API after a run of three iterations from a data file. In the sidebar, List users and Delete user passed every iteration, Get user passed all 6 of its tests, and Create user failed 1 of its 6 tests in the second iteration, so the folder shows a failure; a bar at the sidebar's foot reads “Ran Users, Finished 3 iterations, Default, 11 passed, 1 failed”, with Run Again and Dismiss. The folder's pane offers Run Folder… beside New Request and New Folder.

MCP

Hand your agent the API

Turn on the built-in MCP server, and agents like Claude Code and Codex can write requests, pick environments, and send them while you watch the window. Secret values are write-only, so no tool ever returns one.

Adding Reqling to Claude Code
claude mcp add \
    --transport http reqling \
    http://127.0.0.1:39717/mcp \
    --header "Authorization: Bearer <token>"

Secrets stay put

Mark a variable secret, and its value lives in your Keychain, never in the project.

Trusted scripts

Scripts from a cloned or imported project run only once you trust them.

Mutual TLS

Client certificates matched by host, extra trusted CAs, and passphrases in your Keychain.

Bring your requests

Import Postman collections and environments or OpenAPI documents, and paste or copy any request as cURL.

Find anything

Filter the sidebar by name, method, URL, service, or last run's result, and search any response in place.

Run history

Each run stays on your Mac: see its response again, re-run it, restore its request, or compare two line by line.

Git stays clean

Values scripts set stay out of the project's files, so running requests leaves no diff.

iCloud sync

Projects in Reqling's folder sync to all your Macs, end-to-end encrypted, with no sign-up.

Updates itself

Reqling checks for new versions and verifies each download before it installs.