csvkit.org
CSV (Comma-Separated Values) utilities, in the browser
Say hi →

Changelog

What's new on csvkit.org · most recent first

A short, honest log of what's been added, changed, or fixed. No marketing — just the actual edits. If something here looks broken or missing, please drop a note to [email protected].

2026-08-25 · Date formats, and two silent data-loss bugs

  • Change the date format in a CSV. Date formats reads ISO, slash/dash/dot, month names, 12-hour times, epoch seconds and milliseconds and Excel serial days, and writes any of ten presets or a custom token pattern. The columns that hold dates are detected on paste. Crucially, when a value is genuinely ambiguous — 03/04/2026, where both numbers are 12 or lower — it is counted and reported rather than quietly resolved, so a mixed-locale export cannot slip past you.
  • Fixed: CSV to SQL corrupted leading-zero values. A ZIP code, dialling code or padded product code was emitted as a bare numeral, so 007 inserted as 7 and 02134 as 2134, and CREATE TABLE typed the column BIGINT. Digit strings with a leading zero, and digit strings too long for BIGINT, are now quoted as text — the same line the .xlsx writer already drew.
  • Fixed: CSV to LaTeX double-escaped backslashes. The escaper ran in sequence, so a backslash became \textbackslash{} and the next pass escaped the braces it had just written — C:\path came out as C:\textbackslash\{\}path. It is now a single character-by-character pass, which cannot re-escape its own output.
  • Fixed: every file picker was unnamed. The prose next to each drop zone is a sibling, not a label, so a screen reader announced 60 tool pages' file inputs as an unnamed "file upload button". They are labelled now.
  • The column manipulator got rebuilt. CSV column manipulator loads as you paste instead of waiting for a Load click, each row now shows how full that column is and a few of its real values, rows are drag-reorderable (with Alt+↑/Alt+↓ on the handle for keyboards), and Keep all / Drop all / Invert / Reset handle wide files in one click. Renaming two columns to the same name used to collide and silently drop one; duplicates are now suffixed and reported.

2026-07-28 · 35 new tools, and a nav that can hold them

  • Excel, properly. CSV to Excel writes a real .xlsx (bold frozen header, auto column widths, numbers as numbers, leading zeros preserved as text), and Excel to CSV reads every sheet, converting date serials to ISO and exporting formula values. Both run in the browser — the workbook is unzipped locally.
  • SQL over a CSV. SQL on a CSV runs SELECT with WHERE, GROUP BY, HAVING, joins, and subqueries against a pasted file, with CSV and JSON export.
  • Analysis suite. Group & aggregate, Pivot table, Unpivot / melt, Value counts, Find duplicates, Data profile, Row & cell count, and Chart (bar / line / area / pie / scatter, SVG and PNG export, no chart library).
  • Real joins. Join on key — inner, left, right, full outer, with a match report and automatic suffixing of clashing column names.
  • File hygiene. Repair CSV (ragged rows, unclosed quotes, BOM, mixed newlines, with a change report), Encoding & BOM (UTF-8 / BOM / Windows-1252 / UTF-16, plus mojibake repair), Line endings, and Header row (add, remove, rename, promote row N, snake_case, de-duplicate).
  • Row and column surgery. Slice rows, Random sample and Shuffle (both seedable, so a sample is reproducible), Fill blanks (including fill-down for merged-cell exports), Trim whitespace (including invisible zero-width characters), Split column, Combine columns, Extract column, and Add column.
  • More converters. SQL to CSV, CSV to JSONL and back, CSV to GeoJSON and back, CSV to array (JS / Python / PHP / Ruby / JSON), CSV to LaTeX, CSV to ASCII table, and fixed width in both directions.
  • Sort now takes three keys. Sort sorts by up to three columns with independent directions, keeps blanks last by default, and is stable so equal rows hold their original order.
  • Mega-menu navigation. The tool list moved into a category menu in the header (and a drawer on mobile), since 68 tools no longer fit in a footer grid alone. Both the menu and the footer are generated from one list, so they can't drift apart.
  • Fixed: the line-ending converter used to lose real CR bytes because the output was read back out of a textarea, which normalises them to LF. Converted text is now kept outside the DOM, so copy and download carry the exact bytes.

2026-05-08 · Site redesign

  • Full-width layout. Removed the fixed-width container so tool panes can use the whole window.
  • Sidebar moved to footer. The left tool list is now a tile grid in the page footer, grouped by Convert / Inspect / Manipulate / Sample data.
  • Link colors. Links in body copy now read as links — bold links inherit the link color instead of falling back to ink.
  • Acronym annotations. Pages now spell out CSV (Comma-Separated Values) on first mention so first-time visitors aren't guessing.
  • Quote moved below tool. The author's intro/sig block now sits under the tool, not above the H1, so the tool is the first thing you see.

2026-03-12 · CSV to JSON / JSON to CSV

  • RFC 4180-correct quoting on both directions, with auto-detected delimiters and JSON Lines (NDJSON) output as a first-class option.
  • Strings stay strings — no silent coercion of 007 to 7.

2026-02-20 · CSV to SQL generator

  • Emits batched multi-row INSERT statements for PostgreSQL, MySQL, SQLite, and SQL Server.
  • Optional CREATE TABLE built from type inference over the whole file.

2026-02-04 · CSV diff

  • Cell-level diff between two versions of a CSV — highlights added, removed, and changed rows.

Earlier

Initial release: viewer, merge, dedupe, split. All 100% client-side.