Miller

John Kerl·Miller.Miller

Miller is like awk, sed, cut, join, and sort for name-indexed data such as CSV, TSV, and tabular JSON

Miller is like awk, sed, cut, join, and sort for name-indexed data such as CSV, TSV, and tabular JSON. You get to work with your data using named fields, without needing to count positional column indices. This is something the Unix toolkit always could have done, and arguably always should have done. It operates on key-value-pair data while the familiar Unix tools operate on integer-indexed fields: if the natural data structure for the latter is the array, then Miller’s natural data structure is the insertion-ordered hash map. This encompasses a variety of data formats, including but not limited to the familiar CSV, TSV, and JSON. (Miller can handle positionally-indexed data as a special case.) ## Features - Miller is multi-purpose: it’s useful for data cleaning, data reduction, statistical reporting, devops, system administration, log-file processing, format conversion, and database-query post-processing. - You can use Miller to snarf and munge log-file data, including selecting out relevant substreams, then produce CSV format and load that into all-in-memory/data-frame utilities for further statistical and/or graphical processing. - Miller complements data-analysis tools such as R, pandas, etc.: you can use Miller to clean and prepare your data. While you can do basic statistics entirely in Miller, its streaming-data feature and single-pass algorithms enable you to reduce very large data sets. - Miller complements SQL databases: you can slice, dice, and reformat data on the client side on its way into or out of a database. (Examples here and here). You can also reap some of the benefits of databases for quick, setup-free one-off tasks when you just need to query some data in disk files in a hurry. - Miller also goes beyond the classic Unix tools by stepping fully into our modern, no-SQL world: its essential record-heterogeneity property allows Miller to operate on data where records with different schema (field names) are interleaved. - Miller is streaming: most operations need only a single record in memory at a time, rather than ingesting all input before producing any output. For those operations which require deeper retention (sort, tac, stats1), Miller retains only as much data as needed. This means that whenever functionally possible, you can operate on files which are larger than your system’s available RAM, and you can use Miller in tail -f contexts. - Miller is pipe-friendly and interoperates with the Unix toolkit - Miller’s I/O formats include tabular pretty-printing, positionally indexed (Unix-toolkit style), CSV, JSON, and others - Miller does conversion between formats - Miller’s processing is format-aware: e.g. CSV sort and tac keep header lines first - Miller has high-throughput performance on par with the Unix toolkit - Not unlike jq (for JSON), Miller is written in portable, modern C, with zero runtime dependencies. You can download or compile a single binary, scp it to a faraway machine, and expect it to work.

winget install --id Miller.Miller --exact --source winget

Latest 6.20.2·July 4, 2026

Release Notes

What's new in 6.20.2

  • Miller now treats AI agents as first-class users
  • There is shell tab-completion for bash and zsh
  • There is a new bytes datatype, along with base64 encode/decode support (Note: versions 6.20.0 and 6.20.1 were in error and are not released.) Miller and AI Miller now treats AI agents as first-class users. Everything an agent needs to drive Miller well -- discovering what exists, learning your data's shape, validating expressions before running them, and recovering from errors -- is now a built-in, structured feature of the mlr binary, packaged for MCP-speaking agents (Claude Code, Claude Desktop, Cursor, ...) via a one-line setup. Your choice of

Claude

mlr skill install ~/.claude/skills/miller

Codex and Gemini

mlr skill install ~/.agents/skills/miller or

Claude

claude mcp add miller -- mlr mcp

Codex

codex mcp add miller -- mlr mcp

Gemini

gemini mcp add miller mlr mcp See the new Miller and AI docs page for the quick start. Reference pages:

  • https://miller.readthedocs.io/en/latest/ai
  • https://miller.readthedocs.io/en/latest/agent-skill
  • https://miller.readthedocs.io/en/latest/mcp-server
  • https://miller.readthedocs.io/en/latest/ai-support PRs:
  • Machine-readable help catalog, mlr help --as-json: by @johnkerl in #2099, #2106
  • JSON capability index and mlr which intent router by @johnkerl in #2107
  • Structured verb options, with enum value-sets by @johnkerl in #2111
  • Structured error output, --errors-json, with hints and did-you-mean suggestions by @johnkerl in #2113
  • DSL validate/dry-run, mlr put --explain / mlr filter --explain by @johnkerl in #2131
  • New mlr describe verb: field names, types, cardinality, and value domains of your data in one pass by @johnkerl in #2132
  • New mlr mcp MCP server and agent playbook, with a --no-shell sandbox flag by @johnkerl in #2133
  • Roadmap doc by @johnkerl in #2103; "Miller and AI" docs page by @johnkerl in #2134 Shell tab-completion for bash and zsh Documentation: https://miller.readthedocs.io/en/latest/shell-completion/ PR:
  • Shell tab-completion for bash and zsh by @johnkerl in #2096 A first-class bytes type in the DSL Docs:
  • https://miller.readthedocs.io/en/latest/reference-main-data-types/
  • https://miller.readthedocs.io/en/latest/reference-dsl-builtin-functions/#base64_encode
  • https://miller.readthedocs.io/en/latest/reference-dsl-builtin-functions/#base64_decode PR:
  • New bytes type with b"..." literals and base64/hex codecs by @johnkerl in #2122 More features
  • New tail -n +N and head -n -N options by @farnoy in #2071
  • Long-overdue --md flag by @johnkerl in #2100
  • Windows-arm64 releases by @teo-tsirpanis in #2127 Bug fixes
  • Fix masked unset-on-array error path (along with govet lint findings) by @johnkerl in #2129 Documentation
  • CSV and JSON troubleshooting tips by @dashitongzhi in #2123, with page-refactor by @johnkerl in #2128
  • Document time-conversion thread safety by @dashitongzhi in #2115
  • PNG graphics in perf docs for issue-2084 perf mods by @johnkerl in #2095 Internals
  • golangci-lint CI workflow by @dashitongzhi in #2076
  • Lint fixes bringing staticcheck and errcheck to zero by @johnkerl in #2108, #2110, #2112, #2130
  • Strip dead code from pkg/ by @johnkerl in #2121
  • CI/actions updates by @johnkerl in #2119 and by @dependabot in #2101, #2102, #2104, #2105, #2114, #2116, #2118, #2124, #2125, #2126
  • Dependency bumps by @dependabot in #2117, #2120 New Contributors
  • @farnoy made their first contribution in #2071
  • @dashitongzhi made their first contribution in #2076
  • @teo-tsirpanis made their first contribution in #2127 Full Changelog: v6.19.0...v6.20.0

Installer type: zip

ArchitectureScopeDownloadSHA256
x86Download84095BEFDD5827980632034F89B6FE05F9B449FD72DF356C86B3864F5DB4EADC
x64DownloadC49CB6C1DD3A5A8C7B63F64E6758C910CAF4B4B2AAE040E75946AAA5BFF77B6D
arm64Download680B999682A9C62EDB4A2DE0DF2B6617B447CB3B003B5CBCC77128E7A97F1E97

Details

Homepage
https://github.com/johnkerl/miller
License
BSD-2-Clause
Publisher
John Kerl
Support
https://github.com/johnkerl/miller/issues
Moniker
miller

Tags

csvcsv-formatdata-cleaningdata-processingdata-reductiondata-regressiondevopsdevops-toolsjsonjson-datastatistical-analysisstatisticsstreaming-algorithmsstreaming-datatabular-datatsv

Older versions (5)

6.13.0
ArchitectureScopeDownloadSHA256
x86DownloadD530685B203D31DC115C4E768802D7D6BCB889CFA4DD7C1534DFA37D8B440D1B
x64DownloadA712A31845369AED737519B22B233CE70E1451DA2957E5A048C89693A97B39FC
6.12.0
ArchitectureScopeDownloadSHA256
x86DownloadD2F5BE120095D9E077AEA206E2158255C5F882487EAF0C9E72E47E35708C5236
x64Download52C755E01E5C25B1F5505C49B0604E259CDDF14F68784AA779CB276B33948B49
6.11.0
ArchitectureScopeDownloadSHA256
x86DownloadCBA4A2DA0DCE1087C92A4CAEFE76986580139683E45FD3B64EF8103BF35C31CC
x64DownloadAC261B3BB6444780F06406814E687D9072C26C2B72DD924CFB8A68F609ADD2A8
6.10.0
ArchitectureScopeDownloadSHA256
x86DownloadE5E7121C6962E0A9678F539D3C77B505D7CE4497721EAD4EF4B2B54010575D00
x64Download82F0204B3E54AB0D201CAEB6B78186710BC03941373C55272082DA473130685B
6.9.0
ArchitectureScopeDownloadSHA256
x86Download574BD27CC6F70548FF9CCF7FCB0041E28BC5D5F9458CBC3662B209785902B3DB
x64DownloadB28CBB2517BE4CBF57A3D3AA69A6E643157091561924E6C0382A62A03C89FB80