Output formats
The output contract every command shares: formats, fields, and templates.
Every command renders through one formatter, so the same flags work everywhere.
Pick a format with -o, or let st choose: a table when writing to a terminal,
JSONL when piped.
Formats
st app 620 -o table # a rounded, color-aware grid for reading
st app 620 -o markdown # a GitHub pipe table to paste into docs (alias: md)
st app 620 -o jsonl # one JSON object per line, for piping
st app 620 -o json # a single JSON array
st app 620 -o csv # spreadsheet friendly
st app 620 -o tsv # tab-separated
st app 620 -o url # just the URL column
st app 620 -o raw # the underlying bytes, unformatted
| Format | Best for |
|---|---|
table |
Reading on a terminal: a rounded border with an accented header |
markdown |
Pasting into a README, issue, or PR (alias md) |
jsonl |
Piping into another tool, one object at a time |
json |
Loading a whole result as an array |
csv / tsv |
Spreadsheets and quick column math |
url |
Feeding URLs into other commands |
raw |
The unformatted bytes (response bodies) |
Color
On an interactive terminal the table and json/jsonl formats are colored: the
table draws a dim border with an accented header, and JSON keys, strings, numbers,
and literals are highlighted. Color is suppressed the moment output is not a
terminal, so a pipe always gets plain, parseable bytes. Force the choice with
--color always|never (or set NO_COLOR). markdown, csv, tsv, url, and
raw are never colored, so they stay safe to redirect into a file.
Narrowing columns
Keep only the fields you want:
st app 620 --fields id,name,url
--no-header drops the header row in table and csv output, which helps when a
downstream tool expects bare rows.
Templating rows
For full control over each line, apply a Go text/template. Fields are the JSON
keys exactly as they appear in -o json, so they are lowercase and snake_case:
st search portal --template '{{.id}} {{.name}}'
Why auto-detection helps
Because the default adapts to the destination, the same command reads well by hand and parses cleanly in a pipe:
st search portal # a table, because this is a terminal
st search portal | wc -l # JSONL, because this is a pipe
You only reach for -o when you want something other than that default.