~/data-wrangler > ready
# parse, reshape and convert CSV, TSV, JSON, Markdown and key=value logs. runs in your browser, nothing is uploaded
Sources
Parse
Add a file or paste some text first.
First row is header
Split on any one of these characters
Collapse repeated delimiters
Skip blank rows
Trim cells
Flatten nested objects
Detect using lines
to
Max columns keeps the rest of the line, delimiters and all, in the last column. Useful for logs with fixed leading fields and a free text message.
Cut positions are 0-based character offsets where a new column starts, so
6,19 gives 0-5, 6-18 and 19 to the end of the line. Widths are counted from the left instead, and whatever is left over becomes a final column. Detect fills these in from the line range above. Fixed width cells are always trimmed.Combine sources
Key columns (must exist in every source)
Add _source column
Parsed
Steps
Result
Format
Header row
Pretty print
Numbers and true/false as JSON types
Formula guard
UTF-8 BOM (Excel)
Formula guard prefixes a ' to cells starting with = + - @ (numbers excepted) so a spreadsheet will not run them. Leave it off if the file is going to a script.
Split into files
Preview
About
Takes CSV, TSV, any delimiter or set of delimiters, fixed width columns, JSON or JSON lines, Markdown tables and key=value log lines, runs them through a list of steps, and writes CSV, TSV, JSON, JSON lines or Markdown.
input add one or more sources. Each source has its own parse settings. Auto detect looks at the line range you give it, so a file with a preamble or a mixed header can be pointed at the lines that matter. It also recognises fixed width columns, and log lines whose leading fields have the same shape on every line, where the rest of the line is one message. Both can be set by hand: cut positions or widths for fixed width, a max column count for the message case. Two or more sources can be appended (columns lined up by name) or joined on key columns.
transform steps run top to bottom and can be switched off, moved, collapsed to just their header and result line, or removed. A step that fails is skipped and shows why. For firewall exports where every field carries its own name (timestamp=2026-05-20 20:05,src=10.0.0.1) either parse as key=value, or use the "key=value cells to columns" step on an already split table. Both line fields up by key, so missing or reordered fields do not shift columns.
output pick a format, optionally split into files by row count, percentage or column value, and download. Split files each carry the header.
Everything runs client side. There is no network call, no analytics and no dependency. Data and settings are autosaved to this browser's local storage until you press Reset; very large inputs are not autosaved. Regex steps run your own patterns on the main thread, so a catastrophic pattern can hang the tab.
input add one or more sources. Each source has its own parse settings. Auto detect looks at the line range you give it, so a file with a preamble or a mixed header can be pointed at the lines that matter. It also recognises fixed width columns, and log lines whose leading fields have the same shape on every line, where the rest of the line is one message. Both can be set by hand: cut positions or widths for fixed width, a max column count for the message case. Two or more sources can be appended (columns lined up by name) or joined on key columns.
transform steps run top to bottom and can be switched off, moved, collapsed to just their header and result line, or removed. A step that fails is skipped and shows why. For firewall exports where every field carries its own name (timestamp=2026-05-20 20:05,src=10.0.0.1) either parse as key=value, or use the "key=value cells to columns" step on an already split table. Both line fields up by key, so missing or reordered fields do not shift columns.
output pick a format, optionally split into files by row count, percentage or column value, and download. Split files each carry the header.
Everything runs client side. There is no network call, no analytics and no dependency. Data and settings are autosaved to this browser's local storage until you press Reset; very large inputs are not autosaved. Regex steps run your own patterns on the main thread, so a catastrophic pattern can hang the tab.