binman

a terminal ui
http client._

Browse and send HTTP requests from your terminal without leaving the keyboard. Reads .http, .bru, .graphql, Postman collections, and OpenAPI specs out of the box.

~/projects · binman
BINMAN
dev
{{BASE}}/users/{{USER_ID}}
200
Collection
bg-http/
bruno/
users/
GET get-user.bru
POST create-post.bru
GET list-posts.bru
postman/
jsonplaceholder.json
test/
GET test.http
Request
Params Headers Vars Body Auth Info Scripts Options
KEYVALUE
KeyValue
Response
Body Headers Cookies Scripts Trace

        
^j Send ^t Method ^s Save ^y cURL ^f Find ^h Hist ^e Env ^c Cancel/Quit
// what
  • Sidebar file browser — collections as a directory tree.
  • Tabbed request panel — params, headers, vars, body, auth, info, scripts, options.
  • Multiple body types — raw, JSON, form-urlencoded, multipart.
  • Auth — Basic, Bearer, API Key, OAuth2 client credentials.
  • Syntax-highlighted JSON responses, with streaming for SSE/chunked endpoints.
  • Variables from .env, Bruno environments/*.bru, and Postman environment files — closest one wins; switch envs from the URL bar.
  • Post-response variable extraction — chain requests from extracted tokens, IDs, etc.
  • Fuzzy search across every request in your collections.
  • Request history with one-key replay.
  • Import / export curl — paste a one-liner in, or copy the current request out.
  • Save edited requests back to disk; save responses to file.
  • Cycle methods with ^T. No mouse, ever.
  • Single static binary. macOS, Linux, Windows.
// install
macOS · Homebrew
$ brew tap bgunnarsson/binman
$ brew install binman
Pre-built binary
# grab from releases
$ chmod +x binman-*
$ mv binman-* /usr/local/bin/binman
From source · Go 1.22+
$ git clone …/binman.git
$ cd binman
$ go build -o binman ./cmd/binman
// formats
.http
Plain text. First line is METHOD URL, headers follow, blank line, then body.
.bru
Bruno. Native parse of get { url: … } / headers { … } blocks.
.graphql
GraphQL. Plain operation files; binman wraps the query in a JSON body and sets Content-Type automatically.
.json
Postman. Drop an exported collection in; binman expands it as a tree.
.yaml / .json
OpenAPI 3.x / Swagger 2.x. Detected by content, grouped by tag, Content-Type added automatically for JSON bodies.
// config
Reads ~/.config/binman/config on startup (or $XDG_CONFIG_HOME/binman/config). HTTP_FILES is required; binman won't start without it.
# ~/.config/binman/config HTTP_FILES = /path/to/your/collections
// env
Drop .env files anywhere in your tree. binman walks up from the request file to the root; the closest one wins. Use .env.staging, .env.production etc. to switch from the URL bar. Bruno environments/*.bru and *.postman_environment.json files are picked up automatically and appear in the same dropdown.
collections/ .env ← applies to everything below cms/ .env.staging ← labelled "staging" delivery/ .env ← overrides parent for this dir get.http ← picks up the closest .env
// keys
^JSend request
EscFocus sidebar
^TCycle HTTP method
TabCycle focus through panels
^SSave
EnterOpen file / expand dir
^YCopy as cURL
^FFind
^EEdit selected env file
^HToggle history
[ ]Prev / next tab
^CCancel / quit
^QQuit