YAML to TSV
Turn a YAML list of records into a table. Every key seen anywhere in the list becomes a column, each list item becomes a row, and items missing a key get an empty cell. This works on the shape YAML is genuinely used for as data — a list of services, users, test cases, config entries — and is honest about its limits: arbitrary nested YAML is not a table, and this page will tell you so rather than mangle it. The reverse trip is TSV → YAML.
How to use
- Paste a YAML list — every record starts with
-at the same indentation. - Check the status line for the item and column counts before trusting the output.
- Copy or download. Columns appear in first-seen order across the whole list.
What's supported, precisely
A top-level sequence of mappings, with scalar values:
- name: api
port: 8080
region: eu-central
- name: worker
port: 9000
Quoted values (single or double) are unquoted; ~ and null become empty cells; # comments and --- document markers are skipped. One level of nested mapping is flattened with a dotted column name, so:
- name: api
limits:
cpu: 2
memory: 1Gi
produces columns name, limits.cpu, and limits.memory. Anything deeper than that, plus block scalars (| and >), anchors and aliases (&ref / *ref), and nested sequences, are outside what this parser handles.
If your YAML is more complex than this, convert it to JSON first with a real YAML library (yq -o=json, or python -c "import yaml,json;print(json.dumps(yaml.safe_load(open('f.yaml'))))") and then use JSON → TSV, which handles arbitrary arrays of objects. That route is not a workaround for a deficiency — a full YAML parser is a large dependency, and shipping one to flatten config files would make every page on this site slower to load.
FAQ
It says "expected a YAML list of maps".
Your document's top level is a mapping rather than a sequence — it starts with key: instead of - key:. If the records live under a top-level key (services: then the list), delete that line and dedent the list, or select just the list portion when pasting.
My multi-line strings came out wrong.
Block scalars aren't supported — a value written with | or > and continued on following lines comes through empty or partial. TSV has nowhere to put a newline anyway, so even with full parsing you'd need to collapse it. Convert via JSON and then decide how to fold those fields.
Are numbers converted to numbers?
No — everything stays as text, exactly as written. That's what keeps version: 1.10 from becoming 1.1 and a zip code like 01234 from losing its zero. If you want typed values downstream, use TSV → JSON with the coerce option on the way out.
Does key order matter?
Only for column order. Records may list their keys in any order and the values still land in the right columns; the header order is set by the first record that mentions each key. Rearrange afterwards with extract columns if you need a specific layout.
Privacy
100% client-side. No upload. See the privacy policy.