A table preview is a small feature with a useful opinion.
Zed 1.23.1-pre adds JSONL and NDJSON to its tabular data preview. The preview opens beside the source. The release is marked as a prerelease, so this is a current preview feature rather than a settled stable contract.[1]
The implementation pull request explains the behavior. Each nonblank line must be a JSON object. Top-level keys become columns in first-seen order. Later keys add columns. Nested values stay compact JSON. Missing fields, JSON null, the string "null", and an empty string remain different values.[2]
Keep the source as the receipt. Use the table as the inspection light.
One line gives failure a location.
The JSON Lines format has three short rules. Use UTF-8. Put one valid JSON value on each line. Separate values with a line terminator. Its documentation recommends a final line terminator because that makes concatenation easier.[3]
For agent runs, one record per line gives every event a stable physical location. A parser can report line 37 without rejecting the identity of lines 1 through 36. A shell pipeline can start reading before the producer closes the file. An append does not require rewriting one large array.
A row needs enough identity to stand alone.
A useful event record names the run, sequence, time, event, status, and evidence pointer. Add task or tool identifiers when one run can contain parallel work. Do not make the reader infer order from timestamps alone. Clocks can repeat, drift, or arrive out of order.
Keep status words small and fixed. For example, use open, ok, error, and review. Put free text in a separate message field. If every producer invents a new status sentence, the table gains columns but loses a usable filter.
The table is not the storage contract.
Zed's pull request says the preview is read-only and parses the full file. It also says large-file performance was not benchmarked in that change. Those limits matter. A pleasant table does not make an unbounded trace cheap, durable, or safe to open.[2]
Keep rotation and retention outside the editor. Redact secrets before they reach the file. Treat nested payloads as links or bounded summaries when they can grow. If an evidence object is large, store its path and hash in the event rather than copying the whole object into every line.
Query the stream without erasing the stream.
The jq manual says jq reads a sequence of JSON values and runs the filter on each value. Its compact-output option writes each result as one line. That makes jq a natural inspection tool for JSONL without first wrapping the records in an array.[4]
Use jq -c 'select(.status == "error")' events.jsonl to extract error records while preserving one record per output line. Save the filter beside a runbook when it carries operational meaning. The command is part of the review method, not disposable terminal history.