# Postdad π
> "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.
<pre>
____ _ _ _
| _ \ ___ ___| |_ __| | __ _ __| |
| |_) / _ \/ __| __/ _` |/ _` |/ _` |
| __/ (_) \__ \ || (_| | (_| | (_| |
|_| \___/|___/\__\__,_|\__,_|\__,_|
</pre>
## Why Postdad?
Modern dev tools are bloated. Postman takes 5-10 seconds to launch. Postdad takes **<100ms**.
| **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** |
## Features
- **Vim-Motion Navigation**: Use `j`, `k`, and `/` to fly through your request history.
- **Three-Pane Layout**: Collections on the left, Request on top, Response at bottom.
- **JSON Explorer**: Interactive tree view for massive JSON responses. Expansion/Collapse nodes with arrow keys.
- **Dad's Garage**: Local-first collection storage. No login required.
- **Async & Non-Blocking**: The UI never freezes, even if the API times out.
## Installation
```bash
cargo install postdad
```
## Usage
```bash
postdad
```
- **Enter**: Send Request
- **e**: Edit URL
- **Tab**: Switch Request Tabs (Params, Headers, Body)
- **q**: Quit (Dad needs a nap)
## Roadmap to Recognition
- [x] Basic TUI Engine
- [x] Async Request Worker
- [x] JSON Response Explorer (Interactive)
- [x] Collection Management (`.hcl` support)
- [x] "Dad's Directions" (Copy as Curl) (`c` key)
- [x] Response Timing (ms precision)
- [x] Search / Filter JSON (`/` key)
- [x] Environment Variables
- [x] Request Body Editor (`b` key -> `$EDITOR`)
- *Pro Tip*: For VS Code integration, run `export EDITOR="code --wait"` (Mac/Linux) or set `$env:EDITOR="code --wait"` (PowerShell).
- [x] Method Cycling (`m` key)
- [x] Status Codes (Color-coded)
- [x] Help Screen (`?` key)
- [x] Header Editing (`H` key -> `$EDITOR` as JSON)
- [x] Persistence (`s` key -> `saved.hcl`)
## License
MIT