Skip to content

v0.8.0

Choose a tag to compare

@github-actions github-actions released this 26 Jul 15:10
· 14 commits to main since this release

Nested objects and filter chains in -j templates

The shaped-JSON templates can now express real hierarchy:

  • sel {…} evaluates the object inside sel's first match (null if 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 (-j values, --table cells, --has-text) is now layout-aware: A<br>B no longer glues to AB, and script/style content 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