Download Zyvra

v0.3.0 · 2026-11-07

Free for macOS, Linux and Windows. One small program, no account.

Install

The installer picks the right build, checks it, and installs it for your user. No sudo, no administrator rights.

curl -fsSL https://www.zyvra.dev/install.sh | sh

Installs for your user only, no sudo. How the download is verified

Then

  1. Create a project. In an empty folder: zyvra init my-project
  2. Start it. zyvra up opens the dashboard at http://127.0.0.1:7777.
  3. Try it. Create a mock service, add an endpoint, and send a request to it from the API Client. Quick start

Download by hand

Prefer to unpack it yourself? Each archive holds one program (zyvra or zyvra.exe) and a short README. Compare the SHA-256 with the one shown, or verify the signature.

SystemFileSizeSHA-256
macOS, Apple silicon (M1 or newer) zyvra-v0.3.0-darwin-arm64.tar.gz 11.2 MB c3861696439e5bbbe8d4db4316b4b269b5acde3a63af8ea74d851889ea0b324a
macOS, Intel zyvra-v0.3.0-darwin-amd64.tar.gz 11.8 MB 993f0b9114541e5752cc17358df679d994085d99a2b462f26ede44a97bfb2d3a
Linux, x86-64 zyvra-v0.3.0-linux-amd64.tar.gz 11.8 MB e0ab2a265729ec7b4129e4e5ec9f9aa86e06fb8826ce3a6b0b7e34057f18de14
Linux, ARM64 zyvra-v0.3.0-linux-arm64.tar.gz 10.9 MB 9d56f0773f765791b159fe637650502a2ee9c5fdd24e274f772555efb70f2b9b
Windows, x86-64 zyvra-v0.3.0-windows-amd64.zip 11.9 MB a1044a5445393b9e5a8edde83a5223c1d2ab935582d5054994d78ce0692d2b34

If your system warns about the download. Zyvra's builds are signed with Zyvra's own release key, not with an Apple or Microsoft certificate, so a browser download can trigger a warning. The install command above avoids it.

macOS: right-click the program and choose Open, or run xattr -d com.apple.quarantine ./zyvra. Windows: in SmartScreen choose More info, then Run anyway.

What is new in v0.3.0

  • **The Callbacks list groups by service and can be searched.** With callbacks from more than one mock service, each service is a section with its count and how many are waiting or failed; with more than three services the sections start folded (Fold all / Open all), and a search by name, address, service, scenario or result opens every section that has a match.
  • **A callback that saved something links to it:** its detail and the request's Traffic detail have "Open <collection>" next to what it saved.
  • **A callback can save its answer into state.** In a callback's Settings, "Save its answer into state" keeps something from the answer when it comes: add or replace a record, always add one, or change fields of one, in any collection. The record's id and fields can use `{{callback.status}}`, `{{callback.ok}}`, `{{callback.body.…}}` (JSON, else text) and `{{callback.headers.…}}`, and what the request said when it came in (`{{request.…}}`, `{{response.…}}`, `{{scenario}}`), so a result that arrives later (a provider confirming a payment) is there for rules and responses to read. It is saved once the callback is finished and only if an answer came back; the callback's detail says what was saved, or why not.
  • **A request's Traffic detail lists the callbacks it triggered,** right under its heading (where each stands, its answer, the certificate it used, what it saved into state, and why one failed), instead of behind a tab.
  • **One look for every error.** The panel the mock service shows when its port is in use (an icon, what happened, what to try, and the exact message with a Copy button) is now how Zyvra shows errors everywhere: a page that could not load, a dialog that could not save or import, a spec that could not be read, a test that could not run, a failed script, a callback or update that did not go through, and what to fix before saving an endpoint. Errors that Zyvra can explain say so in their own words (a missing item, a conflict, the secret store, the project's data folder), and a list of things the server found wrong is shown as a list. The Overview's "needs attention" notes use it too (a service that cannot start says why and what to try; a file with several errors lists them), in red, amber or grey by how serious it is.
  • **Mock Services shows the error panel for a service that cannot start,** above the table, with Change port and Try again right there (one per failing service, named). The table row only says Error; the one-line reason under it is gone.
  • **No per-field errors.** The endpoint editor no longer outlines fields or writes a message under each one: after you try to save, the summary at the top lists what to fix (each line takes you to its tab), and a tab with something to fix shows a count.
  • **A trigger copes with a hundred scenarios or rules.** Up to eight choices are chips you switch on and off; with more, the ones you chose are chips you can remove, and a **Choose scenario** button opens a list you search (with how many match). Rules work the same way.
  • **Mistakes are shown where they are.** After you try to save, the endpoint editor marks the field that is wrong (a condition with no name, a callback with no address), says what is needed right under it, puts a red count on each tab that has something to fix, and replaces the red list at the top with a summary whose lines take you to the right tab. It stays in step as you type, so a mistake disappears the moment it is fixed. Nothing is red before you have tried to save.
  • **Callbacks: define them in one place, and say when they are sent.** Every endpoint has a **Callbacks** tab. Each callback there has a **Send when**: every time the endpoint answers, or only when the response status is one you list (`2xx`, `404`), the answer is a scenario you tick, and the request has something (a header, a query value, a field in the body: the same conditions as a rule). A callback with no trigger chosen, or one that points at a scenario that was deleted, shows a warning (and the tab shows one too), because it would never be sent. A trigger can also be **the rule that answered** (it matched, or it did not and its "otherwise" answered), which is what a rule's "Also call" used to be.
  • **Rules and scenarios no longer carry callbacks.** The "Also call" section of a rule is gone, and a scenario's callbacks are not edited on the response page: callbacks are defined on the endpoint's Callbacks tab, one place. Callbacks that a rule or scenario already has (in `zyvra.yaml`, or from an older version) are handed over when the endpoint is opened, with that rule or scenario as the trigger, so they are sent in the same cases; a note says so, and saving writes them in their new place. Renaming a rule or scenario keeps the callbacks that follow it. Projects you have not opened keep working unchanged.
  • **A callback can carry more.** Query parameters (a table, encoded for you), a body as JSON, form fields, text or none, authentication (a bearer token, basic, an API key in a header or the query, or an HMAC signature of the body you choose the header, algorithm and prefix of), a timeout (1 to 60 seconds) and a switch to skip checking the target's certificate. Values can now read the answer too: `{{response.status}}`, `{{response.body.id}}`, `{{response.headers.x}}`, `{{scenario}}`, and `{{env.name}}` for a variable of the local environment, so a secret does not have to be written into the project file. The editor groups them in tabs (Params, Headers, Auth, Body, Settings) so a callback stays short.
  • **The Callbacks list shows the certificate used,** and pages at 25 rows. A callback's stored credentials (Authorization, API keys, signatures) are not shown back in its detail.
  • **Drag and drop in the API Client's collection tree.** Drop a request on another to reorder it, a folder on another folder, either one onto a folder to move it in, or onto the collection to bring it back to the top. A line shows where it will land. Move to… and Move up/down stay for the keyboard.
  • **Five smaller things.**
  • *Start counting again:* the Faults tab has a button that makes "every 3rd", "the first 3", rate limits and what custom fault scripts remembered start from zero on the running mock, without restarting it.
  • *Examples for API Client scripts:* pre-request and test scripts have a "Start from an example" menu (a timestamp or request id header, an HMAC signature, a short-lived JWT; status, speed, JSON shape, saving an id). Every example is run in the real sandbox by the tests.
  • *Move and reorder:* requests and folders can be moved into another folder (Move to…, in the sidebar, the requests table and the folders column) and up or down among their own kind. The control API's move takes an optional `index`.
  • *Re-import an OpenAPI spec:* when a route already exists you can now add the responses it is missing instead of skipping it. Rules, faults, edited responses and the active scenario are kept; routes the spec dropped are listed, never deleted.
  • *Certificates for callbacks:* https callbacks present the client certificate declared for their host (the same ones as the API Client) and trust its CA file. The callback's detail names the certificate that was presented. A certificate that cannot be loaded fails the callback with the reason instead of sending without it.
  • **Scenarios, Traffic and History stay bounded.** Scenarios shows a foldable section per service (they start folded once there are more than 30 endpoints, with Fold all / Open all, and searching opens everything that matches). Traffic and History page at 25 rows, and Traffic gains an outcome filter (any, errors, no route matched) plus a count with a one-click "N failed" link.
  • **A collection's page has folders on the left and requests on the right.** Run history moves above both, as a closable section: one line that says how the collection is doing (the last runs as a strip, and what the latest one found) and, when opened, the full list (up to 20 runs, scrolling on its own). It starts closed and stays as you leave it. Folders are a column of their own: **All requests** first, then each folder with how many requests it holds, nested folders that fold (a big tree starts folded), a search box once there are more than a few, and a "⋯" menu on each for its settings, rename and delete. Click a folder to see only its requests; a chip above the table says so and clears it. However many folders there are, the column keeps its own height and scrolls, so the rest of the page stays in reach. The requests table shows 25 at a time with Previous and Next (a search looks through every page), and shows its Auth and Checks columns when it has room for them.
  • **Four screens that explain themselves.**
  • **Rules tab:** each rule folds to one line ("no token · if header authorization absent → denied 401"), a list of more than three starts folded (with Open all and Fold all), the status of the scenario a rule answers with is shown beside its name, and "Also call" is one quiet line until a rule has a callback.
  • **Mock service Settings:** it is now a real settings page. The details with an Edit button, a switch for starting with the project that says what each position does, the base address and a curl command to try, a summary of what the service holds with a click through to each tab, and delete in a marked place that says what goes.
  • **Endpoint Test tab:** it says what it does (nothing is sent or changed, unsaved edits count), shows the method with the path, groups the request and the result in panels, and copies the sample request as a curl command.
  • **State records:** a table with the fields as columns (the id first, then the fields most records have, timestamps last), numbers and true/false looking different, nested values summarised instead of cut off, a filter, and the collection's facts as small badges.

Full changelog · All releases