purerequest Piotr Zieliński
winget install --id=pzielinski.purerequest -e purerequest is a keyboard-driven, file-based desktop HTTP client for building, sending, and organizing HTTP requests from a local workspace.
winget install --id=pzielinski.purerequest -e purerequest is a keyboard-driven, file-based desktop HTTP client for building, sending, and organizing HTTP requests from a local workspace.
A minimal, keyboard-driven, fully configurable, file-based desktop HTTP client.
Built as a Tauri 2 desktop app with a React 19 + TypeScript frontend on the TanStack stack (Router, Query, Table, Form, Hotkeys) and shadcn/ui + Tailwind v4.
nvm use before any npm command.rustc, cargo).If the Rust toolchain or system prerequisites are missing, npm start fails fast with
a build error from Cargo.
nvm use
npm install
| Command | Description |
|---|---|
npm start | Run the app in development (tauri dev). |
npm run tauri build | Build the distributable desktop bundle. |
brew install --cask piotrzielinski1994/tap/purerequestwinget install pzielinski.purerequestBoth package manifests are updated automatically on every published Release: the Homebrew cask via
publish-cask.yml and the winget manifest via
publish-winget.yml. See packaging/winget/ for the initial manifests that must be submitted manually once, before the workflow can take over.
The Release workflow builds installers for all three OSes and
publishes them to a GitHub Release. It is manual only: GitHub -> Actions -> "Release" -> "Run
workflow", enter a tag (e.g. v0.1.0). It produces a single universal macOS .dmg, a Windows
installer, and a Linux .AppImage, attached to a draft Release. The binaries are unsigned:
on macOS right-click the app and choose Open; on Windows choose "More info -> Run anyway".
To take installers down later, delete the Release (and its tag) or remove individual assets - the download links 404 immediately. Anyone who already downloaded keeps their local copy.
Release builds ship the Tauri updater: the app checks the latest GitHub Release on startup (and via Settings -> Updates -> "Check for updates") and, when a newer version exists, shows a toast with an "Update now" button that downloads the signed update in place and relaunches. Two caveats:
TAURI_SIGNING_PRIVATE_KEY (the private key contents)
and TAURI_SIGNING_PRIVATE_KEY_PASSWORD (empty string if the key has no password). The matching
public key lives in src-tauri/tauri.conf.json under plugins.updater.pubkey. Without the
secrets the build still succeeds but emits unsigned artifacts the updater will reject.{{var}} and {{process.env.KEY}} interpolation with a completion popup.pre/post JavaScript per request (Bruno bru.* / Postman pm.*
aliased) with a Console..bru + OpenCollection), Postman, and OpenAPI/Swagger
import; Bruno, Postman, and OpenAPI export; "Copy as code" (cURL / fetch).The on-disk workspace format and JSON data model are documented in docs/data-format.md. Per-feature specs live under docs/features/.
> Workspace files (including auth tokens / variable values) are stored plaintext - treat a > workspace folder as sensitive and gitignore secrets accordingly.