mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-09-07 10:27:15 +02:00
aa3bf934a9f03b2689fcf053348532b9c8e15caf
Import already had this: `comparable()` in import.rs, added last week, strips identity fields off a model so a re-import can tell a change from a conflict. Request versioning arrived with its own copy of the same idea. Now both call `yaak_models::content`, which owns the mechanism and — more usefully — the reasoning. Two things had no single home before: why identity fields can never count as content, and why hashing has to sort object keys itself rather than trusting `serde_json::Map` to be a `BTreeMap` (`preserve_order` is on in some builds of this workspace and off in others). The key lists stay separate on purpose, as IDENTITY_KEYS and PLACEMENT_KEYS. Import counts a move as a change, because equality there means "same content in the same place"; versioning must not, or dragging a request around the sidebar would mint versions nobody asked for. A test on each side pins that difference, since the obvious next refactor is to collapse the two lists into one and neither behaviour would fail loudly if you did. Directory sync deliberately keeps its own Sha1 and is not folded in. It checksums the bytes of a file to notice someone edited it on disk, so it has to reflect formatting and key order — the exact things this module discards.
💫 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.






















