Comprehensive Posting TUI HTTP client commands and workflows for API testing in the terminal.
Installation
| Command | Description |
|---|
uv tool install posting | Install Posting via uv (recommended) |
pipx install posting | Install Posting via pipx |
brew install posting | Install Posting via Homebrew (macOS) |
posting --version | Show Posting version |
posting | Launch Posting TUI |
posting --collection ./my-api | Launch with specific collection directory |
posting --env .env.dev | Launch with environment file |
Navigation
| Shortcut | Description |
|---|
Tab | Cycle focus between panels |
Shift + Tab | Cycle focus backwards |
Ctrl + J | Jump mode (jump to any panel by label) |
Ctrl + P | Open command palette |
Ctrl + Q | Quit Posting |
j / k | Move down/up in lists (Vim mode) |
g / G | Jump to top/bottom of list |
Escape | Close dialog or deselect |
Request Management
| Shortcut | Description |
|---|
Ctrl + N | Create new request |
Ctrl + S | Save current request |
Ctrl + Shift + S | Save request as new file |
Ctrl + D | Duplicate current request |
Ctrl + Delete | Delete current request |
Ctrl + R | Rename current request |
Enter | Send current request |
Ctrl + L | Focus URL bar |
HTTP Methods
| Method | Description |
|---|
GET | Retrieve resource |
POST | Create resource |
PUT | Update/replace resource |
PATCH | Partial update resource |
DELETE | Delete resource |
HEAD | Get headers only |
OPTIONS | Get supported methods |
Request Configuration
| Tab | Description |
|---|
| Headers tab | Add/edit request headers |
| Body tab | Set request body content |
| Query tab | Add URL query parameters |
| Auth tab | Configure authentication |
| Options tab | Set request-specific options |
| Scripts tab | Pre/post request Python scripts |
Environment Variables
| Action | Description |
|---|
$VARIABLE_NAME in URL | Reference environment variable |
${VARIABLE_NAME} in body | Interpolate variable in body |
posting --env .env.dev | Load environment file at startup |
.env file in collection root | Auto-loaded environment |
.env.local override file | Local overrides (gitignored) |
YAML Request Files
| Field | Description |
|---|
name: My Request | Request display name |
method: POST | HTTP method |
url: https://api.example.com/users | Target URL |
headers: | Request headers mapping |
body: | Request body content |
params: | Query parameters |
auth: | Authentication configuration |
scripts: | Pre/post request scripts |
Example Request File
name: Create User
description: Create a new user account
method: POST
url: https://api.example.com/users
headers:
Content-Type: application/json
Authorization: Bearer ${API_TOKEN}
body:
content: |
{
"name": "John Doe",
"email": "john@example.com"
}
Authentication Types
| Type | Description |
|---|
| Bearer Token | Authorization: Bearer <token> |
| Basic Auth | Base64-encoded username:password |
| API Key | Custom header with API key |
| No Auth | No authentication |
Pre/Post Request Scripts
| Hook | Description |
|---|
pre_request.py | Python script run before request |
post_request.py | Python script run after response |
Access request object | Modify request in pre-script |
Access response object | Process response in post-script |
| Set variables | Store values for subsequent requests |
Response Viewer
| Feature | Description |
|---|
| Body tab | View response body with syntax highlighting |
| Headers tab | View response headers |
| Status code display | HTTP status code and text |
| Response time | Request duration in milliseconds |
| Response size | Response body size |
Ctrl + F | Search within response body |
Collection Management
| Action | Description |
|---|
| Directory structure = Collection | Folder hierarchy organizes requests |
| Create subdirectory | Group related requests |
.yaml files = Requests | Each YAML file is one request |
posting --collection <dir> | Open specific collection |
| Version control with Git | YAML files are git-friendly |
Import/Export
| Action | Description |
|---|
| Paste curl command in URL bar | Import from curl |
Ctrl + E | Export current request as curl |
| Import from Postman | Import Postman collections |
| Import from OpenAPI | Import OpenAPI/Swagger specs |
| YAML files are portable | Share requests via files |
Configuration
| Setting | Description |
|---|
~/.config/posting/config.yaml | Global configuration file |
theme: monokai | Set color theme |
vim_mode: true | Enable Vim key bindings |
editor: nvim | Set external editor |
pager: less | Set external pager |
timeout: 30 | Default request timeout (seconds) |
Themes
| Command | Description |
|---|
posting --theme monokai | Launch with Monokai theme |
posting --theme dracula | Launch with Dracula theme |
posting --theme solarized | Launch with Solarized theme |
| Custom theme in config | Define your own color scheme |
posting --list-themes | Show available themes |
Tips and Best Practices
| Tip | Description |
|---|
Use jump mode (Ctrl+J) | Navigate faster than tabbing |
| Store requests in Git | Version control your API tests |
| Use environment files | Switch between dev/staging/prod |
| Write pre/post scripts | Automate auth token refresh |
Use Ctrl+P command palette | Discover features quickly |
| Organize in folders | Group related endpoints together |
| Use variables in URLs | Keep requests DRY and flexible |
Open in $EDITOR for complex bodies | Edit large payloads externally |