zreq-core is the embeddable engine behind zreq, a Postman-style API client. It owns the workspace model (collections, folders, requests, environments, variables, auth, bodies), HTTP execution, variable resolution, request history, code generation and import/export — and exposes all of them through one command surface (Engine::invoke), so every host drives identical behaviour. It carries no GUI and no platform UI deps, so the standalone app and every embed share the exact same code. The crate builds as rlib for native Rust/Tauri hosts and as staticlib/cdylib for non-Rust hosts over a C ABI. This project is in active development; current Postman coverage is 92.2% of an enumerated feature set.
Embeddable
One command surface — Engine::invoke(cmd, args_json) — drives every host identically: native Rust, a Tauri command, or a C/C++ host over the FFI (zrq_invoke).
Pure Rust
Foundational, vendorable deps only — serde, serde_json, thiserror, dirs, reqwest. No embedded JS engine, no copyleft, no native UI toolkit.
Feature-Gated Net
The net feature carries HTTP send over one native-tls stack. Build --no-default-features for a pure core that compiles in headless CI with zero TLS deps; request prep + codegen still work.
Honest Status
Engine commands, FFI exports and tests are derived from source. Test scripting is a native pm.* assertion subset, not a JS sandbox — and the docs say so.
Quick start
use zreq_core::Engine;
use serde_json::json;
let mut engine = Engine::new()?;
// One dotted command surface for every host.
let info = engine.invoke("version", &json!({}))?;
let cols = engine.invoke("collection.list", &json!({}))?;
// Import a curl command, then render it as a Python snippet.
let req = engine.invoke("import.curl", &json!({ "text": "curl https://api/ping" }))?;
let code = engine.invoke("codegen.generate", &json!({ "target": "python", "request": req }))?;
Surfaces
Depend on the rlib and call Engine directly, or go through Engine::invoke with JSON for parity across hosts. Enable the tauri feature to mount the engine as Tauri app commands (zrq_invoke + setup), with events emitted on zrq-event. Link the staticlib/cdylib and call zrq_invoke from a C ABI host. Asynchronous facts (request started / finished, errors) are pushed to the host through an installed event sink.
Where it goes next
See the engineering report for the module map, dependency footprint, FFI surface and test status, the port report for feature-by-feature Postman coverage, and the MenkeTechnologiesMeta umbrella for the wider stack this engine plugs into.