Introducing Sendra
Sendra is a terminal-native HTTP client. Requests are plain YAML files that live in your repo next to the code they exercise, and you send them from the shell instead of a GUI.
Why Sendra exists
Most HTTP client tools ask you to leave your editor and your repo behind: a separate app, a proprietary export format, requests that live in someone's cloud workspace instead of version control. Sendra starts from the opposite assumption — a request is a file. It belongs in your repo, gets reviewed in a pull request like any other change, and diffs over time the same way your code does.
A request or collection file is checked against variables from an environment
file, so the same request can point at staging or production without
touching the file itself. It can also declare what the response should
look like — status, headers, body shape — which sendra test then passes or
fails your build on. No separate assertion library, no glue script: the
check lives in the same YAML as the request it's checking.
What's in the box today
Sendra ships as a single binary. There's no separate install step for a
scripting engine, a test runner, or a UI — building or installing sendra
gets you all of it:
sendra runsends a request and prints the result.sendra testruns one or a whole collection and fails your build on unmet assertions.sendra tui— or justsendrawith nothing else on the command line — opens a full-screen terminal UI for browsing and running requests interactively, built directly on the same request model, YAML loading, environment resolution, and HTTP execution the CLI commands use.
The CLI side has been usable for a while: run and test requests, assert on
status/headers/body, capture a value out of one response and chain it into
the next request, layer config → environment → CLI overrides in a
predictable precedence order, and run pre_request/post_request scripts
in a sandbox with no filesystem or network access.
What's new is that the TUI has caught up past "browse and run" into a genuinely complete editor. From inside the TUI you can now:
- Edit any part of a request in place — method, URL, headers, body,
auth, assertions, captures — with a form that refuses to save on an
invalid method or unparsable JSON body, and discards cleanly on
Esc. - Work across multiple collections at once, each open in its own tab with fully independent selection, run state, and edit session.
- Log into OAuth
authorization_codeflows interactively — the TUI opens your browser, runs a local callback listener, and caches the token for the rest of the session, the same asclient_credentials/passwordtokens are. - Browse in-session run history per request, up to 20 runs deep, without anything touching disk.
None of this is a second product bolted onto the CLI. The TUI reuses
sendra-core directly — the same request model the CLI commands run on —
with one deliberate, documented gap: pre_request/post_request scripts
don't run from the TUI. Everything else behaves identically whether a
request is sent from a shell command or a keypress.
Try it
There's no packaged release yet, so building from source is the way in:
git clone https://github.com/sendra-lab/Sendra.git
cd Sendra
cargo build --workspace --release
./target/release/sendra run examples/get-request.yaml
From there, the docs cover the full request/collection
schema, every CLI flag, the TUI's complete keybinding reference, and the
design rationale behind the harder calls — like why sendra test ignores an
unasserted status, or how the sandboxing guarantees around scripts work.
This is the first post on this blog, and we're planning to use it for
release-note-style updates too (tagged changelog)
rather than standing up a separate changelog page — see the tag description
for why.
