Skip to content

Latest commit

 

History

14 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Transmute

Tests License: MIT npm

Cross-platform CLI data transformer — JSON, CSV, YAML, XML. Filter, sort, map, pick, omit, unique and convert between formats. Zero dependencies, runs anywhere Node.js runs (macOS, Windows, Linux).

Tests License: MIT

Transmute is also a cross-platform desktop app (macOS, Windows, Linux) with a visual pipeline builder — free tier: 3 transformations per launch, $19 one-time license.

Install / run

npx @mahope/transmute people.csv --output json

Or clone and run locally:

git clone https://github.com/mahope/transmute.git
cd transmute
npm link        # makes `transmute` available globally

Usage

transmute <file> [options]
cat <file> | transmute [options]

Options:

  • -f, --format <type> — input format: json, csv, yaml, xml (auto-detected)
  • -p, --pipe <json> — transformation pipeline as a JSON array
  • -o, --output <type> — output format: json, csv, yaml, xml, table (default: table)

Examples

# CSV → JSON with type coercion (numbers stay numbers)
transmute people.csv -o json

# Filter and sort in one pass
transmute people.csv --pipe '[{"op":"filter","expr":"item.age > 26"},{"op":"sort","by":"age","dir":"desc"}]' -o csv

# YAML → JSON from stdin
cat config.yaml | transmute --format yaml --output json

# JSON → XML
echo '{"a":1}' | transmute --output xml

Pipeline operations

Op Example
filter {"op":"filter","expr":"item.age > 18"}
map {"op":"map","expr":"({...item, active: true})"}
pick {"op":"pick","fields":["name","email"]}
omit {"op":"omit","fields":["password"]}
sort {"op":"sort","by":"name","dir":"asc"}
unique {"op":"unique","by":"email"}
group {"op":"group","by":"city"}
add {"op":"add","fields":{"total":"item.price * item.qty"}}
join {"op":"join","on":"id","keep":"left","with":[...]}
rename {"op":"rename","mapping":{"qty":"quantity"}}
flatten {"op":"flatten","field":"items"}
head / tail / count {"op":"head","n":5} · {"op":"count"}

Tests

node test/test.js

Why Transmute?

  • Private by default — everything runs locally, your data never touches a server
  • Zero dependencies — one Node.js file, no install bloat
  • Pipelines — chain filter → map → sort → convert in a single pass
  • Cross-platform — macOS, Windows, Linux

License

MIT

About

Cross-platform data transformer CLI — JSON, CSV, YAML, XML. Filter, sort, map, convert. Zero dependencies.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages