@beast01/tcurl
v1.0.2
Published
An interactive terminal UI (TUI) for building, sending, and saving HTTP requests — curl, but comfortable.
Maintainers
Readme
tcurl
An interactive terminal UI (TUI) for building, sending, and saving HTTP
requests — curl, but comfortable. Create requests of any method
(GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS), tweak headers,
query params, body and auth, fire them off, and browse the response — all
without leaving your terminal. Requests are saved to disk so you can reuse
them later.
Styled with the Gruvbox and Ember color themes. Works on macOS, Linux, and Windows (any terminal with a TTY). Zero native dependencies.
┌ tcurl — interactive HTTP client ──────────────── gruvbox ┐
│ ┌ Saved requests (2) ──┐ ┌ GET Get users ──────────────┐ │
│ │ ❯ GET Get users │ │ GET https://api.site/users │ │
│ │ POST Create user │ │ Auth bearer │ │
│ └──────────────────────┘ │ Headers 2 │ │
│ └──────────────────────────────┘ │
│ n new ↵ edit s send d delete y curl ? help │
└──────────────────────────────────────────────────────────┘Install
npm install -g tcurlRequires Node.js ≥ 18.
Usage
tcurl # launch the interactive TUI
tcurl https://api.example.com # launch with a new request prefilled
tcurl -X POST https://api.example.com/items
tcurl --theme ember # start with the Ember theme
tcurl --helpKeyboard — vim/nvim motions everywhere
List view
| Key | Action |
| ------------ | ------------------------------- |
| j / k | Move selection down / up |
| gg / G | First / last request |
| n | New request |
| Enter / e| Edit request |
| s | Send request |
| d | Delete request |
| y | Copy as curl (prints on exit) |
| t | Cycle theme (gruvbox / ember) |
| ? | Help |
| q / Ctrl+C | Quit |
Editor — field navigation
| Key | Action |
| ------------------ | -------------------------------------------- |
| j / k / Tab | Move between fields |
| gg / G | First / last field |
| h / l | Change method, body type, toggles |
| i / a / Enter| Edit the focused field |
| Esc | Back to list (auto-saves) |
Field editor — modal (INSERT / NORMAL, like nvim)
Fields open in INSERT mode so you can type right away; press Esc for
NORMAL mode and vim motions.
| Key | Action |
| ------------------- | ---------------------------------------- |
| Esc | INSERT → NORMAL |
| i a I A o O | NORMAL → INSERT (at cursor, after, line start/end, open line) |
| h j k l | Move by char / line |
| w / b / e | Word forward / back / end |
| 0 / $ | Line start / end |
| gg / G | Buffer start / end |
| x / dd | Delete char / line |
| Enter / Ctrl+S | Save the field |
| Esc (in NORMAL) | Cancel the edit |
Response
| Key | Action |
| ----------------- | --------------------- |
| j / k | Scroll down / up |
| Ctrl+d / Ctrl+u | Half-page down / up |
| Ctrl+f / Ctrl+b | Full-page down / up |
| g / G | Top / bottom |
| h / l / Tab | Body ↔ Headers |
| q / Esc | Back |
Features
- All HTTP methods — GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS.
- Body modes — none, raw text, JSON (auto content-type), and
URL-encoded form (
key=valueper line). - Headers & query params — edited as simple
Key: Value/key=valuelines. - Auth — Bearer token or HTTP Basic (username / password).
- Redirects — follow (with method downgrade on 301/302/303) or manual.
- TLS control — toggle certificate verification for self-signed hosts.
- Timeouts & cancellation — per-request timeout in milliseconds (default
30 000; set
0to disable). While a request is in flight, pressEsc(orq) to abort it immediately — even with no timeout set — andCtrl+Calways quits, so a hung server can never lock you up. - Pretty responses — JSON is auto-formatted; scrollable body & headers with status, timing, and size.
- Persistence — requests are stored as JSON and reused across sessions.
- Export — copy any saved request as an equivalent
curlcommand. - Vim/nvim motions —
j/k,gg/G,h/lnavigation throughout, plus a fully modal (INSERT / NORMAL) field editor withw/b/e,0/$,x,dd,o/O, andCtrl+d/Ctrl+uscrolling.
Where is my data?
Saved requests and your theme choice live in a single JSON file under your
platform's config directory (via env-paths):
- Linux:
~/.config/tcurl/store.json - macOS:
~/Library/Preferences/tcurl/store.json - Windows:
%APPDATA%\tcurl\Config\store.json
Development
npm install
npm run build # compile TypeScript to dist/
npm run dev # watch-compile
node dist/cli.js # run locallyLicense
MIT
