POSTING 3 rebuilt in Go · one binary keys: 1–6 panes · ^O jump · ^P commands galaxy

posting

The API client that lives in your terminal.

Posting is a keyboard-driven HTTP client. Compose requests, switch environments and read responses without reaching for the mouse. Run it on your laptop, over SSH or inside a container, and keep every request as plain YAML next to your code.

go install github.com/darrenburns/posting/cmd/posting@latest

# theme Posting ships 37 themes. Pick one and the whole site follows.

# keyboard first

Every action is a keystroke away.

Jump anywhere with a short label, run any command from the palette, and let Posting handle the fiddly parts of HTTP. These are real screens from Posting 3.

Every pane, tab and request gets a label. Type it to go straight there.

# plain files

Your requests are files. Commit them.

A collection is a folder, and each request is a short YAML file. Review changes in pull requests, share them with your team, and branch them alongside your code.

Environments are ordinary .env files. Layer several with -e, switch between them while Posting is running, and see edits on disk straight away.

~ ❯ tree sample-api
sample-api
├── auth
│   ├── login.posting.yaml
│   └── me.posting.yaml
├── cors-preflight.posting.yaml
├── health.posting.yaml
├── local.env
├── staging.env
└── users
    ├── create-user.posting.yaml
    ├── delete-user.posting.yaml
    ├── get-user.posting.yaml
    ├── list-users.posting.yaml
    └── update-user.posting.yaml
2 directories, 11 files

~ ❯ cat sample-api/users/create-user.posting.yaml
name: Create user
description: Create a new user account.
method: POST
url: ${BASE_URL}/users
body:
  content: |-
    {
      "name": "Ada Lovelace",
      "email": "ada@example.com",
      "role": "admin"
    }
  content_type: application/json
auth:
  type: bearer_token
  bearer_token:
    token: ${API_TOKEN}
headers:
  - name: Content-Type
    value: application/json

# in the box

The rest of the toolkit.

autocompletion
Type $ in the URL, headers, query, auth or body to complete variable names. Header names complete too, each with a note on what it does.
url bar
Checks your work. Variables turn green when they resolve and red when they don't, and the finished URL is shown under the bar before you send.
authentication
Basic, Digest (MD5 and SHA-256) and bearer tokens, with variables allowed in every field.
responses
Pretty-printed, highlighted JSON with wrap and copy, plus headers, cookies and a timing trace for every request.
request tabs
Keep several requests open at once. Unsaved changes are marked with a dot.
editor & pager
Press F4 to edit a body in $EDITOR, or F3 to read it in $PAGER.
keymaps & config
Rebind any action. Configure Posting with config.yaml or POSTING_* environment variables.
layouts
Stack the request and response or put them side by side. Resize panes, switch to compact spacing, and click anything you like.
coding agents
Let Claude Code, Codex and other agents send requests through the Posting you have open with posting remote, and watch each one arrive. Set it up.
nerd font icons
Icons switch on automatically in Ghostty, and anywhere else with one setting.

# coming from Posting 2?

Bring everything with you.

Posting 3 is a ground-up rewrite, and it reads the files you already have. Point it at your collections and keep going.

  • *.posting.yamlread unchanged
  • .env filesread unchanged
  • themesread unchanged
  • keymapsread unchanged
  • config.yamlread unchanged

# install

One binary. Nothing else to install.

go install github.com/darrenburns/posting/cmd/posting@latest

It runs the same on your laptop, on a remote server over SSH, or inside a container.

# open source

Built in the open.

Posting is Apache 2.0 licensed and shaped by the people who use it. Follow the roadmap, report a bug or suggest a feature on GitHub, or sponsor development.