termipost

command module
v1.4.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 25, 2026 License: MIT Imports: 5 Imported by: 0

README

termipost

CI codecov Go Report Card Latest release Downloads Go version License

A Postman-like HTTP client for the terminal. Build, organize, send, and validate HTTP requests entirely from the keyboard — no mouse required. Built with Bubble Tea, Bubbles, and Lip Gloss.

termipost in action

A single-screen workspace puts the collection tree, the request editor, and the response side by side — pick a request, tweak it, send, and read the response without leaving the screen.

Features

  • Collections — group related requests; create, rename, delete.
  • Requests — set method, URL, headers, query params, and body; send and view the formatted response (status, headers, pretty-printed JSON body, timing).
  • Body editing — request and response bodies are syntax-highlighted as JSON. Prettify a request body in place with ctrl+f (it validates the JSON and reports the line/column of any error), with live valid/invalid feedback as you type a JSON body.
  • Tests — attach assertions (status code, header, body, latency) to a request and run it as a test. Run a whole collection to get an aggregate pass/fail/skip summary. A "test" is just a request with assertions.
  • Environments — define multiple environments (e.g. local, prod), each with its own variables; switch the active one. References use {{name}}.
  • Secrets — keep tokens and keys in a single gitignored secrets file; values are masked everywhere in the UI but sent for real over the wire.
  • Keyboard-only — every action has a key binding, and the bar at the bottom of each screen always shows what is available in the current context.

Install

Homebrew (macOS / Linux)
brew tap gabriel-ballesteros/tap
brew install termipost
Windows / direct download

Download the archive for your platform from the latest release.zip for Windows, .tar.gz for macOS/Linux — extract it, and put the termipost (or termipost.exe) binary on your PATH.

Go
go install github.com/gabriel-ballesteros/termipost@latest

Check your version with termipost --version.

Build from source

Requires Go 1.25 or later (matches the version in go.mod).

make build      # produces ./termipost, then run ./termipost
# or
make run        # build and run in one step

Data location

All data is stored as human-readable JSON under your OS config dir (~/.config/termipost on Linux/macOS, falling back to ~/.termipost):

config.json              app settings + active environment
collections/<id>.json    a collection with its requests and assertions
environments/<id>.json   an environment's variables
secrets.json             global secrets (gitignored automatically)
.gitignore               excludes secrets.json

Files are safe to read and hand-edit. Malformed files are reported on startup and skipped rather than overwritten.

Keys (high level)

  • ↑/↓ or j/k to move, enter to open, esc to go back, q to quit.
  • Lists: n new, r rename, d delete.
  • Collections: R run all tests, e environments.
  • Request editor: tab/↑↓ to move between fields (including Assertions), enter to edit/open the focused field, ←/→ to cycle the method. Jump straight to a field with its first letter — n name, m method, u url, h headers, p params, b body, a assertions. Then R run (send and show the response, ignoring assertions), T test (send and check assertions), ctrl+s save.
  • Response view: ↑/↓ scroll, c (or y) copy the body to the clipboard (ctrl+c is reserved for quit), esc back.
  • Environments: a set active, enter edit variables, s secrets.

The bottom action bar always lists the keys for the current screen.

Development

make test       # run unit + TUI smoke tests
make fmt        # gofmt
make vet        # go vet

Documentation

Overview

Command termipost is a terminal UI for building, sending, and validating HTTP requests — a Postman-like client for the terminal.

Directories

Path Synopsis
internal
domain
Package domain defines the core data types for termipost: collections, requests, assertions, environments, and secrets, plus the result types produced when requests are run as tests.
Package domain defines the core data types for termipost: collections, requests, assertions, environments, and secrets, plus the result types produced when requests are run as tests.
httpclient
Package httpclient sends a domain.Request over HTTP after resolving its {{variable}} references, and returns the response with timing.
Package httpclient sends a domain.Request over HTTP after resolving its {{variable}} references, and returns the response with timing.
model
Package model implements the Bubble Tea TUI for termipost: a root model that owns shared state and a navigation stack of screens, each of which renders a view and a contextual action/help bar.
Package model implements the Bubble Tea TUI for termipost: a root model that owns shared state and a navigation stack of screens, each of which renders a view and a contextual action/help bar.
runner
Package runner evaluates a request's assertions against a response and runs requests (and whole collections) as tests.
Package runner evaluates a request's assertions against a response and runs requests (and whole collections) as tests.
store
Package store handles persistence of termipost data as human-readable JSON files.
Package store handles persistence of termipost data as human-readable JSON files.
syntax
Package syntax provides a single hand-written, position-tracking JSON scanner that powers three features over request/response bodies: syntax highlighting, live validation, and the prettify (format + validate) action.
Package syntax provides a single hand-written, position-tracking JSON scanner that powers three features over request/response bodies: syntax highlighting, live validation, and the prettify (format + validate) action.
ui
Package ui holds shared Lip Gloss styles and small rendering helpers used across termipost screens.
Package ui holds shared Lip Gloss styles and small rendering helpers used across termipost screens.
vars
Package vars resolves {{name}} references in request fields against the active environment and the global secrets store, and masks secret values for display.
Package vars resolves {{name}} references in request fields against the active environment and the global secrets store, and masks secret values for display.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL