Testing and debugging REST APIs from a Linux workstation often forces developers into an awkward compromise. Lightweight command-line tools like curl and httpie are fast but lack interactive request-building environments and persistent history, while heavyweight electron applications like Postman and Insomnia consume substantial RAM and clutter desktop workspaces. Posting bridges this gap by delivering a modern, keyboard-centric API client directly inside the Linux terminal.
Built using Python and the Textual TUI framework, Posting provides a gorgeous interactive interface with full mouse support, vim-style navigation, syntax highlighting, environment variable management, and automated command-line script generation.
Why Use Posting as Your Primary Terminal API Client?
Unlike raw shell commands or cumbersome desktop GUI suites, Posting introduces several key operational advantages:
- Lightweight Resource Footprint: Runs entirely within your terminal emulator, launching in milliseconds and using a fraction of the system memory required by Chromium-based GUI tools.
- Full Keyboard and Mouse Navigation: Navigate seamlessly between headers, URL parameters, request bodies, and response inspectors using vim keys (
j/k/Tab) or standard mouse clicks. - Environment and Secret Management: Organise dynamic configuration variables into reusable environments (such as Local, Staging, and Production) with secure
.envfile integration. - Built-In Syntax Highlighting: Formats and highlights JSON, XML, HTML, and YAML responses automatically using the Python Pygments engine.
- Copy as cURL: Generate instant, production-ready
curlcommands from any interactive request with a single keypress.
How to Install Posting on Linux
Posting is packaged and distributed via Python packaging tools. The recommended installation method is using pipx, which isolates the application and its dependencies into a sandboxed environment while exposing the binary globally in your $PATH.
1. Installing pipx
If you do not have pipx installed on your Linux distribution:
# Ubuntu / Debian / Linux Mint
sudo apt update && sudo apt install -y pipx
pipx ensurepath
# Fedora / RHEL
sudo dnf install -y pipx
pipx ensurepath
# Arch Linux / Manjaro
sudo pacman -S python-pipx
pipx ensurepath
2. Installing Posting via pipx
Once pipx is configured, install Posting with a single command:
pipx install posting
To upgrade Posting to future releases later, simply run:
pipx upgrade posting
Alternative: Running via uv
If you use Astral’s ultra-fast uv toolchain, you can execute Posting instantly without manual installation:
uvx posting
Launching and Navigating Posting
To start the application, simply execute:
posting
Or launch it with a target collection directory:
posting --collection ~/projects/api-collection
The interface is structured into three primary panes:
- Left Sidebar: Request collections, saved endpoints, and history logs.
- Top / Center Panel: HTTP method selector (GET, POST, PUT, DELETE, PATCH), URL address bar, query parameter tables, headers, authentication, and payload bodies.
- Bottom / Right Panel: Response viewer displaying status codes (e.g.
200 OK), round-trip response time, payload byte size, and formatted JSON bodies.
Core Keybindings Reference
| Keybinding | Action | Workflow Purpose |
|---|---|---|
Ctrl + J (or Enter) |
Send Request | Dispatches the active HTTP request immediately. |
Tab / Shift + Tab |
Next / Previous Field | Navigates between URL bar, headers, parameters, and response panes. |
Ctrl + P |
Command Palette | Opens search modal to execute actions, switch themes, or jump views. |
Ctrl + S |
Save Request | Saves active query into the current collection file. |
Ctrl + E |
Switch Environment | Toggles between staging, local development, and production variables. |
Ctrl + C / q |
Quit | Exits Posting cleanly and returns to your shell prompt. |
Building and Sending Your First API Request
Sending a test request takes only seconds:
- In the method selector, use the arrow keys to choose GET (or press
Tabto enter the URL bar). - Type your target endpoint:
https://jsonplaceholder.typicode.com/posts/1 - Press
Ctrl + Jto dispatch the request. - Inspect the response in the right pane: review the HTTP status badge (
200 OK), elapsed response time (e.g.42ms), and the syntax-highlighted JSON payload.
Managing Environments and Dynamic Variables
Hardcoding server hosts and authentication tokens into every URL is inefficient. Posting uses simple YAML files to define dynamic variables:
- Create an environment file at
~/.config/posting/environments/dev.yaml:name: Local Development variables: base_url: http://localhost:8000 auth_token: dev_bearer_token_9941 - In Posting, use the double-bracket syntax to reference variables in URLs and headers:
{{base_url}}/api/v1/users - In the Headers tab, set
AuthorizationtoBearer {{auth_token}}. - Press
Ctrl + Eto toggle environments between dev, staging, and production on the fly.
Exporting Requests as cURL Commands
When collaborating with colleagues who do not have Posting installed, or when scripting automated CI/CD bash tests, press Ctrl + P to open the command palette and select Copy as cURL. Posting copies an exact, properly escaped shell command containing all active headers, auth tokens, and payload bodies straight to your Linux system clipboard.