About CSVUtils
CSVUtils is a local tabular transformation workbench. You load delimited files or JSON, build an ordered recipe of steps, preview the table after each step, and export a verified file with exact row accounting. Engine version 1.0.0.
How it works
- Static site: there is no application server, upload endpoint, account or analytics. Your data is read with the browser’s file APIs.
- Parsing and every recipe step run in a Web Worker. A request that exceeds its time budget terminates the worker, which is rebuilt from the original bytes; the last committed result is never partially changed.
- Every cell is an exact string. Numbers are compared and summed with BigInt-based decimals. Missing, empty and whitespace-only values stay distinct.
- Your workspace (files, recipe and recent revisions) autosaves to this browser’s IndexedDB unless you choose Private session. Sources above 50 MB are kept in memory only, and the status line says so.
Limits of this release
- All data is held in memory. Files over 300 MB are refused. Practical limits depend on your device; benchmark figures have not been published.
- Sort, join, group and pivot need all rows in memory; streaming and disk-backed (OPFS) execution are on the roadmap.
- Sample data on every page is synthetic and self-authored (version 2026-10-30). It does not describe real people or companies.
Operations
| Step | Requirement | Streamable | Loss risk | Version |
|---|---|---|---|---|
| Trim & case | CSVU-005 | yes | changes values | v1 |
| Find & replace | CSVU-006 | yes | changes values | v1 |
| Convert type / date | CSVU-012 | yes | changes values | v1 |
| Fill missing | CSVU-013 | no | changes values | v1 |
| Split column | CSVU-007 | yes | none | v1 |
| Merge columns | CSVU-007 | yes | none | v1 |
| Extract with regex | CSVU-027 | yes | none | v1 |
| Rename columns | CSVU-008 | yes | none | v1 |
| Select / reorder / drop | CSVU-008 | yes | removes columns | v1 |
| Filter rows | CSVU-009 | yes | removes rows | v1 |
| Sort (stable) | CSVU-010 | no | none | v1 |
| Deduplicate | CSVU-011 | no | removes rows | v1 |
| Sample rows | CSVU-030 | no | removes rows | v1 |
| Append file | CSVU-014 | yes | none | v1 |
| Join file | CSVU-022 | no | reshapes | v1 |
| Group & aggregate | CSVU-024 | no | reshapes | v1 |
| Pivot | CSVU-025 | no | reshapes | v1 |
| Unpivot | CSVU-025 | yes | reshapes | v1 |
| Validate rules | CSVU-016 | no | none | v1 |
| Mask / hash | CSVU-031 | yes | changes values | v1 |
| Cell edits | CSVU-004 | yes | changes values | v1 |
Feature status
29 of 45 tracked requirements are done. Labels: NATIVE — implemented locally in the browser; UNSUPPORTED — deliberately not offered in this release; ROADMAP — planned, not implemented.
| ID | Phase | Capability | Status | Label | Notes |
|---|---|---|---|---|---|
| CSVU-001 | R1 | Dialect/encoding import | Done | NATIVE | Delimiter/header sniffing, quote, 8 encodings with BOM detection and UTF-8→Windows-1252 fallback; every change reparses the original bytes. |
| CSVU-002 | R1 | Exact string preservation | Done | NATIVE | Cells are exact strings; conversion only through explicit steps. Fixture tests for 00123 and 9007199254740993. |
| CSVU-003 | R1 | Malformed-row ledger | Done | NATIVE | Accepted/rejected/repaired/padded/widened/blank counts reconcile against logical records; physical lines tracked separately. |
| CSVU-004 | R1 | Grid/source/profile views | Done | NATIVE | Virtualized grid (rows and columns) with provenance labels and stable column IDs; raw source view; full-scope labels. |
| CSVU-005 | R1 | Trim/case/whitespace | Done | NATIVE | Trim modes, collapse, NBSP/zero-width handling, NFC/NFKC, case; per-column scope; undo via revisions. |
| CSVU-006 | R1 | Find/replace | Done | NATIVE | Literal and JS regex (Unicode mode); worker deadline terminates runaway patterns; atomic step application. |
| CSVU-007 | R1 | Split/merge/extract columns | Done | NATIVE | Delimiter/regex split with overflow and short-value policies; merge with missing/empty policy; regex capture groups. |
| CSVU-008 | R1 | Rename/reorder/select/drop | Done | NATIVE | Internal IDs (c1…, s3.1…) stay stable for duplicate and blank headers. |
| CSVU-009 | R1 | Filter builder | Done | NATIVE | 21 typed predicates, all/any, keep/remove; missing values never satisfy comparisons; removed rows in ledger. |
| CSVU-010 | R1 | Stable sort | Done | NATIVE | Text (code point), case-insensitive, exact number, ISO date, natural; blanks first/last; stable ties. |
| CSVU-011 | R1 | Deduplicate | Done | NATIVE | Key columns, trim/case/whitespace normalization, first/last retention, group preview. |
| CSVU-012 | R1 | Type/date conversion | Partial | NATIVE | Number (dot/comma locale, grouping, half-even rounding), integer, boolean, 12 explicit date formats, failure ledger. Time-zone conversion not offered. |
| CSVU-013 | R1 | Fill missing values | Done | NATIVE | Constant/forward/backward, gap definition, optional grouping, current row order. |
| CSVU-014 | R1 | Append files | Done | NATIVE | By-name or position mapping, extra-column policy, provenance column and row IDs, counts. |
| CSVU-015 | R1 | Recipe pipeline | Done | NATIVE | Versioned JSON, per-step previews, enable/disable, reorder, undo/redo, rollback, preflight on changed schema. |
| CSVU-016 | R1 | Validation rules | Done | NATIVE | Required/not-blank/unique/range/enum/pattern/max-length/type rules; report, flag column or reject; scorecard. |
| CSVU-017 | R1 | Column profiling | Done | NATIVE | Exact over all rows; missing/empty/whitespace, distinct (capped at 200k, disclosed), exact numeric sum/min/max, leading zeros, >2^53, ambiguous dates. |
| CSVU-018 | R1 | Export dialect/options | Done | NATIVE | Delimiter, quoting, CRLF/LF, UTF-8/UTF-16LE, BOM, header, null convention, scope; output reparsed and compared value by value before download. |
| CSVU-019 | R1 | Formula-injection handling | Done | NATIVE | Explicit raw vs apostrophe-mitigated choice with counts of risky and changed values. |
| CSVU-020 | R1 | CSV↔JSON/JSONL | Done | NATIVE | Lossless JSON parser (number lexemes kept), flattening options, duplicate/blank key mapping, numbers-as-strings default, nesting. |
| CSVU-021 | R1 | Row provenance report | Done | NATIVE | source:record IDs on every row through joins/appends/unpivots; provenance CSV with recipe revision and engine version. |
| CSVU-022 | R2 | Joins | Done | NATIVE | Inner/left/right/full, multi-key, normalization, exact cardinality plan, many-to-many block, row limit, count verification. |
| CSVU-023 | R2 | Reconciliation | Partial | NATIVE | Keyed compare with exact/trim/case modes and declared numeric tolerance. No interactive match-review workflow yet. |
| CSVU-024 | R2 | Group/aggregate | Done | NATIVE | count, non-blank, distinct, sum, mean, min, max, first, last, concat with BigInt decimals and half-even means. |
| CSVU-025 | R2 | Pivot/unpivot | Done | NATIVE | Duplicate-cell aggregation with findings, absent-cell fill policy, column-count preflight. |
| CSVU-026 | R2 | Window/rank operations | Not done | ROADMAP | Not implemented. |
| CSVU-027 | R2 | Regex extraction | Done | NATIVE | Named/numbered groups, absence policy, worker deadline, test bench. |
| CSVU-028 | R2 | Date/time enrichment | Not done | ROADMAP | No calendar/time-zone enrichment. |
| CSVU-029 | R2 | Dataset diff | Done | NATIVE | Keyed or positional; duplicate-key conflicts reported; field-level changes; CSV report. |
| CSVU-030 | R2 | Sampling/splitting | Done | NATIVE | Seeded random, first N, every Nth, stratified; split by value or row count to ZIP with row-count check. |
| CSVU-031 | R2 | Anonymization helpers | Partial | NATIVE | Mask, truncate, salted SHA-256 with explicit re-identification warnings. No generalization/k-anonymity. |
| CSVU-032 | R2 | Local SQL workspace | Not done | UNSUPPORTED | No qualified exact, network-free engine; /csv-sql explains and offers query-style recipes. |
| CSVU-033 | R2 | Batch processing | Not done | ROADMAP | One primary input per recipe run. |
| CSVU-034 | R3 | Bounded streaming recipes | Not done | ROADMAP | Registry records streamability per operation; execution is in-memory. |
| CSVU-035 | R3 | Local cleanup suggestions | Not done | ROADMAP | Profile shows type hints only. |
| CSVU-036 | X | Unlimited files / universal inference | Not done | UNSUPPORTED | Excluded by design; 300 MB refusal and 50 MB autosave limit are stated. |
| CSVU-101 | R2 | Conditional derived columns | Not done | ROADMAP | |
| CSVU-102 | R2 | Lookup enrichment tables | Partial | NATIVE | Achievable with a left join on a loaded lookup file; unmatched codes stay missing. |
| CSVU-103 | R2 | Fuzzy duplicate suggestions | Not done | ROADMAP | |
| CSVU-104 | R2 | Frequency tables | Partial | NATIVE | Top values in profile (exact); full frequency table via Group & aggregate. |
| CSVU-107 | R2 | Regex test bench | Done | NATIVE | Separate worker, 1 s deadline, custom adversarial input. |
| CSVU-108 | R2 | Recipe parameterization | Not done | ROADMAP | |
| CSVU-110 | R3 | Data quality scorecard | Done | NATIVE | Per-rule checked/passed/failed counts, critical rules; no weighted score. |
| CSVU-114 | R3 | Export compatibility presets | Done | NATIVE | RFC 4180, spreadsheet UTF-8+BOM, Unix, TSV, semicolon presets with notes. |
| CSVU-105/106/109/111/112/113/115 | R2–R3 | Outliers, units, conflict resolver, incremental append, external sort, crosstab reports, audit replay | Not done | ROADMAP | Not implemented. |
Questions about a specific task? Each workbench page explains its behavior: start with cleaning or recipes.