Rusty Requester Docs
Sections

Documentation

Rusty Requester is a native, offline API client for building HTTP requests, organizing collections, running data-driven checks, and sharing API examples without leaking secrets by default.

What Rusty Requester Is Good At

Local API work

Build requests, switch environments, keep cookies, inspect responses, and save useful requests into nested collections.

Repeatable checks

Use Collection Runner presets, CSV/JSON data rows, assertions, extractors, and safe reports for smoke and regression flows.

Share without accidents

Copy redacted cURL/snippets by default and scan collection exports locally before writing files.

Install and Update

Rusty Requester ships as a native macOS app and Linux binary. No account, cloud login, or external runtime is required.

One-line install

curl -fsSL https://raw.githubusercontent.com/chud-lori/rusty-requester/main/install.sh | bash

macOS

The installer downloads the universal DMG, copies RustyRequester.app into /Applications or ~/Applications, removes quarantine, and re-registers the app with Launch Services.

Linux

The installer downloads the x86_64 tarball, installs the binary to ~/.local/bin, and creates desktop/icon entries under ~/.local/share. No sudo required.

Install a specific version

curl -fsSL https://raw.githubusercontent.com/chud-lori/rusty-requester/main/install.sh | VERSION=v0.24.0 bash

Update checks

The app reads the public latest.json metadata file first, then falls back to GitHub Releases only if needed. This keeps normal update checks out of GitHub's unauthenticated REST API quota.

Uninstall

curl -fsSL https://raw.githubusercontent.com/chud-lori/rusty-requester/main/install.sh | UNINSTALL=1 bash

Add PURGE=1 to remove saved workspace data as well.

Build from source

git clone https://github.com/chud-lori/rusty-requester
cd rusty-requester
cargo run
cargo test
cargo build --release

First Request

Create or open a tab

Click New Request, use Cmd/Ctrl + N, or open an existing request from the sidebar.

Choose method and URL

Pick GET, POST, PUT, PATCH, DELETE, QUERY, HEAD, or OPTIONS. Enter a full URL or one using environment variables like {{base_url}}/users. Use QUERY for safe, idempotent searches that need a request body.

Add request details

Use the Params, Headers, Cookies, Body, Auth, and Tests tabs to shape the request.

Send and inspect

Click Send or press Cmd/Ctrl + Enter. Inspect status, timing, headers, body, events, and diffs in the response panel.

Save it

Press Cmd/Ctrl + S to save a draft into a collection or folder.

Workspace Model

The app is local-first. Your collections, history, environments, cookies, OAuth state, runner presets, and open tabs are stored on your machine.

Local data

The workspace lives in a local app data file. There is no hosted account, cloud sync, telemetry, or server-side project state.

Tabs vs saved requests

Tabs are your active workspace. Saved requests belong to collections. Draft tabs can exist before they are saved into a folder.

Treat local data as sensitive. OAuth tokens, environment secrets, cookies, and auth headers can exist in the workspace. Prefer redacted exports when sharing.

Request Builder

The editor is split into method/URL controls and six request tabs.

TabUse it forNotes
ParamsQuery string key/value rows.URL and Params sync both ways. Disabled rows are ignored.
HeadersRequest headers.Use environment variables for host, tenant, tokens, or content negotiation.
CookiesExplicit cookie rows.These merge with the per-environment cookie jar when applicable.
BodyRaw, form URL encoded, multipart form data, or GraphQL.Beautify/minify helpers are available for text bodies.
AuthNo auth, Bearer, Basic, or OAuth 2.0 PKCE.Auth output is applied at send time.
TestsAssertions and extractors.Use these for chained workflows and Collection Runner checks.

Body Modes

Raw

Send text, JSON, XML, or any other raw body. Pair it with the correct Content-Type header.

x-www-form-urlencoded

Key/value form rows encoded as application/x-www-form-urlencoded.

multipart/form-data

Form-data style text fields for endpoints expecting multipart payloads.

GraphQL

Query and variables editors sent as JSON with query and variables.

Authentication

Bearer token

Injects Authorization: Bearer .... JWT-like tokens can be decoded in the UI for quick header/payload inspection.

Basic auth

Stores username/password locally and sends the correct Basic auth header at request time.

OAuth 2.0 + PKCE

Starts the browser authorization flow, catches the loopback redirect, exchanges the code for a token, and applies the bearer token automatically.

No auth

Use this for public endpoints or when auth is manually represented in headers, cookies, or query params.

Security model. Auth values are local. They are not uploaded by Rusty Requester, but they can be present in local backups, raw exports, and raw snippets.

Environments

Environments let one request work across local, staging, production, customer tenants, or temporary test stacks.

Variable substitution

Define variables in the environment manager, then reference them as {{name}} in URLs, params, headers, cookies, bodies, and auth fields.

URL:     https://{{base_url}}/v1/users/{{user_id}}
Header: Authorization: Bearer {{token}}

Cookie jar

Cookies are scoped per environment. Set-Cookie responses are persisted and replayed for matching domains and paths, similar to browser behavior.

Environment Compare

Use compare when staging works but production does not, or when onboarding a new environment.

  • Pick a source and target environment.
  • Review added, missing, changed, and unchanged keys.
  • Copy a masked summary for teammates.
  • Add missing source keys to the target when needed.

Responses

The response panel focuses on inspection and debugging without running response HTML as code.

JSON

Pretty syntax-highlighted JSON with line numbers and fold controls for objects and arrays.

Tree

Collapsible JSON tree with path-oriented navigation and copyable paths.

Preview

Readable HTML/text preview for login pages, challenge pages, error documents, and rendered markup.

Events

Structured Server-Sent Events stream view for LLM APIs and event-stream endpoints.

Diff

Compare the current response with the previous response for the same request.

Raw

Verbatim body output for exact inspection or copying.

Timing and size

Response metadata includes status, elapsed time, and size. Timing breakdowns help separate preparation, waiting, and download time.

Cancel

While a request is running, Send becomes Cancel. Cancelling aborts the task and connection.

Collections

Collections and folders are the main organization model. Use them for services, domains, project areas, environments, or test suites.

Folders

Nest folders for modules such as Auth, Billing, Search, Admin, or Webhooks. Folder overview pages show recursive request counts and descriptions.

Request actions

Rename, duplicate, delete, drag to reorder, save drafts to folders, and open requests in tabs from the sidebar.

Good collection structure

My API
  Auth
    Login
    Refresh token
  Users
    List users
    Create user
  Billing
    Create checkout session
    Fetch invoice

Collection Runner

The runner turns saved requests into repeatable workflows.

Open runner

Use the Request menu or Actions Palette with Cmd/Ctrl + Shift + P.

Choose scope

Run all collections or limit execution to one collection/folder.

Select environment

Choose the active environment. Runner data rows overlay this environment per iteration.

Add data rows

Paste CSV or JSON to run the same flow with multiple users, tenants, IDs, or payload values.

Run and inspect

Watch live rows, select a result for details, then export safe CSV/HTML reports.

CSV data example

username,password,tenant
alice,secret,staging-a
bob,secret2,staging-b

JSON data example

[
  { "username": "alice", "tenant": "staging-a" },
  { "username": "bob", "tenant": "staging-b" }
]

Presets

Save runner presets for smoke tests, QA checks, release verification, or customer-specific flows. Presets remember scope, environment selection, and visible data rows.

Assertions and extractors

Assertions from the Tests tab run during Collection Runner. Extractors can pull response values into runner-scoped state so login, fetch, mutate, and verify flows can chain together.

cURL and Code Snippets

Paste cURL

Paste a cURL command into the import dialog to create a request with method, URL, params, headers, cookies, body, and auth.

curl -X POST https://api.example.com/users \
  -H "Authorization: Bearer token" \
  -H "Content-Type: application/json" \
  -d '{"email":"team@example.com"}'

Generate snippets

Click </> Code near Send to generate cURL, Python requests, JavaScript fetch, or HTTPie snippets.

Default copy is redacted. Authorization, cookies, sensitive query params, and sensitive body values are masked by default. Use raw copy only when you intentionally need exact secrets.

OpenAPI and Postman Import

Use imports to bootstrap collections from existing API definitions.

Postman Collection v2.1

Import existing Postman collections from JSON. Requests, folders, params, headers, auth, and body fields are converted into Rusty Requester collections.

OpenAPI 3.x

Import JSON or YAML specs. Requests are grouped by operation tags or path roots with parameters, body examples, and descriptions.

OpenAPI refresh

Generated OpenAPI metadata lets the app refresh imported requests from an updated spec while preserving user-edited names, auth values, tests, and extractors where possible. For collection-scoped refresh, open a collection's Collection settings..., choose a local OpenAPI JSON/YAML file, then click Refresh collection from OpenAPI.

Collection Git Sync

Each top-level collection can be linked to its own local folder or Git repository. Open the collection menu, choose Collection settings..., then select a directory. Rusty Requester enables file-backed sync by default: normal app saves rewrite workspace.json, requests/, and environments/, so Git status reflects the current collection without a separate export step. Turn off file-backed sync if you only want manual snapshots, then use Export now. Use a repository root containing .git when you want Refresh changes, Pull from remote, or Commit and push. Private GitHub/GitLab/Bitbucket repos work through your local SSH key or Git credential helper; Rusty Requester does not sign in to Git providers or store Git provider tokens.

workspace.json
requests/
  001-my-api-collection-id/
    001-login-request-id.rr
    001-users-folder-id/
      001-list-users-request-id.rr
environments/
  001-local-env-local.rrenv
  • One readable native block-style .rr file per request.
  • One readable .rrenv file per environment.
  • Stable IDs for round trips.
  • Deterministic ordering for cleaner diffs.
  • Secret masking by default for safer commits.
  • Collection-level mask/allow key patterns for shared headers and env keys.
  • Free Git UI: status/diff summary, pull, manual export, commit, and push.
  • Collection settings can rename the collection and store an OpenAPI spec path for refresh.

The older Workspace Sync... modal is still available for whole-workspace import/export, but collection settings are the recommended path for team Git review.

Full format reference: GIT_WORKSPACE_FORMAT.md.

Safe Sharing

Rusty Requester assumes API clients routinely hold credentials, so sharing workflows default toward redaction.

Redacted snippets

cURL, Python, JavaScript, and HTTPie snippets mask common auth, cookie, query, and body secret values by default.

Export scanner

Collection exports run a local-only scan for common token/key patterns and sensitive key names before saving.

Safe runner reports

CSV and HTML reports omit response bodies, response headers, cookies, extracted values, and full query strings.

No upload

Redaction and scanning happen locally. Export contents are not sent to a Rusty Requester service.

Heuristics are not a proof. The scanner catches common patterns and names. It can miss unusual formats and can flag placeholder values. Review shared files when stakes are high.

Backups

Backups protect local work before risky changes such as imports or restore operations.

  • Create manual snapshots before large imports or cleanup.
  • Automatic snapshots are created before mutating import flows.
  • Restoring a backup first saves the current state, so rollback is reversible.
  • Backup restore validates workspace JSON and only accepts files from the app backup directory.

Shortcuts

ShortcutAction
Cmd/Ctrl + EnterSend current request
Cmd/Ctrl + NNew request tab
Cmd/Ctrl + SSave current draft
Cmd/Ctrl + WClose active tab
Cmd/Ctrl + DDuplicate active tab
Cmd/Ctrl + KFocus sidebar search
Cmd/Ctrl + POpen request finder
Cmd/Ctrl + Shift + POpen actions palette
F2Rename active request
EscDismiss modal or cancel rename

Settings

Timeout

Set request timeout in seconds. A value of 0 disables the timeout.

Response cap

Limit max response body size to avoid accidentally loading huge payloads into the UI.

Proxy

Route requests through a proxy URL when debugging or working inside corporate networks.

TLS verification

Disable only for local/internal APIs with self-signed certs. Keep it enabled for public internet requests.

Theme

Preview Dark, Light, or Postman theme immediately. Save commits the selection; Cancel reverts it.

Update checks

Optionally check static release metadata once per app launch. No account or telemetry is involved.

Troubleshooting

macOS says the app cannot be opened

The app is not notarized. The installer removes quarantine automatically. For manual installs, right-click the app, choose Open, and confirm once.

Variables are not replaced

Check that an environment is selected, the variable name matches exactly, and the value is enabled in the environment manager.

Cookies are missing

Cookies are scoped by environment, domain, path, and expiry. Confirm the active environment and request host/path match the cookie rules.

Runner data is not applied

CSV uses the first row as headers. JSON must be one object or an array of objects. Data row keys become runner-scoped variables.

A secret scan warning appears on example data

The scanner is intentionally conservative. Placeholder values can look token-like. If you know the values are safe, you can continue or export a redacted copy.

Large response feels slow

Lower the max response body setting, use Raw view for exact text, and avoid previewing very large HTML/JSON documents unless needed.