A terminal UI for browsing and executing Postman collections with vim-style navigation.
- Browse Postman collections in a terminal interface
- Execute HTTP requests and view responses
- Vim-style keyboard navigation
- Persistent session state
- Environment variable support
- Request and collection editing
- gRPC request editing with live server reflection
- Workflow automation with inline JavaScript orchestration
- Path parameter editing (
:idstyle) per request - Variable autocomplete with resolved value preview when typing
{{
go build -o postOffice# Run the application
./postOffice
# Run with file operation logging (for debugging)
./postOffice --log debug.logLists (Collections / Requests / Environments / Variables):
j/kor↓/↑— navigate itemsg/G— jump to top / bottomenter— select item (open folder, execute request)e— edit selected requestE— edit scripts for selected requestd— delete selected requestD— duplicate selected requesti— show info for selected itemJ— show raw JSON for selected itemH— view saved responses for selected requestr— refresh current view/— search / filter items?— show helph/esc/backspace— go back / up one folder levelqorctrl+c— quit
Overlay views (Response / Info / JSON / Log):
j/kor↓/↑— scrollg/GorHome/End— jump to top / bottomd/uorPage Down/Up— scroll half pageqoresc/h/backspace— close view
Request execution:
enter— execute selected requestctrl+e— re-execute selected requestctrl+r— view last response for selected request (without re-executing)y— copy response body (in response view)Y— copy full response (in response view)s— save response (in response view)
Workflow detail view:
j/k— navigate stepsg/G— jump to first / last stepa— add stepe— edit step requestE— edit step scriptsu— run workflow up to this stepf— run workflow from this stepr— run this step onlyR— run full workflowctrl+r— view last response for this stepctrl+d— delete stepi— inspect step request info
Command Mode:
Press : to enter command mode:
:load <path>or:l <path>— load a Postman collection:loadenv <path>or:le <path>— load an environment file:collectionsor:c— switch to collections view:requestsor:r— switch to requests view:environmentsor:env— switch to environments view:variablesor:var— show all variables:infoor:i— display item info:edit— edit selected request:wf— browse workflows:wf run <id>— run a workflow by ID:wf new <id>— create a new workflow:w— save changes to file:wq— save changes and quit:changesor:ch— show unsaved changes:helpor:hor?— show help:quitor:q— exit
Search Mode:
Press / to enter search mode:
- type to filter items (results update as you type)
enter— confirm searchesc— cancel search
Collections and environments are automatically saved to ~/.postoffice_collections.json and restored on next startup.
When loading files, ~/ is expanded to your home directory:
:load ~/postman/my-collection.json
- Navigate to a request using
j/k - Press
enterto execute - View the response — use
j/kto scroll,d/ufor half-page scrolling - Press
qorescto close - Press
ctrl+rto view the last response without re-executing
- Navigate to a request and press
eor use:edit - Use
j/kto navigate between fields (Name, Method, URL, path params, Headers, Body) - Press
enterto edit a field - For single-line fields (Name, Method, URL, path params):
- Type your changes
- Press
enterto save - Press
escto cancel
- For multi-line fields (Headers, Body):
- Type your changes
- Press
enterfor newlines - Press
ctrl+sto save - Press
escto cancel
- Press
escto exit edit mode (changes saved to memory) - Use
:wto write changes to file - Use
:wqto write changes and quit
Path Parameters:
Requests with URL path parameters (e.g. /api/v1/claims/:id) show each :param as a dedicated editable field below the URL. Set a value and it will be substituted into the URL before the request is sent. Values persist for the session — executing the request from the list will reuse the last-set values.
Variable Autocomplete:
Type {{ in any field (URL, path params, headers, body) to trigger variable autocomplete. Matching variables from the active environment and collection are shown with their resolved values. Press Tab to insert the highlighted suggestion; press Tab again to cycle through alternatives. The URL field also shows a resolved preview (→ full-url) combining variable substitution and path param values.
Managing Unsaved Changes:
:changes- View all unsaved changes- In changes view:
d- Discard selected changectrl+d- Discard all changesesc- Close changes view
Workflows automate multi-request sequences with inline JavaScript. Each workflow is a single YAML file stored in a workflows/ directory next to the collection file.
id: login-and-fetch-users
name: Login and Fetch Users
description: Authenticate and fetch users
version: 1
steps:
- id: login
request: Auth/Login
- id: list-users
request: Users/List Users
script: |
export default async function (wf, pm) {
const loginResult = await wf.run("login");
if (loginResult.response.code !== 201) {
wf.fail("Login failed");
return;
}
const data = loginResult.response.json();
pm.collectionVariables.set("authToken", "token-" + data.id);
const listResult = await wf.run("list-users");
const users = listResult.response.json();
console.log("Found " + users.length + " users");
}TUI commands:
:wf— browse available workflows:wf run <id>— run a workflow by ID:wf new <id>— create a new workflow skeleton
Workflow list keys:
enter— open workflow detailctrl+r— run selected workflow
Workflow detail keys:
R— run full workflowu— run up to selected stepf— run from selected stepr— run selected step onlyctrl+r— view last response for selected step
The workflow script receives wf (workflow control API) and pm (full Postman-compatible scripting API). Pre/post request scripts attached to collection requests are triggered automatically on each step.
See docs/workflows.md for full documentation.
PostOffice supports gRPC requests stored in Postman collections (method GRPC or URL scheme grpc://). A dedicated edit form replaces the standard HTTP edit fields.
- Navigate to a gRPC request and press
eor use:edit - Use
j/kto navigate between fields:- Name — request name in the collection
- Endpoint — server address, e.g.
localhost:50051 - Service/Method — fully-qualified method path, e.g.
helloworld.Greeter/SayHello - Metadata — gRPC metadata headers, one
Key: Valueper line - Message — JSON request body sent as the protobuf message
- TLS —
Enabled/Disabled (insecure)— pressEnterto toggle
TLS state is stored in the URL scheme: grpc:// for insecure, grpcs:// for TLS with system certificate roots.
- Press
enterto edit a field (single-line fields:enterto save,escto cancel) - For multi-line fields (Metadata, Message): press
ctrl+sto save,escto cancel - Press
escto exit edit mode, then:wto write to file
When the cursor is on the Service/Method field, press Ctrl+R to browse the server's available services and methods via gRPC reflection:
- PostOffice connects to the endpoint and lists all services
- Navigate services with
j/k, pressenterto expand a service's methods - Navigate methods with
j/k, pressenterto select a method:- Service/Method is filled with the selected method's full path
- Message is pre-filled with a JSON template generated from the method's protobuf input type
- Press
escto return to the method list, pressescagain to return to the edit form without selecting
The reflection connection is insecure (no TLS). For TLS-enabled servers, edit the Service/Method field manually.
- Press
vto open variable management - Load an environment file with
:load <env-path> - Edit variable values directly in the UI
- Variables are automatically applied to requests
Enable file operation logging to troubleshoot issues:
./postOffice --log debug.logThe log file will contain:
[FILE_OPEN]- File read attempts[FILE_WRITE]- File write attempts[ERROR]- Any errors encountered
# Format code
go fmt ./...
# Vet code
go vet ./...
# Run tests
go test ./...MIT