sheeter-engine 0.10.0

A CLI tool for converting data files between formats. v0.1.0 supports CSV <-> JSON.
Documentation

Sheeter

Convert data files between formats from the command line.

Eight formats, fifty-six routes. CSV, TSV, JSON, YAML, XML, TOML, XLSX, SQL — any direction, through a single canonical hub.

Install

cargo install sheeter-engine

The installed binary is sheeter.

Usage

sheeter convert --from <FMT> --to <FMT> [OPTIONS] <input> <output>

Formats: csv, tsv, json, yaml, xml, toml, xlsx, sql.

Options

--sheet NAME      Select one sheet (XLSX input only)
--dialect NAME    SQL dialect: generic, postgresql, sqlite, mysql
--filter EXPR     Filter rows (e.g. "age > 30 and city == 'SP'")
--select COLS     Keep only these columns (comma-separated)
--rename PAIRS    Rename columns (e.g. "old=new,foo=bar")
--limit N         Keep at most N rows
--sort SPEC       Sort by column(s) (e.g. "age desc,name")
--dedup           Drop duplicate rows (whole row)
--dedup-by COLS   Drop duplicates by column(s)

Examples

# CSV → JSON
sheeter convert --from csv --to json data.csv data.json

# Filter, select, and rename in one pass
sheeter convert --from csv --to csv \
  --filter "age >= 30" \
  --select "name,age,salary" \
  --rename "salary=wage" \
  data.csv result.csv

# Sort large CSV in bounded memory
sheeter convert --from csv --to csv --sort "age desc" big.csv sorted.csv

# Multi-sheet XLSX → one CSV per sheet
sheeter convert --from xlsx --to csv report.xlsx report.csv

# Inspect any data file
sheeter inspect --format xlsx report.xlsx

How it works

Every reader produces a CanonicalValue; every writer consumes one. Adding a new format costs one reader and one writer, not N-1 pairwise converters.

Streaming vs buffered

Input → Output Memory Transforms applied
CSV/TSV → CSV/TSV, no --sort Constant Yes (per row)
CSV/TSV → CSV/TSV, with --sort Bounded by 50k-row chunk Yes
Any other pair Full document in memory Yes (round-trip through hub)

--sort on non-CSV/TSV paths buffers the whole document and currently applies transforms but not sorting; full buffered sort arrives in v0.11.0.

Versioning

This project follows Semantic Versioning 2.0.0. Changelog follows Keep a Changelog 1.1.0. Commit messages follow Conventional Commits 1.0.0.