Zagel is a cross-platform, GUI REST workbench built with Rust + iced. It scans your workspace for request collections (.http) and environments (.env), lets you pick a request, edit it, and send it. Think of it as a workspace-native alternative to Postman or Insomnia for teams that already keep requests in .http files.
The UI is still rough around the edges but it's functioning with good keyboard shortcuts.

- GUI request composer (method, URL, headers, body)
- Loads requests from
.httpfiles (blocks separated by###) - Loads environments from
.envfiles (simpleKEY=VALUEformat) - Variable substitution in URL/headers/body via
{{VAR_NAME}} - Periodic rescan of your configured roots
Download a prebuilt binary from GitHub Releases (recommended), or build from source (below).
cargo runRelease build:
cargo build --releaseZagel treats each request as a block. Blocks are separated by lines starting with ###.
Example requests.http:
GET https://httpbin.org/get
Accept: application/json
###
POST https://httpbin.org/post
Content-Type: application/json
{"hello":"world"}Rules:
- First non-empty line:
METHOD URL - Subsequent non-empty lines until the first blank line: headers (
Name: Value) - After the blank line: body (optional)
Any file whose name ends with .env is treated as an environment. Format is KEY=VALUE per line; # starts a comment.
Example dev.env:
API_URL=https://httpbin.org
TOKEN=secretYou can use variables in requests as {{API_URL}} / {{TOKEN}}.
Zagel stores settings in ~/.config/zagel/config.toml (exact location depends on your OS).
Supported keys:
http_root(directory to scan for.http)env_root(directory to scan for*.env, defaults tohttp_root)polling_interval_secs(default2)scan_depth(default6)
Contributions are welcome. See CONTRIBUTING.md for setup, linting, and the suggested workflow.