mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-09-09 19:31:57 +02:00
feat/request-versioning
#619 got here first and got more of it right. Two things adopted from it, and one backed out. **Adopted, and this one is a bug fix.** The pair editor generates an `id` for every header and parameter row the first time it touches a request, and that write reaches the database like any other. Stripping only the top-level `id` left those in, so merely opening a request minted a version whose diff was nothing but ids. `strip_ids` drops every `id` at every depth. The regression test fails without it. **Adopted.** Hashes carry a `v1:` prefix, so a hash written by an algorithm a build doesn't understand is recognizable as unreadable rather than silently read as "different". And `sorted_keys` + `to_string` replaces the hand-rolled canonical writer — same guarantee, less code, and byte-identical to the implementation that is landing. **Backed out.** `comparable()` in import.rs goes back to its own copy. #619 rewrites that function and most of the file around it, including dropping `sortPriority` from the comparison, so pointing it at the shared module now would collide in the hottest region of that branch to save six lines. This module is shaped to be what #619 calls when it lands, and says so; the convergence is one deletion away rather than a reconciliation. That leaves `folderId` as the only real disagreement between the two callers, which PLACEMENT_KEYS now documents as such: import counts a move between folders as a change, versioning must not.
💫 Yaak ➟ Desktop API Client 💫
A fast, privacy-first API client for REST, GraphQL, SSE, WebSocket, and gRPC – built with Tauri, Rust, and React.
Development is funded by community-purchased licenses. You can also become a sponsor to have your logo appear below. 💖
Features
Yaak is an offline-first API client designed to stay out of your way while giving you everything you need when you need it. Built with Tauri, Rust, and React, it’s fast, lightweight, and private. No telemetry, no VC funding, and no cloud lock-in.
🌐 Work with any API
- Import collections from Postman, Insomnia, OpenAPI, Swagger, or Curl.
- Send requests via REST, GraphQL, gRPC, WebSocket, or Server-Sent Events.
- Filter and inspect responses with JSONPath or XPath.
🔐 Stay secure
- Use OAuth 2.0, JWT, Basic Auth, or custom plugins for authentication.
- Secure sensitive values with encrypted secrets.
- Store secrets in your OS keychain.
☁️ Organize & collaborate
- Group requests into workspaces and nested folders.
- Use environment variables to switch between dev, staging, and prod.
- Mirror workspaces to your filesystem for versioning in Git or syncing with Dropbox.
🧩 Extend & customize
- Insert dynamic values like UUIDs or timestamps with template tags.
- Pick from built-in themes or build your own.
- Create plugins to extend authentication, template tags, or the UI.
Contribution Policy
Important
Community PRs are currently limited to bug fixes. If your PR is not a bug fix, link the feedback item where @gschier explicitly gave you permission to work on it. See
CONTRIBUTING.mdfor policy details andDEVELOPMENT.mdfor local setup.






















