All notable changes to jlkit are documented here.
The format follows Keep a Changelog;
this project adheres to Semantic Versioning.
0.1.1 — 2026-08-28
First release published to PyPI.
head/tailaccept-n/--lines N(GNU-style) in addition to the positional count.
jlkit head data.jsonl(count omitted) no longer errors with "invalid int value" — a lone positional is treated as the file, not the count.jlkit head <non-number> filenow exits 2 with a clear message instead of an argparse type error.
0.1.0 — 2026-08-28
Initial public release (GitHub tag only; superseded by 0.1.1 on PyPI).
head N/tail N— first/last N records, streaming;tailkeeps only an N-record ring buffer.select FIELDS— project comma-separated dotted paths (id,user.name,ts).filter EXPR— keep records matching a safe no-eval predicate grammar:==,!=,<,<=,>,>=,exists,contains,and/or/not, parentheses, dotted paths.stats— per-field presence %, null %, observed types, numeric min/max/mean/stddev, string cardinality; nested keys flattened to dotted paths.schema— infer a JSON Schema (draft 2020-12, structural subset) over a full pass.validate— report malformed lines by 1-indexed number; with--schema, also report non-conforming records. Exits non-zero on any failure (CI-friendly).- Global
--limit N— stop after N input records. - Transparent
.gzinput; reads a file arg or stdin. - Requires Python 3.12+ (argparse in 3.12 handles options interspersed with
positional arguments, e.g.
jlkit select name --limit 1 data.jsonl).
- A missing or unreadable input file now prints a one-line
jlkit CMD: cannot open '...': <reason>(exit 2) instead of a traceback. - Writing to a closed pipe (
jlkit ... | head) exits quietly instead of raisingBrokenPipeErroron shutdown.