What's new

Changelog

Every update to csvdiff.app — new features, improvements, and fixes. Shipped continuously, documented here.

v1.9Latest
New

Join CSV files on a shared key

Open several CSV or JSON files as tabs, then join two of them on a shared key column — the browser equivalent of a VLOOKUP or a SQL join, with no formulas and no database. Pick inner, left, right, or outer to control what happens to unmatched rows, filter and chart the combined table, and export it as CSV or JSON. Like everything else, it runs entirely in your browser — nothing is uploaded. It lives at its own page now: /join-csv-files.

v1.8
New

Clean messy columns with AI

Describe how you want a column tidied — in plain English — and AI turns it into a reusable find/replace rule. Strip Excel's ="…" formula wrappers, drop leading apostrophes, remove currency symbols and commas, trim stray whitespace, and more. You see a before → after preview on your real values before anything changes, and the rule applies to every cell and carries through to export. Like everything else, the request runs directly from your browser to your own AI key — no upload, no account.

Describe the cleanup
remove the ="…" wrapper and the quotes
AI ruleUNWRAPRemoves the leading = and all double quotes.
="H4339136200"H4339136200
="H8891245700"H8891245700
="H1002994411"H1002994411
Preview shown before it applies · rule runs on every row and carries through to export
v1.7
New

Chart your data

A new Chart button opens any table as a bar, donut, or line chart — picked automatically from the shape of your columns. It plots the rows you're currently looking at, so filters and sorts carry through, and each chart comes with a plain-English one-line takeaway (which category leads, the trend over time, the split of a total). Everything renders in the browser like the rest of the viewer — no upload, no account.

Order value by regionBar · auto-picked
North
West
South
East
North leads on order value — about 3× the East region.
Type picked from your columns · plots the rows you're viewing · renders in the browser
v1.6
New

Encoding detection & conversion

The viewer now detects the byte encoding of an uploaded file from its BOM — UTF-8, UTF-8 with BOM, or UTF-16 LE — and shows it as a badge in the header. On download you can re-encode to any of them from the export sheet. This also fixes a latent bug where UTF-16 files were mangled on open because the reader always assumed UTF-8.

Encodingdetected · UTF-16 LE
export.csv→ download as
UTF-8no BOM
UTF-8 with BOMExcel-friendly
UTF-16 LElegacy Windows
New

JSON files export back as JSON

Open a .json file in the viewer, clean or edit it, and the download now round-trips to valid JSON — nested objects and arrays rebuilt — instead of silently becoming a CSV. The encoding picker is hidden for JSON, which is always UTF-8.

JSON round-tripdata.json → data.json
idnamerole
1Ada Khaneng
2Sara Malikdesign
[
  { "id": "1",
    "name": "Ada Khan",
    "role": "eng" },
  { "id": "2",
    "name": "Sara Malik",
    "role": "design" }
]
New

Per-column text wrap

Wrap long text within a single column instead of truncating it, straight from the column menu (···). Handy for notes, descriptions, or any free-text field — the rest of the table stays compact.

Text wrapcolumn: notes
Wrap off
Owns the data pipeline migration; out on parental leave until August.
Wrap on
Owns the data pipeline migration; out on parental leave until August.
New

Redesigned product pages

The Compare and View landing pages now each get their own feature grid tuned to what that tool actually does — merge & resolve for diff, clean & search for the viewer — plus a matching "how it works" flow and a smooth transition into the table.

v1.5
New

Clean HTML & Render HTML column formats

Two new column format types for HTML-heavy data. Clean HTML strips tags and decodes entities to give you plain readable text. Render HTML displays the formatted output inline — auto-detected when a column contains markup. Both show in the Format menu (···) and respect the export formatted toggle.

Raw value
<p>Tech lead on the <strong>billing rewrite</strong>. Mentoring <em>two junior engineers</em>; up for promotion in Q3.</p>
</> Clean HTML

Tech lead on the billing rewrite. Mentoring two junior engineers; up for promotion in Q3.

HTML Render HTML

Tech lead on the billing rewrite. Mentoring two junior engineers; up for promotion in Q3.

Auto-detected when column contains HTML tags or entities · available in Format menu (···)
New

Row preview: Render HTML & Show image toggles

In the row preview panel, HTML fields now show a "Render HTML / Show code" toggle. Image fields always show the toggle — even when the column is globally set to render as images — so you can quickly flip between the URL and the rendered image.

v1.4
New

Column filters: text contains & numeric range

Filter high-cardinality columns like name or email by typing a substring. For numeric columns like salary or score, set a min/max range — csvdiff auto-detects numeric columns and switches to range mode.

Column filters
Text contains
ayesha

2 values matched

"ayesha"
Numeric range
50000
120000

7 values in range

50000 – 120000
New

Blanks filter

Find rows with empty cells in any column. The blank entry now appears as a regular checkbox row at the top of the value list — consistent with the rest of the filter UI.

Filter statusFilter active (1)
Search values…
empty3
active8
on leave4
pending3
New

Export review in CSV Diff

The Review & Export sheet is now available in the diff tool. Preview resolved rows, toggle columns, and exclude rows before downloading the merged CSV.

Review export2 of 3 rows · 4 cols
2 rows
idnamedeptsalary
1Sara Ahmedproduct98000
2Usman Tariqengineering130000
3Hina Malikproduct95000
v1.2
New

Column stats bar

Click any column header in the viewer to see inline stats: unique count, blank count, min, max, and average for numeric columns — all computed client-side.

Viewer · footer
Σ
Unique11Blanks0Min$82,000Max$155,000Avg$113,272
New

Ask your data

Use natural language to query your CSV. Ask "show rows where salary > 100k" or "which department has the most employees" and get instant answers — powered by your own API key, no data leaves the browser.

Ask your dataGemini
Which department has the highest average salary?
Show plan
Group rows by department
→ Average salary per group
→ Sort descending
Engineering has the highest average salary at $131,500.
3 rows
TSV · CSV
departmentavg_salary
engineering$131,500
product$109,333
data$96,500
Follow up
Show me all engineersWhich employees earn above average?
New

Dark mode

Full dark mode across the diff tool, viewer, and blog — respects system preference and can be toggled manually.

light theme
AI
statusname
namedepartmentsalary
Sara Ahmedproduct98000
Usman Tariqengineering130000
Hina Malikproduct95000
dark theme
AI
statusname
namedepartmentsalary
Sara Ahmedproduct98000
Usman Tariqengineering130000
Hina Malikproduct95000
v1.1
New

Color rules

Highlight cells based on rules: heatmap by value, category colors, above average, empty cells, or duplicates. Rules persist to export.

namedepartmentsalary
Sara Ahmedproduct$98,000
Usman Tariqengineering$130,000
Hina Malikproduct$95,000
Zain Alidata$87,000
John Smithengineering$155,000
Heatmap · salaryCategory · status
New

Fill blanks & fill down

Fill empty cells from the cell above — useful for pivot-style exports where groups repeat only in the first row.

Before
regionnamesales
NorthAlice12000
emptyBob8500
emptyCarol11200
SouthDave9800
emptyEve14300
Fill blanks
After
regionnamesales
NorthAlice12000
NorthBob8500
NorthCarol11200
SouthDave9800
SouthEve14300
New

Column formats

Format numeric columns as currency, percentage, or with custom decimal places. Format date columns to any locale. AI can suggest the right format for your column.

Format salaryReset
Detected NumberApply
NumberCurrencyPercent
Preview
98000$98,000
130000$130,000
95000$95,000
87000$87,000
Ask AI to suggest format
New

Bulk find & replace

Select values in a column filter and replace all matching cells in one click. Preview affected cells before applying.

Filter statusClear
inactive
Apply
Preview · 4 cells
on leaveinactive4
Search values…
on leave4
active8
pending3
v1.0
New

CSV Diff — initial launch

Compare two CSV or JSON files side by side. Match rows by key column, filter to changed rows, resolve per-cell conflicts, and export a merged file. 100% client-side.

Statusidnamesalarydepartment
Modified1Sara Ahmed9200098000product
Added2Usman Tariq130000engineering
Removed3Old Employee75000data
Unchanged4Hina Malik95000product
New

CSV Viewer — initial launch

Open a single CSV or JSON file as a clean paginated table. Search, sort, pin columns, hide columns, and export. No upload, no account.

employees.csv42 rows · 5 cols
engineering
idnameemaildepartmentsalary
1Sara Ahmedsara@acme.coproduct98000
2Usman Tariqusman@acme.coengineering130000
3Hina Malikhina@acme.coproduct95000
4Zain Alizain@acme.codata87000
4 matches in 42 rows/to focus search
100% in your browser

Ready to diff?

Drop your files, see the deltas, export the merge. Takes 30 seconds.