An offline CSV file comparison tool and configuration diff editor for your browser.
Compare up to six files side by side, find changed or missing values, edit individual entries, and download the results. The layout adapts to the number of files loaded: two files get two comparison columns, with room to grow to six.
No installation. No build step. No file uploads. Just open index.html.
CSV support: This tool compares two-column key/value CSV and TSV files, with one unique key per row and no header. It is designed for settings exports and configuration data, rather than arbitrary tables with many columns.
- Find differences quickly. Align rows by key, even when file order changes. Filter to changed, missing, or matching entries.
- Compare two to six files. Add and remove files as you work; columns resize automatically.
- Edit without rewriting the whole file. Downloads preserve original bytes outside changed values, including comments, spacing, line endings, ordering, and BOM.
- Compare numbers accurately. Optional numeric equality treats 1, 1.0, and 1e0 as equal without floating-point rounding or tolerance.
- Handle more than CSV. Compare INI, flat key/value text, TSV, and PX4 / QGroundControl text parameter exports.
- Keep files local. All processing happens in browser memory, with no network requests, analytics, or persistent storage.
- Export a report. Download the visible comparison as CSV, with protection against spreadsheet formula interpretation.
- Download this repository using Code → Download ZIP, then extract it.
- Open index.html in a modern browser.
- Click Open files and select the files to compare, or drag files onto the empty drop area.
- Use Add files to expand the comparison, up to six files. Use Replace or × on a file card to replace or remove it.
- Search for a key, section, or value, or choose Differences only.
- Click a value to edit it. Use Save file on that file's card to download a verified copy.
Open files starts a new comparison. Add files keeps the files already loaded. Unsaved edits prompt before they are discarded. The Input selector applies when loading files; select a format explicitly when auto detection is ambiguous.
Want a quick look? Click Try example for six fictional configurations, or load files from the examples folder.
| Format | Example | Notes |
|---|---|---|
| Two-column CSV | timeout,30 | No header; quoted fields and escaped quotes supported |
| Two-column TSV | timeout + tab + 30 | Exactly two columns; quoted fields supported |
| Key/value text | timeout=30 or timeout: 30 | Text and empty values supported |
| Whitespace-separated text | timeout 30 | Flat key/value entries |
| INI | [display] followed by theme=dark | Keys align within their section |
| PX4 / QGroundControl | 1 1 RATE 6.5 9 | Vehicle, component, name, value, type |
| Parameter commands | param set RATE 6.5 | Flat key/value entries |
baseline.csv
mode,preview
timeout,30
label,"Example, baseline"
enabled,truerevision.csv
mode,release
timeout,45
label,"Example, baseline"
new_setting,onThe comparison marks mode and timeout as different, label as matching, and enabled / new_setting as missing from one file. Input row order does not affect alignment.
- Matching rows use a muted green fill.
- Within a differing row, equal values share a color and an A–F group letter.
- Stripes indicate a key missing from a loaded file.
- A gold underline marks an edited value. An asterisk on Save file marks changes since the last download.
- Hover a value for its original text, filename, source line, and optional component/type metadata.
Numeric equality affects comparison only; it never reformats saved values. Compare types includes optional PX4 type IDs. Keys and nonnumeric values are case-sensitive; search is case-insensitive.
Save file downloads an edited- copy of that file, including edits hidden by a filter. Before downloading, the app reparses the result and verifies every key, value, and metadata field. CSV/TSV quotes are escaped automatically.
Export CSV downloads a comparison report for the currently visible rows. It contains loaded filenames, keys, values, and optional types. Use Save file when you want an edited configuration rather than a report.
- Maximum six files, 20 MB per file.
- Supports UTF-8 and BOM-marked UTF-16 LE/BE. Invalid encodings are rejected.
- CSV/TSV must have exactly two columns. Headers are treated as data; omit them. Multiline fields are unsupported.
- Duplicate keys within a section or malformed lines reject the whole file.
- Blank lines and full-line #, ;, and // comments are skipped. Inline comments remain part of the value.
- In generic key/value files, quotes are literal text and leading/trailing value whitespace is formatting. Use = or : for empty values.
- Auto detection uses the first non-comment data line. Choose the format explicitly for ambiguous files, such as whitespace data containing tabs or commas.
- INI sections use separate namespaces. Unsectioned keys use component 1, allowing comparison with corresponding PX4 entries. Vehicle IDs do not affect alignment.
- This is a flat key/value comparer. Arbitrary multi-column CSV, JSON, XML, nested YAML, binary files, and multiline values are unsupported.
The application is a single HTML file with inline CSS and JavaScript. It has no external libraries, remote fonts, tracking, accounts, network calls, or persistent storage. Files and edits are cleared when the page closes or refreshes.
Downloaded files and reports retain the data and filenames you loaded: the tool does not redact your input. Review those outputs before sharing. All bundled examples and screenshots use fictional data and example.com.
No dependency installation is needed. To run the checks, use a current Node.js release:
node tests.cjsChecks cover parsing, exact numeric equality, encoding handling, byte preservation, edit/save validation, malformed inputs, CSV export safety, and the dynamic zero-to-six-file workflow. The browser app itself does not need Node.js.
The repository can also be hosted by any static web server, including GitHub Pages; index.html is the entry point.
Bug reports and improvements are welcome. Include the browser, input format, expected result, and a minimal fictional example. Please remove secrets and personal data from sample files before sharing them.
No license has been selected yet. Public availability does not itself grant a reuse license.

