Data and databases · Edition No. 37 · 1 Oct 2026

johnkerl/miller

Does what awk, cut, sort and join do, but by column name instead of column position, on CSV, TSV, JSON and JSON Lines.

← Data and databasesRead the whole edition →

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.

Stars10,000
LicenceBSD-2-Clause (modified: an SPDX line added above and a contributor disclaimer added at the end)
Latestv6.22.0 (2026-09-25), confirmed by pkg.go.dev
Good
  • 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.
Watch for
  • 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.
Similar repositories
  • dathere/qsv

    Edition 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/xan

    Edition 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
Install
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
Screenshots
johnkerl/miller: GitHub preview cardjohnkerl/miller: Screenshot 1johnkerl/miller: Screenshot 2johnkerl/miller: Screenshot 3johnkerl/miller: Screenshot 4

Get the next edition in your inbox

A dozen repositories, opened and checked. The licence read, the last release dated, and the ones that did not make it named with the reason. It is the half most lists leave out.

No tracking pixels. One click to leave. The archive stays free either way.

We use your address to send the edition and nothing else. Confirm by email, leave in one click. How we handle it.