See what changed.
Local-first CSV/TSV comparison in your browser.
"Files are processed locally in your browser."
SheetCompare is a focused tabular diffing tool. Drop two versions of a CSV or TSV file, select a primary key column, and immediately inspect cell-level additions, removals, and modifications without uploading data to external servers.
- Privacy by Architecture: All parsing, matching, and cell-diff computations occur strictly inside your local browser runtime.
- No Data Ingestion: Zero backend servers, databases, third-party analytics, or telemetry.
- Zero Configuration: No account creation, login, or cloud credentials required.
# Clone the repository
git clone https://github.com/debother/SheetCompare.git
cd SheetCompare
# Install dependencies
npm install
# Start local development server
npm run devOpen http://localhost:5173 in your browser.
- Dual File Dropzone: Drag-and-drop or select File A (baseline) and File B (updated).
- Delimiter Detection: Automatic detection for commas (
,), tabs (\t), semicolons (;), and pipes (|). - Primary Key Matching: Automatic detection of common columns to match rows across versions.
- Row Change Classification:
- 🟢 Added: Rows newly present in File B.
- 🔴 Removed: Rows present in File A but absent in File B.
- 🟡 Changed: Rows with modified cell values.
- ⚪ Unchanged: Identical rows.
- Cell-Level Diff: Visual
old value → new valuedelta inspection. - Filter & Search: Instant filtering by status and text query across all columns.
- Diff Export: Copy or download diff reports in GitHub-flavored Markdown table format or annotated CSV.
- Strict Error Handling: Explicit errors for duplicate primary keys, empty files, missing headers, and schema mismatches.
- Comma-Separated Values (
.csv) - Tab-Separated Values (
.tsv) - Plain text delimiter-separated files (
.txt)
- Single Primary Key: Composite keys (multi-column keys) are not currently supported.
- Text-Only Tabular Formats: Proprietary spreadsheet formats (
.xlsx,.xls) and document formats (.pdf) are intentionally excluded. - In-Memory Scale: Designed for datasets that fit comfortably in browser RAM (up to tens of thousands of rows).
- Deterministic Exact Matching: Keys are matched by exact string comparison; fuzzy matching is omitted to guarantee accuracy.
# Start development server with hot module reload
npm run dev
# Run TypeScript compilation and production build
npm run build
# Preview production build locally
npm run preview# Run Vitest test suite once
npm test -- --run
# Run test suite in watch mode
npm testSheetCompare is built so file contents are processed locally in the browser and are not uploaded by SheetCompare. Ordinary hosting may still process request metadata. This does not constitute an automated sensitive data filter or compliance certification. Users remain responsible for handling sensitive spreadsheets according to their organization's policies.
- Stage: MVP
- Branch Strategy:
feat/*→develop(integration) →main(release/stable)