v0.8.0
Nested objects and filter chains in -j templates
The shaped-JSON templates can now express real hierarchy:
sel {…}evaluates the object insidesel's first match (nullif nothing matches)[sel {…}]emits one object per match — arrays of objects, nested arbitrarily deep
$ cull '.story' -j "{title: .link a, score: .upvoter | num, tags: [.tag],
by: .byline {user: \"a[href^='/~']:not(:has(img))\", when: time @datetime}}" https://lobste.rs
{"title":"…","score":91,"tags":["programming"],"by":{"user":"refp","when":"2026-07-25 06:33:00"}}- New filters
| trim,| lower,| upper— and filters now chain:{href: a @href | trim | lower}
Fixed
- Collapsed text (
-jvalues,--tablecells,--has-text) is now layout-aware:A<br>Bno longer glues toAB, andscript/stylecontent never leaks into extracted values.
131 tests. Try it in the browser playground — the "nested JSON" preset runs this release compiled to WASM.
Install: brew install rashida-thorne/cull/cull · cargo binstall cull · scoop bucket add cull https://github.com/rashida-thorne/scoop-cull && scoop install cull · nix run github:rashida-thorne/cull · more options
Full changelog: https://github.com/rashida-thorne/cull/blob/main/CHANGELOG.md