| Crates.io | PostDad |
| lib.rs | PostDad |
| version | 0.2.1 |
| created_at | 2026-01-07 13:56:57.361206+00 |
| updated_at | 2026-01-18 18:03:20.728006+00 |
| description | A high-speed, local-first Terminal UI (TUI) for testing APIs. |
| homepage | |
| repository | https://github.com/mega123-art/PostDad |
| max_upload_size | |
| id | 2028298 |
| size | 290,400 |
"He's not mad at your slow API, just disappointed."
Postdad is a high-speed, local-first Terminal UI (TUI) for testing APIs. Itβs built in Rust π¦ because Electron apps shouldn't eat 1GB of RAM just to send a GET request.
____ _ _ _
| _ \ ___ ___| |_ __| | __ _ __| |
| |_) / _ \/ __| __/ _` |/ _` |/ _` |
| __/ (_) \__ \ || (_| | (_| | (_| |
|_| \___/|___/\__\__,_|\__,_|\__,_|
Modern dev tools are bloated. Postman takes 5-10 seconds to launch. Postdad takes <100ms.
| Feature | Postman/Insomnia | CURL/HTTPie | Postdad |
|---|---|---|---|
| Speed | π’ Slow (Electron) | β‘ Fast | π Blazing Fast (Rust) |
| RAM Usage | 500MB+ | ~5MB | ~15MB |
| Interface | Mouse Clicky | CLI Args | Vim-Style TUI |
| Storage | Cloud Sync (Forced) | History File | Local .hcl Files |
j, k, and / to fly through your request history.Ctrl+z to focus purely on the response data.cargo install Postdad
cargo install --force Postdad
Postdad
a: Add Param | d: Delete Param | e: Edit Key/Valuet: Switch Type (None/Bearer/Basic/OAuth2) | u: Edit User | p: Edit PasswordEnter to Start Flow | i/1/2 to Edit Configa: Add Rule | d: Delete Rule | e: Edit Key/Pathm: Switch Type (Raw/Multipart/GraphQL)a Add | Space Toggle File | d DeleteQ (Shift+q) Edit Query | V (Shift+v) Edit Variables.hcl support)c key)jsonpath_lib)/ key)f key)b key -> $EDITOR)
export EDITOR="code --wait" (Mac/Linux) or set $env:EDITOR="code --wait" (PowerShell).m key)Space)? key)H key -> $EDITOR as JSON)s key -> saved.hcl)Set-Cookie headers for stateful sessionsG and J keysCtrl+W to toggle mode, real-time messaging, and connection managementP to edit)Ctrl+R)Ctrl+T)Ctrl+W to enter)Ctrl+R to enter)Run all requests in a collection sequentially and see pass/fail results.
Status Code Assertions:
By default, expects HTTP 200. Add expected_status = XXX in your .hcl file to specify a different expected status:
request "Create User" {
method = "POST"
url = "https://api.example.com/users"
expected_status = 201
}
P to edit)Press P to open your $EDITOR and write Rhai scripts that run before each request.
Available Functions:
| Function | Description |
|---|---|
set_header(name, value) |
Add or modify a request header |
get_header(name) |
Get current header value |
set_var(name, value) |
Set an environment variable |
get_var(name) |
Get an environment variable |
set_body(body) |
Override the request body |
set_url(url) |
Override the request URL |
timestamp() |
Get Unix timestamp (seconds) |
timestamp_ms() |
Get Unix timestamp (milliseconds) |
uuid() |
Generate a random UUID v4 |
base64_encode(text) |
Encode text as Base64 |
base64_decode(text) |
Decode Base64 text |
print(msg) |
Debug log (shows in output) |
Constants: METHOD, URL, BODY
Example Script:
// Add timestamp header to every request
let ts = timestamp();
set_header("X-Request-Time", ts.to_string());
// Add request ID
let id = uuid();
set_header("X-Request-ID", id);
To truly rival Postman, we still need:
.json) and OpenAPI/Swagger specspm.test())MIT