10,000 stars · BSD-2-Clause (modified: an SPDX line added above and a contributor disclaimer added at the end) · v6.22.0 (2026-09-25), confirmed by pkg.go.dev · Track this in Scout
Does what awk, cut, sort and join do, but by column name instead of column position, on CSV, TSV, JSON and JSON Lines.
▶Repo detailsthe review · specs · pros & cons · install
What it is
Miller is a single program, called mlr, that does for data with named columns what the old Unix tools awk, cut, sort and join do for plain lines of text. It is written in Go and has no runtime dependencies at all.
What it is good for. Anyone with data in files rather than in a database. The problem it solves is that the classic Unix tools count columns by position, so adding a column at the front breaks every command you wrote. Miller works by column name, so mlr --icsv sort -f date keeps working when the file changes shape. It is the right tool for the step between "a file arrived" and "the data is clean enough to load", and for the thirty-second question that is not worth opening a notebook for.
- Column names instead of column numbers, which is the whole point and the thing that makes a saved command still work next month.
- One downloaded file with, in the README's own words, "zero runtime dependencies", and packages for every common system. Nothing to install alongside it, no Python, no Java.
- Current and tidy. Release v6.22.0 is dated 25 September 2026 — the yearless GitHub date was confirmed against Go's own package index — and the release page says "7 commits to main since this release". 61 open issues against 11 pull requests.
- The licence is BSD-2-Clause and it is not the bare template. Read from
/blob/main/LICENSE.txt: an SPDX identifier line has been added above the text, and a disclaimer has been added at the end stating that the licence is granted by the individual contributor rather than by their employer. Neither addition takes anything away from you, but it is a modified file and this report says so rather than printing the sidebar word. - It is its own small language. The commands are short but they are not SQL and they are not a spreadsheet, so there is a day of looking things up before it feels quick.
- It reads a file and writes a file. It does not draw anything, does not keep a history of what you ran, and does not help you share the result.
dathere/qsvEdition 35 covered this: a much larger command set for CSV specifically, faster on the common jobs, but no JSON reshaping and no query language of its own.
Track this in Scout
medialab/xanEdition 36 covered this: the same CSV work with a strong emphasis on exploring and drawing in the terminal, which Miller does not do at all, and a smaller command set.
Track this in Scout- harelba/q
Takes the other approach entirely and lets you write real SQL against a delimited file, which is easier if you already know SQL and slower on large files.
Track this in Scout
brew install miller # macOS sudo apt-get install miller # Debian or Ubuntu choco install miller # Windows # or, with Go installed go install github.com/johnkerl/miller/v6/cmd/mlr@latest mlr --icsv --opprint stats1 -a mean,max -f price -g category sales.csv mlr --icsv --ojson head -n 3 sales.csv




