Skip to content

Releases: johnkerl/miller

Miller 6.20.2: Miller and AI, bash/zsh tab-completion, bytes datatype

Choose a tag to compare

@johnkerl johnkerl released this 04 Jul 19:21

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:

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:

A first-class bytes type in the DSL

Docs:

PR:

  • New bytes type with b"..." literals and base64/hex codecs by @johnkerl in #2122

More features

Bug fixes

  • Fix masked unset-on-array error path (along with govet lint findings) by @johnkerl in #2129

Documentation

Internals

New Contributors

Full Changelog: v6.19.0...v6.20.0

Miller 6.19.0: Performance improvements

Choose a tag to compare

@johnkerl johnkerl released this 19 Jun 22:42

The headline for this release is across-the-board runtime improvements.

For details, please see https://miller.readthedocs.io/en/latest/performance/#allocationgc-optimizations-june-2026.

Performance

  • Lazy per-record hashing: ~15-30% faster on common workloads by @johnkerl in #2081
  • Batch-arena field allocation for line-based readers by @johnkerl in #2082
  • Batch-allocate per-record objects; reuse CSV-writer field buffer by @johnkerl in #2083
  • Pool DSL stack frames across records (~8-9% perf on mlr put) by @johnkerl in #2086
  • Pool DSL stack-frame sets across UDF/subroutine calls (~31% perf on function-heavy mlr put) by @johnkerl in #2088
  • Drop redundant deep-copy of UDF return values (~3-16% perf on UDFs in mlr put) by @johnkerl in #2089
  • Bind scalar locals/params by reference, not by copy (~4-9% on DSL) by @johnkerl in #2090
  • docs: add "Allocation/GC optimizations: June 2026" performance section by @johnkerl in #2091

Features

  • Add --omd-aligned flag for column-padded markdown output by @johnkerl in #2057
  • Default to "cat" verb when none is supplied by @johnkerl in #2060

Bug fixes

Dependency updates

Full Changelog: v6.18.1...v6.19.0

Miller 6.18.1: DKVPX file format; misc. features and bugfixes

Choose a tag to compare

@johnkerl johnkerl released this 19 Apr 15:47

New features

  • DKVPX file format: New file format added (#2002)
  • hasvalue builtin function: New function for value existence checks (#2026)
  • Fixed-width support for PPRINT reader: Read fixed-width input via PPRINT (#1999)
  • Unicode printing support for barred output: Improved barred output rendering (#1984)
  • Regexed field-selection for mlr sort-within-records: Select fields by regex when sorting (#1964)
  • LRU-caching for split: Performance improvement for mlr split (#2003)

Bug fixes

  • #1639: stats1 null_count with --fr regex now gives correct results (#1994)
  • #1784: Fixed inconsistent mapexcept behavior (#2004)
  • #1998: Fixed PPRINT barred reader over-reading columns with ragged/implicit headers (#2005)
  • YAML output: Preserve key order (#2034)
  • Array compare: Fix crash when arrays contain absent values (#2039)
  • mlr step: Fix race condition (#2041)
  • sub/gsub: Correct handling of "\n" in replacement (#2042)
  • Windows CI fix (#2044)

Internals and tooling

  • Upgraded to Go 1.25 (#2012)
  • Replaced GOCC parser-generator with PGPG (#2015)
  • Simplified positional-indexing syntax in mlr.bnf (#2008)
  • Experimental mlr script mode (#2009)
  • Multiple staticcheck cleanups (#2006, #2007)

Documentation

  • New record-templating and custom record-output formatting examples (#1988, #1989)
  • Updated performance numbers and language-timings reorg (#1990, #1991, #2000)
  • DeepWiki badge added to README (#1986, #1987)

New Contributors

Full details

Dependency updates

Full Changelog: v6.17.0...v6.18.0

Miller 6.17.0: YAML and DCF file formats; performance improvements; bugfixes

Choose a tag to compare

@johnkerl johnkerl released this 21 Feb 14:26

Features

Performance

Bugfixes

Internals

Dependency updates

Full Changelog: v6.16.0...v6.17.0

Miller 6.16.0: Snap support via `snap install miller`

Choose a tag to compare

@johnkerl johnkerl released this 02 Jan 19:06
b8db798

Installable on Linux arm64 and amd64 via snap install miller.

Note: for Snap only, the executable is miller, not mlr.

See also issue #231.

What's changed

Dependency updates

New Contributors

Full Changelog: v6.15.0...v6.16.0

Miller 6.15.0: Fix double quotes in CSV comments and `mlr -I` mode preservation; `sort -b`

Choose a tag to compare

@johnkerl johnkerl released this 14 Aug 22:06
4ebef87

New features

Bugfixes

Dependency updates

New Contributors

Full Changelog: v6.14.0...v6.15.0

Miller 6.14.0: survival curve, misc. features, and bugfixes

Choose a tag to compare

@johnkerl johnkerl released this 04 Jul 17:58
7a69589

New features

  • Add surv verb to estimate a survival curve by @cwarden in #1788
  • cut: Consider -o flag even when using regexes with -r by @balki in #1823
  • Add keystroke savers for same format by @balki in #1824

Bug fixes

Documentation

Internals

Dependencies

Read more

Miller 6.13.0: File-stat DSL function, new stats accumulator, misc. bugfixes

Choose a tag to compare

@johnkerl johnkerl released this 05 Oct 14:23

New features

Bug fixes

Documentation updates

Minor changes

New Contributors

Dependency updates

Full Changelog: v6.12.0...v6.13.0

Miller 6.12.0: New sparsify verb, wide-table performance improvement, thousands separator for fmtnum function

Choose a tag to compare

@johnkerl johnkerl released this 16 Mar 21:24

Features

Bugfixes

Internal

Dependency updates

Full Changelog: v6.11.0...v6.12.0

Miller 6.11.0: CSV/TSV auto-unsparsify, regex-fieldname support for reorder/sub/ssub/gsub, strmatch DSL function, and more

Choose a tag to compare

@johnkerl johnkerl released this 23 Jan 22:40

Features

Bugfixes

Internals

Dependencies

Full Changelog: v6.10.0...v6.11.0