Local CSV/TSV inspection for people who need to understand a file before it reaches a spreadsheet, script, or AI-agent workflow.
Mature tools such as Miller, qsv, csvkit, and VisiData already cover broad table processing. This project stays intentionally narrow: it reports shape and safety risks without silently changing the input. It is useful when data is sensitive, a CLI is unavailable, or a quick browser check is safer than opening a file in a spreadsheet.
- Parse CSV or TSV-like text with comma, tab, semicolon, or pipe delimiters.
- Detect a delimiter only when the result is unambiguous; header presence is always explicit.
- Report row/column counts, duplicate or empty headers, jagged records, and spreadsheet-formula-like cells.
- Preserve spaces, quoted newlines, empty records, and cell text by default.
- Export deterministic CSV, TSV, or JSON. CSV/TSV can explicitly prefix formula-like cells with an apostrophe for spreadsheet import.
- Run the same Rust core through a native CLI or a local browser WASM page.
A cell is formula-like when its first character after any leading ASCII spaces is =, +, -, @, Tab, or carriage return. This intentionally includes values such as -42. The preserve policy never changes cells. The explicit escape_for_spreadsheet policy prefixes matching CSV/TSV cells with one apostrophe; JSON always preserves the original value.
There is no upload, network request, persistence, spreadsheet evaluation, automatic repair, YAML/SQL/Markdown conversion, JavaScript parser fallback, MCP server, or Agent-callable transport. The structured JSON shape is machine-readable; it is not a claim of agent integration.
The v0.1 limits are 10 MiB input, 200,000 data rows, 1,024 columns, and a 100-row preview. Input must be valid UTF-8 text (a UTF-8 BOM is accepted).
cargo run -p data_toolbox_cli -- inspect --delimiter auto --headers present data.csv
cargo run -p data_toolbox_cli -- convert --to json --headers present data.csvUse - or omit the file to read stdin. Errors are one JSON object on stderr; stdout contains only the requested result. Exit status is 0 on success, 2 for invalid CLI syntax or options, and 1 for input, UTF-8, parsing, conversion, or I/O failures.
rustup toolchain install 1.85.0 --profile minimal --no-self-update
rustup target add wasm32-unknown-unknown --toolchain 1.85.0
rustup toolchain install 1.95.0 --profile minimal --no-self-update
cargo +1.95.0 install wasm-pack --version 0.15.0 --locked
cd crates/data_toolbox_web
npm ci --ignore-scripts
npx --no-install playwright install chromium
RUSTUP_TOOLCHAIN=1.85.0 npm run build:wasm
npm run test:wasm-smokeThe browser workflow requires Node.js 24 and Python 3 in addition to the Rust toolchains above. On Linux, install Playwright's operating-system dependencies when prompted or use npx --no-install playwright install --with-deps chromium. The smoke suite uses real Chromium at 375, 768, 1024, and 1440 pixels. To open the page manually, serve the repository root with a local HTTP server and open /crates/data_toolbox_web/web/.
cargo fmt --all -- --check
cargo test --workspace --locked
cargo clippy --workspace --all-targets -- -D warnings
cargo check -p data_toolbox_web --target wasm32-unknown-unknown --locked
npx --yes markdownlint-cli2@0.23.2 "**/*.md"
ruby scripts/test_check_docs.rb
ruby scripts/check_docs.rb
ruby scripts/test_check_workflow_contracts.rb
ruby scripts/check_workflow_contracts.rbSee CONTRIBUTING.md, SECURITY.md, SUPPORT.md, and the release checklist before proposing a change or release.
The project is an Alpha release. The hosted quality, documentation, supply-chain, CodeQL, Pages, and four-viewport browser checks passed for the tagged commit. It is human-usable through the native CLI and browser UI, while its JSON output remains machine-readable rather than Agent-callable.
- Try it: GitHub Pages
- Latest candidate: v0.1.0-alpha.1 release
Capability labels and evidence rules are documented in docs/MATURITY.md. The code is released under the MIT License.